Repository: NextCenturyCorporation/MCS (language: python)

Issue:
Test 118 fix



Discussion / hints:

Fix patch:
diff --git a/.flake8 b/.flake8
index c09bc7aa4..7edd59187 100644
--- a/.flake8
+++ b/.flake8
@@ -1,5 +1,5 @@
 [flake8]
-ignore = E402, W504
+ignore = E402, W504, FS003
 exclude = 
         machine_common_sense/__init__.py,
         build,
diff --git a/.gitignore b/.gitignore
index 77f32df37..80f809fd3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,3 +53,7 @@ scripts/log.config.user.py
 
 #.vscode files
 .vscode/launch.json
+
+# Jenkins test files
+flake8-output.txt
+test-results.xml
\ No newline at end of file
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 434a5a2eb..46e594def 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
 # See https://pre-commit.com for more information
 # See https://pre-commit.com/hooks.html for more hooks
-files: 'machine_common_sense/|scripts/|tests/|integration_tests/'
+files: 'machine_common_sense/|tests/|integration_tests/'
 repos:
 -   repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v2.4.0
@@ -23,6 +23,6 @@ repos:
     hooks:
     -   id: sphinx
         name: sphinx
-        entry: ./scripts/generate_sphinx_docs.sh
+        entry: ./docs/generate_sphinx_docs.sh
         language: script
         verbose: true
diff --git a/CPU_Container.dockerfile b/CPU_Container.dockerfile
index afb5ad3ea..3ede9820e 100644
--- a/CPU_Container.dockerfile
+++ b/CPU_Container.dockerfile
@@ -9,7 +9,7 @@ ARG DEBIAN_FRONTEND=noninteractive
 ENV TZ=America/New_York
 
 # --build-arg mcsversion=x.y.z to override default in docker build command
-ARG mcsversion=0.5.1
+ARG mcsversion=0.5.2
 ARG mcs_library_version=master
 
 WORKDIR /mcs
diff --git a/Dockerfile b/Dockerfile
index 6dee7d458..8a9016e0c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,7 +19,7 @@ ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
 # ENV LANG C.UTF-8
 
 # --build-arg mcsversion=x.y.z to override default in docker build command
-ARG mcsversion=0.5.1
+ARG mcsversion=0.5.2
 ARG mcs_library_version=master
 
 WORKDIR /mcs
diff --git a/README.md b/README.md
index 86cd712c4..dd39f96fc 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ Publish to PyPI: [![Publish PyPI](https://github.com/NextCenturyCorporation/MCS/
 
 # MCS Python Package
 
-Python interface for interacting with MCS AI2Thor environment and running scenes. The latest release of the MCS Python library is `0.5.1`. You can find the latest documentation [here](https://nextcenturycorporation.github.io/MCS).
+Python interface for interacting with MCS AI2Thor environment and running scenes. The latest release of the MCS Python library is `0.5.2`. You can find the latest documentation [here](https://nextcenturycorporation.github.io/MCS).
 
 - [Quickstart Installation](#quickstart-installation)
 - [Usage](#usage)
diff --git a/scripts/generate_sphinx_docs.py b/docs/generate_sphinx_docs.py
similarity index 100%
rename from scripts/generate_sphinx_docs.py
rename to docs/generate_sphinx_docs.py
diff --git a/docs/generate_sphinx_docs.sh b/docs/generate_sphinx_docs.sh
new file mode 100755
index 000000000..b9b956fb2
--- /dev/null
+++ b/docs/generate_sphinx_docs.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+echo "calling python generate"
+venv/bin/python docs/generate_sphinx_docs.py
+status=$?
+echo $status
+if [ $status -eq 1 ]
+then
+    exit $status
+elif [ $status -eq 2 ]
+then
+    exit 0
+fi
+echo "calling make"
+make html
+echo "Finished update to Python API sphinx html documentation."
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 801aca22a..78963229b 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -88,8 +88,6 @@
 napoleon_use_ivar = True
 autogenerate_summary = True
 
-html_extra_path = ['videos']
-
 
 def setup(app):
     pass
diff --git a/docs/source/examples.rst b/docs/source/examples.rst
index 7ebff4639..e4c21a993 100644
--- a/docs/source/examples.rst
+++ b/docs/source/examples.rst
@@ -117,12 +117,33 @@ Initialize logging
 Run with Human Input
 --------------------
 
-To start the Unity application and enter your actions and parameters from the terminal, you can run the `run_in_human_input_mode` script that was installed in the package with the MCS Python Library (the `mcs_unity_build_file` is the Unity executable downloaded previously):
+To start the Unity application and enter your actions and parameters from the terminal, you can run the `run_in_human_input_mode` script that was installed in the package with the MCS Python Library:
 
 .. code-block:: console
 
-    run_in_human_input_mode <mcs_unity_build_file> <mcs_scene_json_file>
+    run_in_human_input_mode <mcs_scene_json_file> --config_file_path <mcs_config_ini_file>
 
-Run options:
-- `--config_file_path <file_path>`
+If you don't pass the `--mcs_unity_build_file` argument, the script will automatically download and run the Unity executable from our latest release.
 
+.. code-block:: console
+
+    run_in_human_input_mode <mcs_scene_json_file> --config_file_path <mcs_config_ini_file> --mcs_unity_build_file <mcs_unity_build_file>
+
+If you clone the MCS GitHub repository, you can also run this script directly from our source code:
+
+.. code-block:: console
+
+    python machine_common_sense/scripts/run_human_input.py <mcs_scene_json_file> --config_file_path <mcs_config_ini_file>
+
+MCS configuration files you can use:
+
+- Oracle metadata: `machine_common_sense/scripts/config_oracle.ini`
+- Oracle metadata, with debug data: `machine_common_sense/scripts/config_oracle_debug.ini`
+- Level 2 metadata: `machine_common_sense/scripts/config_level2.ini`
+- Level 2 metadata, with debug data: `machine_common_sense/scripts/config_level2_debug.ini`
+- Level 1 metadata: `machine_common_sense/scripts/config_level1.ini`
+- Level 1 metadata, with debug data: `machine_common_sense/scripts/config_level1_debug.ini`
+- Default metadata: `machine_common_sense/scripts/config_no_debug.ini`
+- Default metadata, with debug data: `machine_common_sense/scripts/config_with_debug.ini`
+
+**Please note**: The image you see in the Unity application will always be behind by one action step. The first image you see will be of the default white room that's present before your specific scene is initialized. This is a `known issue <https://github.com/allenai/ai2thor/issues/538>`_ in our underlying AI2-THOR architecture.
diff --git a/docs/source/images/agents_preference_expected.gif b/docs/source/images/agents_preference_expected.gif
deleted file mode 100644
index 79acc0523..000000000
Binary files a/docs/source/images/agents_preference_expected.gif and /dev/null differ
diff --git a/docs/source/images/agents_preference_expected.mp4 b/docs/source/images/agents_preference_expected.mp4
deleted file mode 100644
index 5c7e5ed58..000000000
Binary files a/docs/source/images/agents_preference_expected.mp4 and /dev/null differ
diff --git a/docs/source/images/agents_preference_unexpected.gif b/docs/source/images/agents_preference_unexpected.gif
deleted file mode 100644
index af2cbf13f..000000000
Binary files a/docs/source/images/agents_preference_unexpected.gif and /dev/null differ
diff --git a/docs/source/images/agents_preference_unexpected.mp4 b/docs/source/images/agents_preference_unexpected.mp4
deleted file mode 100644
index bd03a71b2..000000000
Binary files a/docs/source/images/agents_preference_unexpected.mp4 and /dev/null differ
diff --git a/docs/source/images/eval_4_intobjperm_validation_01.gif b/docs/source/images/eval_4_intobjperm_validation_01.gif
deleted file mode 100644
index 38dd91d41..000000000
Binary files a/docs/source/images/eval_4_intobjperm_validation_01.gif and /dev/null differ
diff --git a/docs/source/images/eval_4_intobjperm_validation_01.mp4 b/docs/source/images/eval_4_intobjperm_validation_01.mp4
deleted file mode 100644
index 5c79bcf47..000000000
Binary files a/docs/source/images/eval_4_intobjperm_validation_01.mp4 and /dev/null differ
diff --git a/docs/source/images/eval_4_intobjperm_validation_01_topdown.mp4 b/docs/source/images/eval_4_intobjperm_validation_01_topdown.mp4
deleted file mode 100644
index 843843599..000000000
Binary files a/docs/source/images/eval_4_intobjperm_validation_01_topdown.mp4 and /dev/null differ
diff --git a/docs/source/images/eval_4_reor_validation_01.gif b/docs/source/images/eval_4_reor_validation_01.gif
deleted file mode 100644
index 4689f4de9..000000000
Binary files a/docs/source/images/eval_4_reor_validation_01.gif and /dev/null differ
diff --git a/docs/source/images/eval_4_reor_validation_01.mp4 b/docs/source/images/eval_4_reor_validation_01.mp4
deleted file mode 100644
index dcf8506a7..000000000
Binary files a/docs/source/images/eval_4_reor_validation_01.mp4 and /dev/null differ
diff --git a/docs/source/images/eval_4_reor_validation_01_topdown.mp4 b/docs/source/images/eval_4_reor_validation_01_topdown.mp4
deleted file mode 100644
index fead31aa3..000000000
Binary files a/docs/source/images/eval_4_reor_validation_01_topdown.mp4 and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_01.gif b/docs/source/images/gravity_support_ex_01.gif
deleted file mode 100644
index bc2fabc9c..000000000
Binary files a/docs/source/images/gravity_support_ex_01.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_02.gif b/docs/source/images/gravity_support_ex_02.gif
deleted file mode 100644
index 1cdd421a1..000000000
Binary files a/docs/source/images/gravity_support_ex_02.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_03.gif b/docs/source/images/gravity_support_ex_03.gif
deleted file mode 100644
index 464dedca6..000000000
Binary files a/docs/source/images/gravity_support_ex_03.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_04.gif b/docs/source/images/gravity_support_ex_04.gif
deleted file mode 100644
index 49f864b66..000000000
Binary files a/docs/source/images/gravity_support_ex_04.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_05.gif b/docs/source/images/gravity_support_ex_05.gif
deleted file mode 100644
index 34a98ab59..000000000
Binary files a/docs/source/images/gravity_support_ex_05.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_06.gif b/docs/source/images/gravity_support_ex_06.gif
deleted file mode 100644
index 0e4f29f3f..000000000
Binary files a/docs/source/images/gravity_support_ex_06.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_07.gif b/docs/source/images/gravity_support_ex_07.gif
deleted file mode 100644
index 364de5bfb..000000000
Binary files a/docs/source/images/gravity_support_ex_07.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_08.gif b/docs/source/images/gravity_support_ex_08.gif
deleted file mode 100644
index 8ccd62557..000000000
Binary files a/docs/source/images/gravity_support_ex_08.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_09.gif b/docs/source/images/gravity_support_ex_09.gif
deleted file mode 100644
index 2f299f189..000000000
Binary files a/docs/source/images/gravity_support_ex_09.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_10.gif b/docs/source/images/gravity_support_ex_10.gif
deleted file mode 100644
index eed54b8e5..000000000
Binary files a/docs/source/images/gravity_support_ex_10.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_11.gif b/docs/source/images/gravity_support_ex_11.gif
deleted file mode 100644
index e7122e8fb..000000000
Binary files a/docs/source/images/gravity_support_ex_11.gif and /dev/null differ
diff --git a/docs/source/images/gravity_support_ex_12.gif b/docs/source/images/gravity_support_ex_12.gif
deleted file mode 100644
index c79c0b746..000000000
Binary files a/docs/source/images/gravity_support_ex_12.gif and /dev/null differ
diff --git a/docs/source/images/hinged_container_example_with_soccer_ball.gif b/docs/source/images/hinged_container_example_with_soccer_ball.gif
deleted file mode 100644
index 26c775625..000000000
Binary files a/docs/source/images/hinged_container_example_with_soccer_ball.gif and /dev/null differ
diff --git a/docs/source/images/hinged_container_example_with_soccer_ball.mp4 b/docs/source/images/hinged_container_example_with_soccer_ball.mp4
deleted file mode 100644
index dd88852d7..000000000
Binary files a/docs/source/images/hinged_container_example_with_soccer_ball.mp4 and /dev/null differ
diff --git a/docs/source/images/hinged_container_example_with_trophy.gif b/docs/source/images/hinged_container_example_with_trophy.gif
deleted file mode 100644
index 9ea637efe..000000000
Binary files a/docs/source/images/hinged_container_example_with_trophy.gif and /dev/null differ
diff --git a/docs/source/images/hinged_container_example_with_trophy.mp4 b/docs/source/images/hinged_container_example_with_trophy.mp4
deleted file mode 100644
index c5139e2e8..000000000
Binary files a/docs/source/images/hinged_container_example_with_trophy.mp4 and /dev/null differ
diff --git a/docs/source/images/move_deep_fast_01.gif b/docs/source/images/move_deep_fast_01.gif
deleted file mode 100644
index 195dd3e65..000000000
Binary files a/docs/source/images/move_deep_fast_01.gif and /dev/null differ
diff --git a/docs/source/images/move_deep_fast_02.gif b/docs/source/images/move_deep_fast_02.gif
deleted file mode 100644
index 0f052cd07..000000000
Binary files a/docs/source/images/move_deep_fast_02.gif and /dev/null differ
diff --git a/docs/source/images/move_deep_fast_03.gif b/docs/source/images/move_deep_fast_03.gif
deleted file mode 100644
index 31bb4d897..000000000
Binary files a/docs/source/images/move_deep_fast_03.gif and /dev/null differ
diff --git a/docs/source/images/move_deep_fast_04.gif b/docs/source/images/move_deep_fast_04.gif
deleted file mode 100644
index 6ee23130b..000000000
Binary files a/docs/source/images/move_deep_fast_04.gif and /dev/null differ
diff --git a/docs/source/images/move_deep_slow_01.gif b/docs/source/images/move_deep_slow_01.gif
deleted file mode 100644
index 57b12e128..000000000
Binary files a/docs/source/images/move_deep_slow_01.gif and /dev/null differ
diff --git a/docs/source/images/move_deep_slow_02.gif b/docs/source/images/move_deep_slow_02.gif
deleted file mode 100644
index 0fe62efe3..000000000
Binary files a/docs/source/images/move_deep_slow_02.gif and /dev/null differ
diff --git a/docs/source/images/move_slow_01.gif b/docs/source/images/move_slow_01.gif
deleted file mode 100644
index d50efd069..000000000
Binary files a/docs/source/images/move_slow_01.gif and /dev/null differ
diff --git a/docs/source/images/move_slow_02.gif b/docs/source/images/move_slow_02.gif
deleted file mode 100644
index eda251724..000000000
Binary files a/docs/source/images/move_slow_02.gif and /dev/null differ
diff --git a/docs/source/images/move_toss_fast_01.gif b/docs/source/images/move_toss_fast_01.gif
deleted file mode 100644
index 42b75aa33..000000000
Binary files a/docs/source/images/move_toss_fast_01.gif and /dev/null differ
diff --git a/docs/source/images/move_toss_fast_02.gif b/docs/source/images/move_toss_fast_02.gif
deleted file mode 100644
index dd8f6187e..000000000
Binary files a/docs/source/images/move_toss_fast_02.gif and /dev/null differ
diff --git a/docs/source/images/move_toss_slow_01.gif b/docs/source/images/move_toss_slow_01.gif
deleted file mode 100644
index 5809a1261..000000000
Binary files a/docs/source/images/move_toss_slow_01.gif and /dev/null differ
diff --git a/docs/source/images/move_toss_slow_02.gif b/docs/source/images/move_toss_slow_02.gif
deleted file mode 100644
index cc5e1fec7..000000000
Binary files a/docs/source/images/move_toss_slow_02.gif and /dev/null differ
diff --git a/docs/source/images/object_permanence_implausible.gif b/docs/source/images/object_permanence_implausible.gif
deleted file mode 100644
index 2473f2742..000000000
Binary files a/docs/source/images/object_permanence_implausible.gif and /dev/null differ
diff --git a/docs/source/images/object_permanence_implausible.mp4 b/docs/source/images/object_permanence_implausible.mp4
deleted file mode 100644
index 57c8e1925..000000000
Binary files a/docs/source/images/object_permanence_implausible.mp4 and /dev/null differ
diff --git a/docs/source/images/object_permanence_plausible.gif b/docs/source/images/object_permanence_plausible.gif
deleted file mode 100644
index 29e87afd9..000000000
Binary files a/docs/source/images/object_permanence_plausible.gif and /dev/null differ
diff --git a/docs/source/images/object_permanence_plausible.mp4 b/docs/source/images/object_permanence_plausible.mp4
deleted file mode 100644
index d3cf80a0c..000000000
Binary files a/docs/source/images/object_permanence_plausible.mp4 and /dev/null differ
diff --git a/docs/source/images/playroom_3_2.gif b/docs/source/images/playroom_3_2.gif
deleted file mode 100644
index 249f88a74..000000000
Binary files a/docs/source/images/playroom_3_2.gif and /dev/null differ
diff --git a/docs/source/images/playroom_eval_4.gif b/docs/source/images/playroom_eval_4.gif
deleted file mode 100644
index eda4d2bc7..000000000
Binary files a/docs/source/images/playroom_eval_4.gif and /dev/null differ
diff --git a/docs/source/images/playroom_eval_4.mp4 b/docs/source/images/playroom_eval_4.mp4
deleted file mode 100644
index 1ee763b1d..000000000
Binary files a/docs/source/images/playroom_eval_4.mp4 and /dev/null differ
diff --git a/docs/source/images/screenshot_sample_prefab.png b/docs/source/images/screenshot_sample_prefab.png
deleted file mode 100644
index a59adf8f3..000000000
Binary files a/docs/source/images/screenshot_sample_prefab.png and /dev/null differ
diff --git a/docs/source/images/screenshot_unity_editor.png b/docs/source/images/screenshot_unity_editor.png
deleted file mode 100644
index 4a9f57681..000000000
Binary files a/docs/source/images/screenshot_unity_editor.png and /dev/null differ
diff --git a/docs/source/images/shape_constancy_implausible.gif b/docs/source/images/shape_constancy_implausible.gif
deleted file mode 100644
index 98c6ecce3..000000000
Binary files a/docs/source/images/shape_constancy_implausible.gif and /dev/null differ
diff --git a/docs/source/images/shape_constancy_implausible.mp4 b/docs/source/images/shape_constancy_implausible.mp4
deleted file mode 100644
index 48e3be384..000000000
Binary files a/docs/source/images/shape_constancy_implausible.mp4 and /dev/null differ
diff --git a/docs/source/images/shape_constancy_plausible.gif b/docs/source/images/shape_constancy_plausible.gif
deleted file mode 100644
index 6eccd1715..000000000
Binary files a/docs/source/images/shape_constancy_plausible.gif and /dev/null differ
diff --git a/docs/source/images/shape_constancy_plausible.mp4 b/docs/source/images/shape_constancy_plausible.mp4
deleted file mode 100644
index a2cf934d6..000000000
Binary files a/docs/source/images/shape_constancy_plausible.mp4 and /dev/null differ
diff --git a/docs/source/images/spatio_temporal_continuity_implausible.gif b/docs/source/images/spatio_temporal_continuity_implausible.gif
deleted file mode 100644
index 438c99742..000000000
Binary files a/docs/source/images/spatio_temporal_continuity_implausible.gif and /dev/null differ
diff --git a/docs/source/images/spatio_temporal_continuity_implausible.mp4 b/docs/source/images/spatio_temporal_continuity_implausible.mp4
deleted file mode 100644
index aed963592..000000000
Binary files a/docs/source/images/spatio_temporal_continuity_implausible.mp4 and /dev/null differ
diff --git a/docs/source/images/spatio_temporal_continuity_plausible.gif b/docs/source/images/spatio_temporal_continuity_plausible.gif
deleted file mode 100644
index 621548220..000000000
Binary files a/docs/source/images/spatio_temporal_continuity_plausible.gif and /dev/null differ
diff --git a/docs/source/images/spatio_temporal_continuity_plausible.mp4 b/docs/source/images/spatio_temporal_continuity_plausible.mp4
deleted file mode 100644
index fe2c50f1e..000000000
Binary files a/docs/source/images/spatio_temporal_continuity_plausible.mp4 and /dev/null differ
diff --git a/docs/source/images/template_12_by_8.gif b/docs/source/images/template_12_by_8.gif
deleted file mode 100644
index 0f4f3e0b4..000000000
Binary files a/docs/source/images/template_12_by_8.gif and /dev/null differ
diff --git a/docs/source/images/template_12_by_8.mp4 b/docs/source/images/template_12_by_8.mp4
deleted file mode 100644
index b0e38f929..000000000
Binary files a/docs/source/images/template_12_by_8.mp4 and /dev/null differ
diff --git a/docs/source/images/template_2_by_4.gif b/docs/source/images/template_2_by_4.gif
deleted file mode 100644
index 0089781f1..000000000
Binary files a/docs/source/images/template_2_by_4.gif and /dev/null differ
diff --git a/docs/source/images/template_2_by_4.mp4 b/docs/source/images/template_2_by_4.mp4
deleted file mode 100644
index 5e77b285d..000000000
Binary files a/docs/source/images/template_2_by_4.mp4 and /dev/null differ
diff --git a/docs/source/images/template_frozen_after_10_steps.gif b/docs/source/images/template_frozen_after_10_steps.gif
deleted file mode 100644
index 22d28eadd..000000000
Binary files a/docs/source/images/template_frozen_after_10_steps.gif and /dev/null differ
diff --git a/docs/source/images/template_frozen_after_10_steps.mp4 b/docs/source/images/template_frozen_after_10_steps.mp4
deleted file mode 100644
index eaee5e9a9..000000000
Binary files a/docs/source/images/template_frozen_after_10_steps.mp4 and /dev/null differ
diff --git a/docs/source/images/template_frozen_first_10_steps.gif b/docs/source/images/template_frozen_first_10_steps.gif
deleted file mode 100644
index 98557a1c9..000000000
Binary files a/docs/source/images/template_frozen_first_10_steps.gif and /dev/null differ
diff --git a/docs/source/images/template_frozen_first_10_steps.mp4 b/docs/source/images/template_frozen_first_10_steps.mp4
deleted file mode 100644
index ba6d48a12..000000000
Binary files a/docs/source/images/template_frozen_first_10_steps.mp4 and /dev/null differ
diff --git a/docs/source/images/template_individually_colored_walls.gif b/docs/source/images/template_individually_colored_walls.gif
deleted file mode 100644
index eb0ee6e46..000000000
Binary files a/docs/source/images/template_individually_colored_walls.gif and /dev/null differ
diff --git a/docs/source/images/template_individually_colored_walls.mp4 b/docs/source/images/template_individually_colored_walls.mp4
deleted file mode 100644
index 91147352a..000000000
Binary files a/docs/source/images/template_individually_colored_walls.mp4 and /dev/null differ
diff --git a/docs/source/images/template_interactive_object_permanence_scene.gif b/docs/source/images/template_interactive_object_permanence_scene.gif
deleted file mode 100644
index b4296b078..000000000
Binary files a/docs/source/images/template_interactive_object_permanence_scene.gif and /dev/null differ
diff --git a/docs/source/images/template_interactive_object_permanence_scene.mp4 b/docs/source/images/template_interactive_object_permanence_scene.mp4
deleted file mode 100644
index 24e42e7bf..000000000
Binary files a/docs/source/images/template_interactive_object_permanence_scene.mp4 and /dev/null differ
diff --git a/docs/source/images/template_kidnapping.gif b/docs/source/images/template_kidnapping.gif
deleted file mode 100644
index e40275341..000000000
Binary files a/docs/source/images/template_kidnapping.gif and /dev/null differ
diff --git a/docs/source/images/template_kidnapping.mp4 b/docs/source/images/template_kidnapping.mp4
deleted file mode 100644
index c94a9d81d..000000000
Binary files a/docs/source/images/template_kidnapping.mp4 and /dev/null differ
diff --git a/docs/source/images/template_kidnapping_then_frozen.gif b/docs/source/images/template_kidnapping_then_frozen.gif
deleted file mode 100644
index 8022b538e..000000000
Binary files a/docs/source/images/template_kidnapping_then_frozen.gif and /dev/null differ
diff --git a/docs/source/images/template_kidnapping_then_frozen.mp4 b/docs/source/images/template_kidnapping_then_frozen.mp4
deleted file mode 100644
index 4a6096fc3..000000000
Binary files a/docs/source/images/template_kidnapping_then_frozen.mp4 and /dev/null differ
diff --git a/docs/source/images/template_mechanism_dropping_soccer_ball.gif b/docs/source/images/template_mechanism_dropping_soccer_ball.gif
deleted file mode 100644
index 88eb0524f..000000000
Binary files a/docs/source/images/template_mechanism_dropping_soccer_ball.gif and /dev/null differ
diff --git a/docs/source/images/template_mechanism_dropping_soccer_ball.mp4 b/docs/source/images/template_mechanism_dropping_soccer_ball.mp4
deleted file mode 100644
index 518923eed..000000000
Binary files a/docs/source/images/template_mechanism_dropping_soccer_ball.mp4 and /dev/null differ
diff --git a/docs/source/images/template_mechanism_dropping_soccer_ball_v2.gif b/docs/source/images/template_mechanism_dropping_soccer_ball_v2.gif
deleted file mode 100644
index 1613232a4..000000000
Binary files a/docs/source/images/template_mechanism_dropping_soccer_ball_v2.gif and /dev/null differ
diff --git a/docs/source/images/template_mechanism_dropping_soccer_ball_v2.mp4 b/docs/source/images/template_mechanism_dropping_soccer_ball_v2.mp4
deleted file mode 100644
index 1117fff4b..000000000
Binary files a/docs/source/images/template_mechanism_dropping_soccer_ball_v2.mp4 and /dev/null differ
diff --git a/docs/source/images/template_mechanism_throwing_soccer_ball.gif b/docs/source/images/template_mechanism_throwing_soccer_ball.gif
deleted file mode 100644
index 464233194..000000000
Binary files a/docs/source/images/template_mechanism_throwing_soccer_ball.gif and /dev/null differ
diff --git a/docs/source/images/template_mechanism_throwing_soccer_ball.mp4 b/docs/source/images/template_mechanism_throwing_soccer_ball.mp4
deleted file mode 100644
index 719963fbb..000000000
Binary files a/docs/source/images/template_mechanism_throwing_soccer_ball.mp4 and /dev/null differ
diff --git a/docs/source/images/template_platform_bisecting.gif b/docs/source/images/template_platform_bisecting.gif
deleted file mode 100644
index 87e8e3010..000000000
Binary files a/docs/source/images/template_platform_bisecting.gif and /dev/null differ
diff --git a/docs/source/images/template_platform_bisecting.mp4 b/docs/source/images/template_platform_bisecting.mp4
deleted file mode 100644
index dcdbdc9cf..000000000
Binary files a/docs/source/images/template_platform_bisecting.mp4 and /dev/null differ
diff --git a/docs/source/images/template_platform_independent.gif b/docs/source/images/template_platform_independent.gif
deleted file mode 100644
index 678c6f56f..000000000
Binary files a/docs/source/images/template_platform_independent.gif and /dev/null differ
diff --git a/docs/source/images/template_platform_independent.mp4 b/docs/source/images/template_platform_independent.mp4
deleted file mode 100644
index 86c331367..000000000
Binary files a/docs/source/images/template_platform_independent.mp4 and /dev/null differ
diff --git a/docs/source/install.rst b/docs/source/install.rst
index cfde0c293..45c0c23dd 100644
--- a/docs/source/install.rst
+++ b/docs/source/install.rst
@@ -2,8 +2,8 @@
 Installation and Setup
 =======================
 
-.. _Download and unzip the Mac ZIP: https://github.com/NextCenturyCorporation/MCS/releases/download/0.5.1/MCS-AI2-THOR-Unity-App-v0.5.1-mac.zip
-.. _Download and unzip the Linux ZIP: https://github.com/NextCenturyCorporation/MCS/releases/download/0.5.1/MCS-AI2-THOR-Unity-App-v0.5.1-linux.zip
+.. _Download and unzip the Mac ZIP: https://github.com/NextCenturyCorporation/MCS/releases/download/0.5.2/MCS-AI2-THOR-Unity-App-v0.5.2-mac.zip
+.. _Download and unzip the Linux ZIP: https://github.com/NextCenturyCorporation/MCS/releases/download/0.5.2/MCS-AI2-THOR-Unity-App-v0.5.2-linux.zip
 
 Virtual Environments
 ------------------------
diff --git a/docs/source/models.rst b/docs/source/models.rst
index 353590b34..0e5f88563 100644
--- a/docs/source/models.rst
+++ b/docs/source/models.rst
@@ -25,7 +25,7 @@ Limitations
 
 Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2thor>`_ and follow the project's `setup instructions <https://github.com/NextCenturyCorporation/ai2thor#setup>`_ to download and install the correct version of the Unity Editor and use it to load the MCS Unity project.
 
-.. image:: ./images/screenshot_unity_editor.png
+.. image:: https://mcs-documentation.s3.amazonaws.com/images/screenshot_unity_editor.png
 
 2. Import Your Models into Unity and Save Them as Prefabs
 ---------------------------------------------------------
@@ -41,23 +41,23 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
 3. Update Your Prefabs in Unity
 -------------------------------
 
-.. image:: ./images/screenshot_sample_prefab.png
+.. image:: https://mcs-documentation.s3.amazonaws.com/images/screenshot_sample_prefab.png
 
 3A. In the Hierarchy window, your model's name in the list is an instantiation of the Prefab, called a Game Object. Next to the Game Object, click the right arrow (`>`) on the right side of the list to edit the Prefab. This will change the Scene window to show a Prefab editing view. The Hierarchy window will now show just the Game Object. Depending on how your model was made, it may have one or more child Game Objects, shown as a nested view. Objects with multiple interactable parts (like, cabinet doors, drawers, and shelves) should have a child for each part. We'll call the parent Game Object the Target. In the Hierarchy window, click on the Target and look at the Inspector window to verify that it has a MeshFilter, MeshRenderer, and material(s); if it doesn't, then one of its children should have them (click on each child in turn).
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3a.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3a.mp4
    :width: 750
    :height: 450
 
 3B. Ideally, the Target should always be centered on the X/Z axis. First, in the Hierarchy window, click on the Target; then, in the Inspector window, in the Transform Component, zero out its Position. If the Target still isn't centered, then the 3D model itself may be off-center: adjust the Position in the Target's Transform Component to visually center the object on the X/Z axis. Failing to do this may cause the Scene Generator to generate buggy scenes containing clipping objects. The model's Y position can be any value, but normally it's either centered on the Y axis, or moved upward so that a position of Y=0 lets the object sit on the ground without clipping it. Take note of the Y position for step 7 later.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3b.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3b.mp4
    :width: 750
    :height: 450
 
 3C. Click on the Target. In the Inspector window, set the Tag to "SimObjPhysics" and the Layer to "SimObjVisible". Click on the Add Component button to add a Rigidbody Component to the Target. Ensure its "Use Gravity" is set to true.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3c.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3c.mp4
    :width: 750
    :height: 450
 
@@ -72,7 +72,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
   - Adjust the Transform Component and/or Collider Component to visually position, rotate, and scale the Collider to the appropriate pixels.
   - Set the Tag to "SimObjPhysics" and the Layer to "SimObjVisible".
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3d.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3d.mp4
    :width: 750
    :height: 450
 
@@ -85,7 +85,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
   - Adjust the Transform Component to visually position the Visibility Point to the appropriate pixels. (To see the Visibility Point's position in the Scene window, you can set a colored Icon on the Visibility Point Game Object using the cube button in the top-left corner of the Inspector window.)
   - Set the Layer to "SimObjVisible".
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3e.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3e.mp4
    :width: 750
    :height: 450
 
@@ -97,7 +97,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
 - In the BoxCollider Component, click the checkbox to mark it as NOT ACTIVE.
 - Adjust the Transform Component (but not the BoxCollider Component -- adjusting both makes it harder on us later) to visually position, rotate, and scale the Collider to the appropriate pixels completely enclosing the model. Take note of the position, rotation, and scale for step 7 later.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3f.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3f.mp4
    :width: 750
    :height: 450
 
@@ -113,7 +113,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
   - Set the "My Colliders" array property to have each Collider Game Object that you made.
   - Optionally, set the "Salient Materials" property as needed.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3g.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3g.mp4
    :width: 750
    :height: 450
 
@@ -125,7 +125,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
   - Set the "Moving Parts" property to the Target.
   - Adjust the "Open Positions" and "Close Positions" to visually position, rotate, or scale the model to the approriate pixels for its "opened" and "closed" positions respectfully. Change the "Movement Type" property to "Slide", "Rotate", or "Scale" as needed, depending on how the model should change when it's opened.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3h.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3h.mp4
    :width: 750
    :height: 450
 
@@ -139,7 +139,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
 - Adjust the Transform Component (but not the BoxCollider Component -- adjusting both makes it harder on us later) to visually position, rotate, and scale the Collider to the appropriate pixels completely enclosing the receptacle area on which held objects may be placed. (I'm not sure if the height actually matters).  Take note of the position, rotation, and scale for step 7 later.
 - Click on the Add Component button to add a Contains Component.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3i.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3i.mp4
    :width: 750
    :height: 450
 
@@ -150,7 +150,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
 - In the Hierarchy window, click-and-drag to move the Game Object containing the MeshFilter and MeshRenderer Components corresponding to the Sub-Target under the Sub-Target.
 - Repeat steps 3C-3J (EXCEPT 3F) on the Sub-Target.
 
-.. video:: tutorial/adding_3d_models_tutorial_step_3j.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_3j.mp4
    :width: 750
    :height: 450
 
@@ -159,7 +159,7 @@ Clone the `MCS fork of AI2-THOR <https://github.com/NextCenturyCorporation/ai2th
 4. Update the Object Registry File
 ----------------------------------
 
-.. video:: tutorial/adding_3d_models_tutorial_step_4.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_4.mp4
    :width: 750
    :height: 450
 
@@ -190,7 +190,7 @@ Example:
 5. Manually Test and Verify Your Objects
 ----------------------------------------
 
-.. video:: tutorial/adding_3d_models_tutorial_step_5.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_5.mp4
    :width: 750
    :height: 450
 
@@ -215,7 +215,7 @@ Inside the Unity Editor, go to `File->Build Settings` to open the Build Settings
 7. Update the Scene Generator
 -----------------------------
 
-.. video:: tutorial/adding_3d_models_tutorial_step_7.mp4
+.. video:: https://mcs-documentation.s3.amazonaws.com/videos/tutorial/adding_3d_models_tutorial_step_7.mp4
    :width: 750
    :height: 450
 
diff --git a/docs/source/scenes.rst b/docs/source/scenes.rst
index 47a99b38c..384360005 100644
--- a/docs/source/scenes.rst
+++ b/docs/source/scenes.rst
@@ -6,6 +6,47 @@ Example Scenes
 Interactive Scenes
 ------------------
 
+Eval 5 Example Interactive Scenes
+*********************************
+
+Relevant for the Summer 2022 evaluation (Eval 5):
+
+:download:`holes_eval_5_ex_1.json <./scenes/holes_eval_5_ex_1.json>`
+
+:download:`holes_eval_5_ex_2.json <./scenes/holes_eval_5_ex_2.json>`
+
+:download:`lava_eval_5_ex_1.json <./scenes/lava_eval_5_ex_1.json>`
+
+:download:`lava_eval_5_ex_2.json <./scenes/lava_eval_5_ex_2.json>`
+
+:download:`ramps_eval_5_ex_1.json <./scenes/ramps_eval_5_ex_1.json>`
+
+:download:`ramps_eval_5_ex_2.json <./scenes/ramps_eval_5_ex_2.json>`
+
+:download:`ramps_eval_5_ex_3.json <./scenes/ramps_eval_5_ex_3.json>`
+
+:download:`ramps_eval_5_ex_4.json <./scenes/ramps_eval_5_ex_4.json>`
+
+:download:`solidity_eval_5_ex_1.json <./scenes/solidity_eval_5_ex_1.json>`
+
+:download:`solidity_eval_5_ex_2.json <./scenes/solidity_eval_5_ex_2.json>`
+
+:download:`spatial_elimination_eval_5_ex_1.json <./scenes/spatial_elimination_eval_5_ex_1.json>`
+
+:download:`spatial_elimination_eval_5_ex_2.json <./scenes/spatial_elimination_eval_5_ex_2.json>`
+
+:download:`spatial_elimination_eval_5_ex_3.json <./scenes/spatial_elimination_eval_5_ex_3.json>`
+
+:download:`spatial_elimination_eval_5_ex_4.json <./scenes/spatial_elimination_eval_5_ex_4.json>`
+
+:download:`tool_use_eval_5_ex_1.json <./scenes/tool_use_eval_5_ex_1.json>`
+
+:download:`tool_use_eval_5_ex_2.json <./scenes/tool_use_eval_5_ex_2.json>`
+
+:download:`tool_use_eval_5_ex_3.json <./scenes/tool_use_eval_5_ex_3.json>`
+
+:download:`tool_use_eval_5_ex_4.json <./scenes/tool_use_eval_5_ex_4.json>`
+
 Playroom
 ********
 
@@ -13,37 +54,37 @@ An open room containing over 40 objects for undirected exploration.
 
 .. list-table::
 
-    * - .. figure:: ./images/playroom_3_2.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/playroom_3_2.gif
 
            :download:`playroom.json <scenes/playroom.json>`
 
 Retrieval Goal
 **************
 
-Soccer ball retrieval goal for the Fall 2021 evaluation:
+Soccer ball retrieval goal for the Fall 2021 evaluation (Eval 4):
 
 :download:`retrieval_goal_example_with_soccer_ball.json <./scenes/retrieval_goal_example_with_soccer_ball.json>`
 
-Silver trophy retrieval goal for the Winter 2020 evaluation:
+Silver trophy retrieval goal for the Winter 2020 evaluation (Eval 3):
 
 :download:`retrieval_goal_example_with_trophy.json <./scenes/retrieval_goal_example_with_trophy.json>`
 
 Hinged Containers
 *****************
 
-Soccer ball inside hinged containers for the Fall 2021 evaluation:
+Soccer ball inside hinged containers for the Fall 2021 evaluation (Eval 4):
 
 .. list-table::
 
-    * - .. figure:: ./images/hinged_container_example_with_soccer_ball.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/hinged_container_example_with_soccer_ball.gif
 
            :download:`hinged_container_example_with_soccer_ball.json <./scenes/hinged_container_example_with_soccer_ball.json>`
 
-Silver trophy inside hinged containers for the Winter 2020 evaluation:
+Silver trophy inside hinged containers for the Winter 2020 evaluation (Eval 3):
 
 .. list-table::
 
-    * - .. figure:: ./images/hinged_container_example_with_trophy.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/hinged_container_example_with_trophy.gif
 
            :download:`hinged_container_example_with_trophy.json <./scenes/hinged_container_example_with_trophy.json>`
 
@@ -54,11 +95,11 @@ The room has different dimensions/bounds, and isn't necessarily square. Previous
 
 .. list-table::
 
-    * - .. figure:: ./images/template_12_by_8.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_12_by_8.gif
 
            :download:`template_12_by_8.json <./scenes/template_12_by_8.json>`
 
-    * - .. figure:: ./images/template_2_by_4.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_2_by_4.gif
 
            :download:`template_2_by_4.json <./scenes/template_2_by_4.json>`
 
@@ -66,7 +107,7 @@ The room's outer walls are individually, distinctly colored. Previously, all of
 
 .. list-table::
 
-    * - .. figure:: ./images/template_individually_colored_walls.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_individually_colored_walls.gif
 
            :download:`template_individually_colored_walls.json <./scenes/template_individually_colored_walls.json>`
 
@@ -74,11 +115,11 @@ The performer agent is positioned on top of a flat, raised platform. Moving off
 
 .. list-table::
 
-    * - .. figure:: ./images/template_platform_independent.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_platform_independent.gif
 
            :download:`template_platform_independent.json <./scenes/template_platform_independent.json>`
 
-    * - .. figure:: ./images/template_platform_bisecting.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_platform_bisecting.gif
 
            :download:`template_platform_bisecting.json <./scenes/template_platform_bisecting.json>`
 
@@ -86,11 +127,11 @@ The performer agent is temporarily "frozen" (can only use the Pass action) at th
 
 .. list-table::
 
-    * - .. figure:: ./images/template_frozen_first_10_steps.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_frozen_first_10_steps.gif
 
            :download:`template_frozen_first_10_steps.json <./scenes/template_frozen_first_10_steps.json>`
 
-    * - .. figure:: ./images/template_frozen_after_10_steps.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_frozen_after_10_steps.gif
 
            :download:`template_frozen_after_10_steps.json <./scenes/template_frozen_after_10_steps.json>`
 
@@ -98,11 +139,11 @@ A cylindrical mechanism attached to a wall or the ceiling throws (for interactiv
 
 .. list-table::
 
-    * - .. figure:: ./images/template_mechanism_dropping_soccer_ball_v2.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_mechanism_dropping_soccer_ball_v2.gif
 
            :download:`template_mechanism_dropping_soccer_ball_v2.json <./scenes/template_mechanism_dropping_soccer_ball_v2.json>`
 
-    * - .. figure:: ./images/template_mechanism_throwing_soccer_ball.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_mechanism_throwing_soccer_ball.gif
 
            :download:`template_mechanism_throwing_soccer_ball.json <./scenes/template_mechanism_throwing_soccer_ball.json>`
 
@@ -110,11 +151,11 @@ The performer agent is "kidnapped" (can only call the EndHabituation action) and
 
 .. list-table::
 
-    * - .. figure:: ./images/template_kidnapping.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_kidnapping.gif
 
            :download:`template_kidnapping.json <./scenes/template_kidnapping.json>`
 
-    * - .. figure:: ./images/template_kidnapping_then_frozen.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_kidnapping_then_frozen.gif
 
            :download:`template_kidnapping_then_frozen.json <./scenes/template_kidnapping_then_frozen.json>`
 
@@ -122,7 +163,7 @@ Combination of multiple elements. For example: a platform, being frozen, and a m
 
 .. list-table::
 
-    * - .. figure:: ./images/template_interactive_object_permanence_scene.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/template_interactive_object_permanence_scene.gif
 
            :download:`template_interactive_object_permanence_scene.json <./scenes/template_interactive_object_permanence_scene.json>`
 
@@ -130,11 +171,11 @@ End-to-end scenes. VALIDATION ONLY.
 
 .. list-table::
 
-    * - .. figure:: ./images/eval_4_intobjperm_validation_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/eval_4_intobjperm_validation_01.gif
 
            :download:`eval_4_intobjperm_validation_01.json <./scenes/eval_4_intobjperm_validation_01.json>`
 
-    * - .. figure:: ./images/eval_4_reor_validation_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/eval_4_reor_validation_01.gif
 
            :download:`eval_4_reor_validation_01.json <./scenes/eval_4_reor_validation_01.json>`
 
@@ -148,51 +189,51 @@ All of these examples are PLAUSIBLE
 
 .. list-table::
 
-    * - .. figure:: ./images/gravity_support_ex_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_01.gif
 
            :download:`gravity_support_ex_01.json <./scenes/gravity_support_ex_01.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_02.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_02.gif
 
            :download:`gravity_support_ex_02.json <./scenes/gravity_support_ex_02.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_03.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_03.gif
 
            :download:`gravity_support_ex_03.json <./scenes/gravity_support_ex_03.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_04.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_04.gif
 
            :download:`gravity_support_ex_04.json <./scenes/gravity_support_ex_04.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_05.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_05.gif
 
            :download:`gravity_support_ex_05.json <./scenes/gravity_support_ex_05.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_06.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_06.gif
 
            :download:`gravity_support_ex_06.json <./scenes/gravity_support_ex_06.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_07.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_07.gif
 
            :download:`gravity_support_ex_07.json <./scenes/gravity_support_ex_07.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_08.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_08.gif
 
            :download:`gravity_support_ex_08.json <./scenes/gravity_support_ex_08.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_09.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_09.gif
 
            :download:`gravity_support_ex_09.json <./scenes/gravity_support_ex_09.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_10.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_10.gif
 
            :download:`gravity_support_ex_10.json <./scenes/gravity_support_ex_10.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_11.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_11.gif
 
            :download:`gravity_support_ex_11.json <./scenes/gravity_support_ex_11.json>`
 
-    * - .. figure:: ./images/gravity_support_ex_12.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/gravity_support_ex_12.gif
 
            :download:`gravity_support_ex_12.json <./scenes/gravity_support_ex_12.json>`
 
@@ -200,62 +241,62 @@ All of these examples are PLAUSIBLE
 Object Permanence and Spatio-Temporal Continuity: Objects Moving on Multiple Axes Behind Occluders
 **************************************************************************************************
 
-Relevant for the Fall 2021 evaluation. Objects may move on only the X axis (as in previous evaluations), on both the X and Z axes (see the "move deep" example scenes), and/or on both the X and Y axes (see the "move toss" example scenes).
+Relevant for the Fall 2021 evaluation (Eval 4). Objects may move on only the X axis (as in previous evaluations), on both the X and Z axes (see the "move deep" example scenes), and/or on both the X and Y axes (see the "move toss" example scenes).
 
 .. list-table::
 
-    * - .. figure:: ./images/move_deep_fast_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_deep_fast_01.gif
 
            :download:`move_deep_fast_01.json <./scenes/move_deep_fast_01.json>`
 
-    * - .. figure:: ./images/move_deep_fast_02.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_deep_fast_02.gif
 
            :download:`move_deep_fast_02.json <./scenes/move_deep_fast_02.json>`
 
-    * - .. figure:: ./images/move_deep_fast_03.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_deep_fast_03.gif
 
            :download:`move_deep_fast_03.json <./scenes/move_deep_fast_03.json>`
 
-    * - .. figure:: ./images/move_deep_fast_04.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_deep_fast_04.gif
 
            :download:`move_deep_fast_04.json <./scenes/move_deep_fast_04.json>`
 
-    * - .. figure:: ./images/move_toss_fast_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_toss_fast_01.gif
 
            :download:`move_toss_fast_01.json <./scenes/move_toss_fast_01.json>`
 
-    * - .. figure:: ./images/move_toss_fast_02.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_toss_fast_02.gif
 
            :download:`move_toss_fast_02.json <./scenes/move_toss_fast_02.json>`
 
 Object Permanence: Objects Moving on Multiple Axes and Stopping Behind Occluders
 ********************************************************************************
 
-Relevant for the Fall 2021 evaluation. Objects may move across the entire screen and exit on the other side (as in previous evaluations), or come to a natural stop behind the occluder. Objects may move on only the X axis (as in previous evaluations), on both the X and Z axes (see the "move deep" example scenes), and/or on both the X and Y axes (see the "move toss" example scenes).
+Relevant for the Fall 2021 evaluation (Eval 4). Objects may move across the entire screen and exit on the other side (as in previous evaluations), or come to a natural stop behind the occluder. Objects may move on only the X axis (as in previous evaluations), on both the X and Z axes (see the "move deep" example scenes), and/or on both the X and Y axes (see the "move toss" example scenes).
 
 .. list-table::
 
-    * - .. figure:: ./images/move_slow_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_slow_01.gif
 
            :download:`move_slow_01.json <./scenes/move_slow_01.json>`
     
-    * - .. figure:: ./images/move_slow_02.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_slow_02.gif
 
            :download:`move_deep_slow_01.json <./scenes/move_deep_slow_01.json>`
 
-    * - .. figure:: ./images/move_deep_slow_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_deep_slow_01.gif
 
            :download:`move_toss_slow_01.json <./scenes/move_toss_slow_01.json>`
 
-    * - .. figure:: ./images/move_deep_slow_02.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_deep_slow_02.gif
 
            :download:`move_slow_02.json <./scenes/move_slow_02.json>`
 
-    * - .. figure:: ./images/move_toss_slow_01.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_toss_slow_01.gif
 
            :download:`move_deep_slow_02.json <./scenes/move_deep_slow_02.json>`
 
-    * - .. figure:: ./images/move_toss_slow_02.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/move_toss_slow_02.gif
 
            :download:`move_toss_slow_02.json <./scenes/move_toss_slow_02.json>`
 
@@ -263,30 +304,30 @@ Relevant for the Fall 2021 evaluation. Objects may move across the entire screen
 Object Permanence: Objects Falling Down Behind Occluders
 ********************************************************
 
-Relevant for the Winter 2020 evaluation.
+Relevant for the Winter 2020 evaluation (Eval 3).
 
 .. list-table::
 
-    * - .. figure:: ./images/object_permanence_plausible.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/object_permanence_plausible.gif
 
            :download:`object_permanence_plausible.json <./scenes/object_permanence_plausible.json>`
 
-    * - .. figure:: ./images/object_permanence_implausible.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/object_permanence_implausible.gif
 
            :download:`object_permanence_implausible.json <./scenes/object_permanence_implausible.json>`
 
 Spatio-Temporal Continuity: Objects Moving Across Behind Occluders
 ******************************************************************
 
-Relevant for the Winter 2020 evaluation.
+Relevant for the Winter 2020 evaluation (Eval 3).
 
 .. list-table::
 
-    * - .. figure:: ./images/spatio_temporal_continuity_plausible.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/spatio_temporal_continuity_plausible.gif
 
            :download:`spatio_temporal_continuity_plausible.json <./scenes/spatio_temporal_continuity_plausible.json>`
 
-    * - .. figure:: ./images/spatio_temporal_continuity_implausible.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/spatio_temporal_continuity_implausible.gif
 
            :download:`spatio_temporal_continuity_implausible.json <./scenes/spatio_temporal_continuity_implausible.json>`
 
@@ -298,11 +339,11 @@ Agents Have Goals and Preferences
 
 .. list-table::
 
-    * - .. figure:: ./images/agents_preference_expected.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/agents_preference_expected.gif
 
            :download:`agents_preference_expected.json <./scenes/agents_preference_expected.json>`
 
-    * - .. figure:: ./images/agents_preference_unexpected.gif
+    * - .. figure:: https://mcs-documentation.s3.amazonaws.com/images/agents_preference_unexpected.gif
 
            :download:`agents_preference_unexpected.json <./scenes/agents_preference_unexpected.json>`
 
diff --git a/docs/source/scenes/holes_eval_5_ex_1.json b/docs/source/scenes/holes_eval_5_ex_1.json
new file mode 100644
index 000000000..539a44c95
--- /dev/null
+++ b/docs/source/scenes/holes_eval_5_ex_1.json
@@ -0,0 +1,77 @@
+﻿{
+    "name": "holes_eval_5_ex_1",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/BlackDrywallMCS",
+    "floorMaterial": "Custom/Materials/MaroonWoodMCS",
+    "wallMaterial": "Custom/Materials/PurpleWoodMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 3,
+        "z": 12
+    },
+    "holes": [
+            { "x": -6, "z": -2 },
+            { "x": -5, "z": -2 },
+            { "x": -4, "z": -2 },
+            { "x": -3, "z": -2 },
+            { "x": -2, "z": -2 },
+            { "x": -1, "z": -2 },
+            { "x": 0, "z": -2 },
+            { "x": 1, "z": -2 },
+            { "x": 2, "z": -2 },
+            { "x": 3, "z": -2 },
+            { "x": -3, "z": 2 },
+            { "x": -2, "z": 2 },
+            { "x": -1, "z": 2 },
+            { "x": 0, "z": 2 },
+            { "x": 1, "z": 2 },
+            { "x": 2, "z": 2 },
+            { "x": 3, "z": 2 },
+            { "x": 4, "z": 2 },
+            { "x": 5, "z": 2 },
+            { "x": 6, "z": 2 }
+    ],
+    "performerStart": {
+        "position": {
+            "x": 2,
+            "z": -5
+        },
+        "rotation": {
+            "x": 0,
+            "y": 0
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 5,
+                "y": 0.23,
+                "z": 5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/holes_eval_5_ex_2.json b/docs/source/scenes/holes_eval_5_ex_2.json
new file mode 100644
index 000000000..49e33baa2
--- /dev/null
+++ b/docs/source/scenes/holes_eval_5_ex_2.json
@@ -0,0 +1,87 @@
+﻿{
+    "name": "holes_eval_5_ex_2",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/BlackDrywallMCS",
+    "floorMaterial": "Custom/Materials/TealWoodMCS",
+    "wallMaterial": "Custom/Materials/GreenWoodMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 3,
+        "z": 12
+    },
+    "holes": [
+            { "x": 1, "z": -1 },
+            { "x": 1, "z": 0 },
+            { "x": 1, "z": 1 },
+            { "x": 1, "z": 2 },
+            { "x": 1, "z": 3 },
+            { "x": 1, "z": 4 },
+            { "x": 1, "z": 5 },
+            { "x": 1, "z": 6 },
+            { "x": 2, "z": 6 },
+            { "x": 3, "z": 6 },
+            { "x": 4, "z": 6 },
+            { "x": 5, "z": 6 },
+            { "x": 6, "z": 6 },
+            { "x": 6, "z": 5 },
+            { "x": 6, "z": 4 },
+            { "x": 6, "z": 3 },
+            { "x": 6, "z": 2 },
+            { "x": 6, "z": 1 },
+            { "x": 6, "z": 0 },
+            { "x": 6, "z": -1 },
+            { "x": 6, "z": -2 },
+            { "x": 6, "z": -3 },
+            { "x": 6, "z": -4 },
+            { "x": 6, "z": -5 },
+            { "x": 6, "z": -6 },
+            { "x": 5, "z": -6 },
+            { "x": 4, "z": -6 },
+            { "x": 3, "z": -6 },
+            { "x": 2, "z": -6 },
+            { "x": 1, "z": -6 }
+    ],
+    "performerStart": {
+        "position": {
+            "x": -5,
+            "z": 2
+        },
+        "rotation": {
+            "x": 0,
+            "y": 90
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4,
+                "y": 0.23,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/lava_eval_5_ex_1.json b/docs/source/scenes/lava_eval_5_ex_1.json
new file mode 100644
index 000000000..8e6872216
--- /dev/null
+++ b/docs/source/scenes/lava_eval_5_ex_1.json
@@ -0,0 +1,77 @@
+﻿{
+    "name": "lava_eval_5_ex_1",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/BlackDrywallMCS",
+    "floorMaterial": "Custom/Materials/GreyWoodMCS",
+    "wallMaterial": "Custom/Materials/TanWoodMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 3,
+        "z": 12
+    },
+    "lava": [
+        { "x": -6, "z": -2 },
+        { "x": -5, "z": -2 },
+        { "x": -4, "z": -2 },
+        { "x": -3, "z": -2 },
+        { "x": -2, "z": -2 },
+        { "x": -1, "z": -2 },
+        { "x": 0, "z": -2 },
+        { "x": 1, "z": -2 },
+        { "x": 2, "z": -2 },
+        { "x": 3, "z": -2 },
+        { "x": -3, "z": 2 },
+        { "x": -2, "z": 2 },
+        { "x": -1, "z": 2 },
+        { "x": 0, "z": 2 },
+        { "x": 1, "z": 2 },
+        { "x": 2, "z": 2 },
+        { "x": 3, "z": 2 },
+        { "x": 4, "z": 2 },
+        { "x": 5, "z": 2 },
+        { "x": 6, "z": 2 }
+    ],
+    "performerStart": {
+        "position": {
+            "x": 2,
+            "z": -5
+        },
+        "rotation": {
+            "x": 0,
+            "y": 0
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 5,
+                "y": 0.23,
+                "z": 5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/lava_eval_5_ex_2.json b/docs/source/scenes/lava_eval_5_ex_2.json
new file mode 100644
index 000000000..47dc5ebda
--- /dev/null
+++ b/docs/source/scenes/lava_eval_5_ex_2.json
@@ -0,0 +1,87 @@
+﻿{
+    "name": "lava_eval_5_ex_2",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/BlackDrywallMCS",
+    "floorMaterial": "Custom/Materials/BrownWoodMCS",
+    "wallMaterial": "Custom/Materials/WhiteWoodMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 3,
+        "z": 12
+    },
+    "lava": [
+        { "x": 1, "z": -1 },
+        { "x": 1, "z": 0 },
+        { "x": 1, "z": 1 },
+        { "x": 1, "z": 2 },
+        { "x": 1, "z": 3 },
+        { "x": 1, "z": 4 },
+        { "x": 1, "z": 5 },
+        { "x": 1, "z": 6 },
+        { "x": 2, "z": 6 },
+        { "x": 3, "z": 6 },
+        { "x": 4, "z": 6 },
+        { "x": 5, "z": 6 },
+        { "x": 6, "z": 6 },
+        { "x": 6, "z": 5 },
+        { "x": 6, "z": 4 },
+        { "x": 6, "z": 3 },
+        { "x": 6, "z": 2 },
+        { "x": 6, "z": 1 },
+        { "x": 6, "z": 0 },
+        { "x": 6, "z": -1 },
+        { "x": 6, "z": -2 },
+        { "x": 6, "z": -3 },
+        { "x": 6, "z": -4 },
+        { "x": 6, "z": -5 },
+        { "x": 6, "z": -6 },
+        { "x": 5, "z": -6 },
+        { "x": 4, "z": -6 },
+        { "x": 3, "z": -6 },
+        { "x": 2, "z": -6 },
+        { "x": 1, "z": -6 }
+    ],
+    "performerStart": {
+        "position": {
+            "x": -5,
+            "z": 2
+        },
+        "rotation": {
+            "x": 0,
+            "y": 90
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4,
+                "y": 0.23,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/ramps_eval_5_ex_1.json b/docs/source/scenes/ramps_eval_5_ex_1.json
new file mode 100644
index 000000000..b1ddd4a72
--- /dev/null
+++ b/docs/source/scenes/ramps_eval_5_ex_1.json
@@ -0,0 +1,179 @@
+﻿{
+    "name": "ramps_eval_5_ex_1",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/BlackDrywallMCS",
+    "floorMaterial": "Custom/Materials/OliveCarpetMCS",
+    "wallMaterial": "Custom/Materials/MaroonDrywallMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 6,
+        "z": 12
+    },
+    "performerStart": {
+        "position": {
+            "x": -4,
+            "z": -4
+        },
+        "rotation": {
+            "x": 0,
+            "y": 50
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4.5,
+                "y": 2.22,
+                "z": 4.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "platform_lower",
+        "materials": ["Custom/Materials/BrownDrywallMCS"],
+        "type": "cube",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 1000,
+        "lips": {
+            "front": true,
+            "back": true,
+            "left": true,
+            "right": true,
+            "gaps": {
+                "left": [{
+                    "low": 0.25,
+                    "high": 0.5
+                }]
+            }
+        },
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4,
+                "y": 0.5,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 4,
+                "y": 1,
+                "z": 8
+            }
+        }]
+    }, {
+        "id": "ramp_lower",
+        "materials": ["Custom/Materials/BrownDrywallMCS"],
+        "type": "triangle",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 1.5,
+                "y": 0.5,
+                "z": 1
+            },
+            "rotation": {
+                "x": 0,
+                "y": 90,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }, {
+        "id": "platform_upper",
+        "materials": ["Custom/Materials/GreyDrywallMCS"],
+        "type": "cube",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "lips": {
+            "front": true,
+            "back": true,
+            "left": true,
+            "right": true,
+            "gaps": {
+                "front": [{
+                    "low": 0,
+                    "high": 1
+                }]
+            }
+        },
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4.5,
+                "y": 1.5,
+                "z": 4.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }, {
+        "id": "ramp_upper",
+        "materials": ["Custom/Materials/GreyDrywallMCS"],
+        "type": "triangle",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4.5,
+                "y": 1.5,
+                "z": 3.15
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1.732
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/ramps_eval_5_ex_2.json b/docs/source/scenes/ramps_eval_5_ex_2.json
new file mode 100644
index 000000000..dd079c6a8
--- /dev/null
+++ b/docs/source/scenes/ramps_eval_5_ex_2.json
@@ -0,0 +1,180 @@
+﻿{
+    "name": "ramps_eval_5_ex_2",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/BlackDrywallMCS",
+    "floorMaterial": "Custom/Materials/OliveCarpetMCS",
+    "wallMaterial": "Custom/Materials/MaroonDrywallMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 6,
+        "z": 12
+    },
+    "performerStart": {
+        "position": {
+            "x": 4.5,
+            "y": 2,
+            "z": 4.5
+        },
+        "rotation": {
+            "x": 0,
+            "y": 220
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": -4,
+                "y": 0.22,
+                "z": -4
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "platform_lower",
+        "materials": ["Custom/Materials/BrownDrywallMCS"],
+        "type": "cube",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 1000,
+        "lips": {
+            "front": true,
+            "back": true,
+            "left": true,
+            "right": true,
+            "gaps": {
+                "left": [{
+                    "low": 0.25,
+                    "high": 0.5
+                }]
+            }
+        },
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4,
+                "y": 0.5,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 4,
+                "y": 1,
+                "z": 8
+            }
+        }]
+    }, {
+        "id": "ramp_lower",
+        "materials": ["Custom/Materials/BrownDrywallMCS"],
+        "type": "triangle",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 1.5,
+                "y": 0.5,
+                "z": 1
+            },
+            "rotation": {
+                "x": 0,
+                "y": 90,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }, {
+        "id": "platform_upper",
+        "materials": ["Custom/Materials/GreyDrywallMCS"],
+        "type": "cube",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "lips": {
+            "front": true,
+            "back": true,
+            "left": true,
+            "right": true,
+            "gaps": {
+                "front": [{
+                    "low": 0,
+                    "high": 1
+                }]
+            }
+        },
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4.5,
+                "y": 1.5,
+                "z": 4.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }, {
+        "id": "ramp_upper",
+        "materials": ["Custom/Materials/GreyDrywallMCS"],
+        "type": "triangle",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 4.5,
+                "y": 1.5,
+                "z": 3.15
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1.732
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/ramps_eval_5_ex_3.json b/docs/source/scenes/ramps_eval_5_ex_3.json
new file mode 100644
index 000000000..f583d9dc4
--- /dev/null
+++ b/docs/source/scenes/ramps_eval_5_ex_3.json
@@ -0,0 +1,117 @@
+﻿{
+    "name": "ramps_eval_5_ex_3",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+    "floorMaterial": "Custom/Materials/NavyCarpetMCS",
+    "wallMaterial": "Custom/Materials/TealDrywallMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 6,
+        "z": 12
+    },
+    "performerStart": {
+        "position": {
+            "x": -1,
+            "z": 4
+        },
+        "rotation": {
+            "x": 0,
+            "y": 180
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0.5,
+                "y": 2.22,
+                "z": -3
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "platform",
+        "materials": ["Custom/Materials/WhiteWoodMCS"],
+        "type": "cube",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 1000,
+        "lips": {
+            "front": true,
+            "back": true,
+            "left": true,
+            "right": true,
+            "gaps": {
+                "back": [{
+                    "low": 0.25,
+                    "high": 0.75
+                }]
+            }
+        },
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 1,
+                "z": -3.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 3,
+                "y": 2,
+                "z": 3
+            }
+        }]
+    }, {
+        "id": "ramp",
+        "materials": ["Custom/Materials/WhiteWoodMCS"],
+        "type": "triangle",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 1,
+                "z": -0.3
+            },
+            "rotation": {
+                "x": 0,
+                "y": 180,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 2,
+                "z": 3.464
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/ramps_eval_5_ex_4.json b/docs/source/scenes/ramps_eval_5_ex_4.json
new file mode 100644
index 000000000..796a4e435
--- /dev/null
+++ b/docs/source/scenes/ramps_eval_5_ex_4.json
@@ -0,0 +1,118 @@
+﻿{
+    "name": "ramps_eval_5_ex_4",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+    "floorMaterial": "Custom/Materials/NavyCarpetMCS",
+    "wallMaterial": "Custom/Materials/TealDrywallMCS",
+    "roomDimensions": {
+        "x": 12,
+        "y": 6,
+        "z": 12
+    },
+    "performerStart": {
+        "position": {
+            "x": 0.5,
+            "y": 2,
+            "z": -3
+        },
+        "rotation": {
+            "x": 0,
+            "y": 0
+        }
+    },
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": -1,
+                "y": 0.22,
+                "z": 4
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "platform",
+        "materials": ["Custom/Materials/WhiteWoodMCS"],
+        "type": "cube",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 1000,
+        "lips": {
+            "front": true,
+            "back": true,
+            "left": true,
+            "right": true,
+            "gaps": {
+                "back": [{
+                    "low": 0.25,
+                    "high": 0.75
+                }]
+            }
+        },
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 1,
+                "z": -3.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 3,
+                "y": 2,
+                "z": 3
+            }
+        }]
+    }, {
+        "id": "ramp",
+        "materials": ["Custom/Materials/WhiteWoodMCS"],
+        "type": "triangle",
+        "kinematic": "true",
+        "structure": "true",
+        "mass": 100,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 1,
+                "z": -0.3
+            },
+            "rotation": {
+                "x": 0,
+                "y": 180,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 2,
+                "z": 3.464
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/solidity_eval_5_ex_1.json b/docs/source/scenes/solidity_eval_5_ex_1.json
new file mode 100644
index 000000000..f841fd3c5
--- /dev/null
+++ b/docs/source/scenes/solidity_eval_5_ex_1.json
@@ -0,0 +1,663 @@
+{
+  "name": "solidity_eval_5_ex_1",
+  "version": "2",
+  "restrictOpenDoors": true,
+  "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+  "floorMaterial": "Custom/Materials/GreenWoodMCS",
+  "wallMaterial": "Custom/Materials/OliveWoodMCS",
+  "performerStart": {
+    "position": {
+      "x": 0,
+      "y": 2.5,
+      "z": -5.5
+    },
+    "rotation": {
+      "x": 0,
+      "y": 0
+    }
+  },
+  "roomDimensions": {
+    "x": 8,
+    "y": 8,
+    "z": 12
+  },
+  "goal": {
+      "action_list": [["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"]],
+      "category": "retrieval",
+      "metadata": {
+          "target": {
+              "id": "target"
+          }
+      },
+      "description": "Find and pick up the small light black white rubber ball.",
+      "last_step": 2500
+  },
+  "objects": [
+    {
+      "id": "target",
+      "type": "soccer_ball",
+      "mass": 2,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 1,
+            "y": 7.72,
+            "z": 3
+          },
+          "scale": {
+            "x": 2,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ],
+      "moves": [
+        {
+          "stepBegin": 1,
+          "stepEnd": 22,
+          "vector": {
+            "x": 0,
+            "y": -0.25,
+            "z": 0
+          }
+        }
+      ],
+      "kinematic": true,
+      "togglePhysics": [
+        {
+          "stepBegin": 56
+        }
+      ]
+    },
+    {
+      "id": "placer",
+      "type": "cylinder",
+      "kinematic": true,
+      "structure": true,
+      "mass": 50,
+      "materials": ["Custom/Materials/Magenta"],
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 1,
+            "y": 10.94,
+            "z": 3
+          },
+          "scale": {
+            "x": 0.1,
+            "y": 3,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [
+        {
+          "stepBegin": 1,
+          "stepEnd": 22,
+          "vector": {
+            "x": 0,
+            "y": -0.25,
+            "z": 0
+          }
+        },
+        {
+          "stepBegin": 58,
+          "stepEnd": 79,
+          "vector": {
+            "x": 0,
+            "y": 0.25,
+            "z": 0
+          }
+        }
+      ],
+      "changeMaterials": [
+        {
+          "stepBegin": 56,
+          "materials": [
+            "Custom/Materials/Cyan"
+          ]
+        }
+      ]
+    },
+    {
+      "id": "platform_p1",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/OliveWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": false,
+        "right": false
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": -3
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 6
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p2",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/OliveWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": true,
+        "right": true
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": 1.25
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 2.5
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p3",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/OliveWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": true,
+        "right": false
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": 3
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 1
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p4",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/OliveWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": true,
+        "right": true
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": 4.5
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p5",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/OliveWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": true,
+        "back": true,
+        "left": false,
+        "right": true
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 1,
+            "y": 0.95,
+            "z": 3
+          },
+          "scale": {
+            "x": 1,
+            "y": 1.9,
+            "z": 1
+          }
+        }
+      ]
+    },
+    {
+      "id": "wall_with_top_door_p1",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 12.1,
+            "z": 0
+          },
+          "scale": {
+            "x": 1,
+            "y": 0.2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_top_door_p2",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -0.46,
+            "y": 11,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.08,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_top_door_p3",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0.46,
+            "y": 11,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.08,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "door_top",
+      "type": "door_4",
+      "mass": 1,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "openable": true,
+      "kinematic": true,
+      "shows": [{
+          "stepBegin": 0,
+          "position": {
+              "x": 0,
+              "y": 10,
+              "z": 0
+          },
+          "rotation": {
+              "x": 0,
+              "y": 180,
+              "z": 0
+          },
+          "scale": {
+              "x": 1,
+              "y": 1,
+              "z": 1
+          }
+      }],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_left_door_p1",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -2.25,
+            "y": 11.1,
+            "z": 0
+          },
+          "scale": {
+            "x": 3.5,
+            "y": 2.2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_left_door_p2",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -3.335,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_left_door_p3",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -1.165,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "door_left",
+      "type": "door_4",
+      "mass": 1,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "openable": true,
+      "kinematic": true,
+      "shows": [{
+          "stepBegin": 0,
+          "position": {
+              "x": -2.25,
+              "y": 8,
+              "z": 0
+          },
+          "rotation": {
+              "x": 0,
+              "y": 180,
+              "z": 0
+          },
+          "scale": {
+              "x": 1,
+              "y": 1,
+              "z": 1
+          }
+      }],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_right_door_p1",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 2.25,
+            "y": 11.1,
+            "z": 0
+          },
+          "scale": {
+            "x": 3.5,
+            "y": 2.2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_right_door_p2",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 1.165,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_right_door_p3",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/GreyDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 3.335,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "door_right",
+      "type": "door_4",
+      "mass": 1,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "openable": true,
+      "kinematic": true,
+      "shows": [{
+          "stepBegin": 0,
+          "position": {
+              "x": 2.25,
+              "y": 8,
+              "z": 0
+          },
+          "rotation": {
+              "x": 0,
+              "y": 180,
+              "z": 0
+          },
+          "scale": {
+              "x": 1,
+              "y": 1,
+              "z": 1
+          }
+      }],
+      "moves": [{
+          "stepBegin": 23,
+          "stepEnd": 54,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    }
+  ]
+}
diff --git a/docs/source/scenes/solidity_eval_5_ex_2.json b/docs/source/scenes/solidity_eval_5_ex_2.json
new file mode 100644
index 000000000..31f996ef8
--- /dev/null
+++ b/docs/source/scenes/solidity_eval_5_ex_2.json
@@ -0,0 +1,663 @@
+{
+  "name": "solidity_eval_5_ex_2",
+  "version": "2",
+  "restrictOpenDoors": true,
+  "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+  "floorMaterial": "Custom/Materials/PurpleWoodMCS",
+  "wallMaterial": "Custom/Materials/NavyWoodMCS",
+  "performerStart": {
+    "position": {
+      "x": 0,
+      "y": 2.5,
+      "z": -5.5
+    },
+    "rotation": {
+      "x": 0,
+      "y": 0
+    }
+  },
+  "roomDimensions": {
+    "x": 8,
+    "y": 8,
+    "z": 12
+  },
+  "goal": {
+      "action_list": [["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"],["Pass"]],
+      "category": "retrieval",
+      "metadata": {
+          "target": {
+              "id": "target"
+          }
+      },
+      "description": "Find and pick up the small light black white rubber ball.",
+      "last_step": 2500
+  },
+  "objects": [
+    {
+      "id": "target",
+      "type": "soccer_ball",
+      "mass": 2,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -1.5,
+            "y": 7.72,
+            "z": 4
+          },
+          "scale": {
+            "x": 2,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ],
+      "moves": [
+        {
+          "stepBegin": 11,
+          "stepEnd": 32,
+          "vector": {
+            "x": 0,
+            "y": -0.25,
+            "z": 0
+          }
+        }
+      ],
+      "kinematic": true,
+      "togglePhysics": [
+        {
+          "stepBegin": 66
+        }
+      ]
+    },
+    {
+      "id": "placer",
+      "type": "cylinder",
+      "kinematic": true,
+      "structure": true,
+      "mass": 50,
+      "materials": ["Custom/Materials/Magenta"],
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -1.5,
+            "y": 10.94,
+            "z": 4
+          },
+          "scale": {
+            "x": 0.1,
+            "y": 3,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [
+        {
+          "stepBegin": 11,
+          "stepEnd": 32,
+          "vector": {
+            "x": 0,
+            "y": -0.25,
+            "z": 0
+          }
+        },
+        {
+          "stepBegin": 68,
+          "stepEnd": 89,
+          "vector": {
+            "x": 0,
+            "y": 0.25,
+            "z": 0
+          }
+        }
+      ],
+      "changeMaterials": [
+        {
+          "stepBegin": 66,
+          "materials": [
+            "Custom/Materials/Cyan"
+          ]
+        }
+      ]
+    },
+    {
+      "id": "platform_p1",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/NavyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": false,
+        "right": false
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": -3
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 6
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p2",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/NavyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": true,
+        "right": true
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": 1.75
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 3.5
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p3",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/NavyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": false,
+        "right": true
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": 4
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 1
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p4",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/NavyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": false,
+        "back": false,
+        "left": true,
+        "right": true
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1,
+            "z": 5.5
+          },
+          "scale": {
+            "x": 1,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform_p5",
+      "type": "cube",
+      "mass": 200,
+      "materials": ["Custom/Materials/NavyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "lips": {
+        "front": true,
+        "back": true,
+        "left": true,
+        "right": false
+      },
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -1.5,
+            "y": 0.95,
+            "z": 4
+          },
+          "scale": {
+            "x": 2,
+            "y": 1.9,
+            "z": 1
+          }
+        }
+      ]
+    },
+    {
+      "id": "wall_with_top_door_p1",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 12.1,
+            "z": 0
+          },
+          "scale": {
+            "x": 1,
+            "y": 0.2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_top_door_p2",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -0.46,
+            "y": 11,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.08,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_top_door_p3",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0.46,
+            "y": 11,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.08,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "door_top",
+      "type": "door_4",
+      "mass": 1,
+      "materials": ["Custom/Materials/WhiteWoodMCS"],
+      "openable": true,
+      "kinematic": true,
+      "shows": [{
+          "stepBegin": 0,
+          "position": {
+              "x": 0,
+              "y": 10,
+              "z": 0
+          },
+          "rotation": {
+              "x": 0,
+              "y": 180,
+              "z": 0
+          },
+          "scale": {
+              "x": 1,
+              "y": 1,
+              "z": 1
+          }
+      }],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_left_door_p1",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -2.25,
+            "y": 11.1,
+            "z": 0
+          },
+          "scale": {
+            "x": 3.5,
+            "y": 2.2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_left_door_p2",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -3.335,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_left_door_p3",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -1.165,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "door_left",
+      "type": "door_4",
+      "mass": 1,
+      "materials": ["Custom/Materials/WhiteWoodMCS"],
+      "openable": true,
+      "kinematic": true,
+      "shows": [{
+          "stepBegin": 0,
+          "position": {
+              "x": -2.25,
+              "y": 8,
+              "z": 0
+          },
+          "rotation": {
+              "x": 0,
+              "y": 180,
+              "z": 0
+          },
+          "scale": {
+              "x": 1,
+              "y": 1,
+              "z": 1
+          }
+      }],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_right_door_p1",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 2.25,
+            "y": 11.1,
+            "z": 0
+          },
+          "scale": {
+            "x": 3.5,
+            "y": 2.2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_right_door_p2",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 1.165,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "wall_with_right_door_p3",
+      "type": "cube",
+      "mass": 10,
+      "materials": ["Custom/Materials/BrownDrywallMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 3.335,
+            "y": 9,
+            "z": 0
+          },
+          "scale": {
+            "x": 1.33,
+            "y": 2,
+            "z": 0.1
+          }
+        }
+      ],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    },
+    {
+      "id": "door_right",
+      "type": "door_4",
+      "mass": 1,
+      "materials": ["Custom/Materials/WhiteWoodMCS"],
+      "openable": true,
+      "kinematic": true,
+      "shows": [{
+          "stepBegin": 0,
+          "position": {
+              "x": 2.25,
+              "y": 8,
+              "z": 0
+          },
+          "rotation": {
+              "x": 0,
+              "y": 180,
+              "z": 0
+          },
+          "scale": {
+              "x": 1,
+              "y": 1,
+              "z": 1
+          }
+      }],
+      "moves": [{
+          "stepBegin": 33,
+          "stepEnd": 64,
+          "vector": {
+              "x": 0,
+              "y": -0.25,
+              "z": 0
+          }
+      }]
+    }
+  ]
+}
diff --git a/docs/source/scenes/spatial_elimination_eval_5_ex_1.json b/docs/source/scenes/spatial_elimination_eval_5_ex_1.json
new file mode 100644
index 000000000..12818aa57
--- /dev/null
+++ b/docs/source/scenes/spatial_elimination_eval_5_ex_1.json
@@ -0,0 +1,153 @@
+{
+  "name": "spatial_elimination_eval_5_ex_1",
+  "version": "2",
+  "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+  "floorMaterial": "Custom/Materials/RoseWoodMCS",
+  "wallMaterial": "Custom/Materials/AzureWoodMCS",
+  "performerStart": {
+    "position": {
+      "x": 0,
+      "y": 2.25,
+      "z": -5.5
+    },
+    "rotation": {
+      "x": 10,
+      "y": 0
+    }
+  },
+  "roomDimensions": {
+    "x": 8,
+    "y": 3,
+    "z": 12
+  },
+  "goal": {
+      "category": "retrieval",
+      "metadata": {
+          "target": {
+              "id": "target"
+          }
+      },
+      "description": "Find and pick up the tiny light black white rubber ball.",
+      "last_step": 2500
+  },
+  "objects": [
+    {
+      "id": "target",
+      "type": "soccer_ball",
+      "mass": 2,
+      "shows": [
+        {
+          "position": {
+            "x": 2.1,
+            "y": 0.22,
+            "z": 2
+          },
+          "rotation": {
+            "x": 0,
+            "y": 0,
+            "z": 0
+          },
+          "stepBegin": 0,
+          "scale": {
+            "x": 2,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_left",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -2,
+            "y": 0.9,
+            "z": 1.5
+          },
+          "scale": {
+            "x": 0.2,
+            "y": 1.8,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_right",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 2,
+            "y": 0.3,
+            "z": 1.5
+          },
+          "scale": {
+            "x": 0.6,
+            "y": 0.6,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform",
+      "type": "cube",
+      "mass": 1000,
+      "materials": ["Custom/Materials/AzureWoodMCS"],
+      "kinematic": true,
+      "physics": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 0.5,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 1,
+            "z": 12
+          }
+        }
+      ]
+    },
+    {
+      "id": "decision_wall",
+      "type": "cube",
+      "mass": 50,
+      "materials": ["Custom/Materials/Black"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1.125,
+            "z": -4
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 0.25,
+            "z": 0.25
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/docs/source/scenes/spatial_elimination_eval_5_ex_2.json b/docs/source/scenes/spatial_elimination_eval_5_ex_2.json
new file mode 100644
index 000000000..9dde09cae
--- /dev/null
+++ b/docs/source/scenes/spatial_elimination_eval_5_ex_2.json
@@ -0,0 +1,153 @@
+{
+  "name": "spatial_elimination_eval_5_ex_2",
+  "version": "2",
+  "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+  "floorMaterial": "Custom/Materials/RoseWoodMCS",
+  "wallMaterial": "Custom/Materials/AzureWoodMCS",
+  "performerStart": {
+    "position": {
+      "x": 0,
+      "y": 2.25,
+      "z": -5.5
+    },
+    "rotation": {
+      "x": 10,
+      "y": 0
+    }
+  },
+  "roomDimensions": {
+    "x": 8,
+    "y": 3,
+    "z": 12
+  },
+  "goal": {
+      "category": "retrieval",
+      "metadata": {
+          "target": {
+              "id": "target"
+          }
+      },
+      "description": "Find and pick up the tiny light black white rubber ball.",
+      "last_step": 2500
+  },
+  "objects": [
+    {
+      "id": "target",
+      "type": "soccer_ball",
+      "mass": 2,
+      "shows": [
+        {
+          "position": {
+            "x": -2.1,
+            "y": 0.22,
+            "z": 2
+          },
+          "rotation": {
+            "x": 0,
+            "y": 0,
+            "z": 0
+          },
+          "stepBegin": 0,
+          "scale": {
+            "x": 2,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_left",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -2,
+            "y": 0.9,
+            "z": 1.5
+          },
+          "scale": {
+            "x": 0.2,
+            "y": 1.8,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_right",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/BrownWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 2,
+            "y": 0.3,
+            "z": 1.5
+          },
+          "scale": {
+            "x": 0.6,
+            "y": 0.6,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform",
+      "type": "cube",
+      "mass": 1000,
+      "materials": ["Custom/Materials/AzureWoodMCS"],
+      "kinematic": true,
+      "physics": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 0.5,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 1,
+            "z": 12
+          }
+        }
+      ]
+    },
+    {
+      "id": "decision_wall",
+      "type": "cube",
+      "mass": 50,
+      "materials": ["Custom/Materials/Black"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1.125,
+            "z": -4
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 0.25,
+            "z": 0.25
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/docs/source/scenes/spatial_elimination_eval_5_ex_3.json b/docs/source/scenes/spatial_elimination_eval_5_ex_3.json
new file mode 100644
index 000000000..0acf1b1b1
--- /dev/null
+++ b/docs/source/scenes/spatial_elimination_eval_5_ex_3.json
@@ -0,0 +1,153 @@
+{
+  "name": "spatial_elimination_eval_5_ex_3",
+  "version": "2",
+  "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+  "floorMaterial": "Custom/Materials/OrangeWoodMCS",
+  "wallMaterial": "Custom/Materials/SpringGreenWoodMCS",
+  "performerStart": {
+    "position": {
+      "x": 0,
+      "y": 2.25,
+      "z": -5.5
+    },
+    "rotation": {
+      "x": 10,
+      "y": 0
+    }
+  },
+  "roomDimensions": {
+    "x": 8,
+    "y": 3,
+    "z": 12
+  },
+  "goal": {
+      "category": "retrieval",
+      "metadata": {
+          "target": {
+              "id": "target"
+          }
+      },
+      "description": "Find and pick up the tiny light black white rubber ball.",
+      "last_step": 2500
+  },
+  "objects": [
+    {
+      "id": "target",
+      "type": "soccer_ball",
+      "mass": 2,
+      "shows": [
+        {
+          "position": {
+            "x": -2.6,
+            "y": 0.22,
+            "z": 4.5
+          },
+          "rotation": {
+            "x": 0,
+            "y": 0,
+            "z": 0
+          },
+          "stepBegin": 0,
+          "scale": {
+            "x": 2,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_right",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/GreyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 2.5,
+            "y": 0.9,
+            "z": 4
+          },
+          "scale": {
+            "x": 0.2,
+            "y": 1.8,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_left",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/GreyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -2.5,
+            "y": 0.3,
+            "z": 4
+          },
+          "scale": {
+            "x": 0.6,
+            "y": 0.6,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform",
+      "type": "cube",
+      "mass": 1000,
+      "materials": ["Custom/Materials/SpringGreenWoodMCS"],
+      "kinematic": true,
+      "physics": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 0.5,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 1,
+            "z": 12
+          }
+        }
+      ]
+    },
+    {
+      "id": "decision_wall",
+      "type": "cube",
+      "mass": 50,
+      "materials": ["Custom/Materials/Black"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1.125,
+            "z": -4
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 0.25,
+            "z": 0.25
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/docs/source/scenes/spatial_elimination_eval_5_ex_4.json b/docs/source/scenes/spatial_elimination_eval_5_ex_4.json
new file mode 100644
index 000000000..38095ff27
--- /dev/null
+++ b/docs/source/scenes/spatial_elimination_eval_5_ex_4.json
@@ -0,0 +1,153 @@
+{
+  "name": "spatial_elimination_eval_5_ex_4",
+  "version": "2",
+  "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+  "floorMaterial": "Custom/Materials/OrangeWoodMCS",
+  "wallMaterial": "Custom/Materials/SpringGreenWoodMCS",
+  "performerStart": {
+    "position": {
+      "x": 0,
+      "y": 2.25,
+      "z": -5.5
+    },
+    "rotation": {
+      "x": 10,
+      "y": 0
+    }
+  },
+  "roomDimensions": {
+    "x": 8,
+    "y": 3,
+    "z": 12
+  },
+  "goal": {
+      "category": "retrieval",
+      "metadata": {
+          "target": {
+              "id": "target"
+          }
+      },
+      "description": "Find and pick up the tiny light black white rubber ball.",
+      "last_step": 2500
+  },
+  "objects": [
+    {
+      "id": "target",
+      "type": "soccer_ball",
+      "mass": 2,
+      "shows": [
+        {
+          "position": {
+            "x": 2.6,
+            "y": 0.22,
+            "z": 4.5
+          },
+          "rotation": {
+            "x": 0,
+            "y": 0,
+            "z": 0
+          },
+          "stepBegin": 0,
+          "scale": {
+            "x": 2,
+            "y": 2,
+            "z": 2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_right",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/GreyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 2.5,
+            "y": 0.9,
+            "z": 4
+          },
+          "scale": {
+            "x": 0.2,
+            "y": 1.8,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "occluder_left",
+      "type": "cube",
+      "mass": 100,
+      "materials": ["Custom/Materials/GreyWoodMCS"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": -2.5,
+            "y": 0.3,
+            "z": 4
+          },
+          "scale": {
+            "x": 0.6,
+            "y": 0.6,
+            "z": 0.2
+          }
+        }
+      ]
+    },
+    {
+      "id": "platform",
+      "type": "cube",
+      "mass": 1000,
+      "materials": ["Custom/Materials/SpringGreenWoodMCS"],
+      "kinematic": true,
+      "physics": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 0.5,
+            "z": 0
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 1,
+            "z": 12
+          }
+        }
+      ]
+    },
+    {
+      "id": "decision_wall",
+      "type": "cube",
+      "mass": 50,
+      "materials": ["Custom/Materials/Black"],
+      "kinematic": true,
+      "structure": true,
+      "shows": [
+        {
+          "stepBegin": 0,
+          "position": {
+            "x": 0,
+            "y": 1.125,
+            "z": -4
+          },
+          "scale": {
+            "x": 0.5,
+            "y": 0.25,
+            "z": 0.25
+          }
+        }
+      ]
+    }
+  ]
+}
diff --git a/docs/source/scenes/tool_use_eval_5_ex_1.json b/docs/source/scenes/tool_use_eval_5_ex_1.json
new file mode 100644
index 000000000..674347df9
--- /dev/null
+++ b/docs/source/scenes/tool_use_eval_5_ex_1.json
@@ -0,0 +1,102 @@
+﻿{
+    "name": "tool_use_eval_5_ex_1",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+    "floorMaterial": "Custom/Materials/RoseWoodMCS",
+    "wallMaterial": "Custom/Materials/OrangeWoodMCS",
+    "roomDimensions": {
+        "x": 14,
+        "y": 3,
+        "z": 14
+    },
+    "performerStart": {
+        "position": {
+            "x": -6.5,
+            "z": 0
+        },
+        "rotation": {
+            "x": 0,
+            "y": 70
+        }
+    },
+    "lava": [
+        { "x": 4, "z": 4 },
+        { "x": 3, "z": 4 },
+        { "x": 2, "z": 4 },
+        { "x": 1, "z": 4 },
+        { "x": 0, "z": 4 },
+        { "x": 4, "z": 3 },
+        { "x": 3, "z": 3 },
+        { "x": 2, "z": 3 },
+        { "x": 1, "z": 3 },
+        { "x": 0, "z": 3 },
+        { "x": 4, "z": 2 },
+        { "x": 3, "z": 2 },
+        { "x": 1, "z": 2 },
+        { "x": 0, "z": 2 },
+        { "x": 4, "z": 1 },
+        { "x": 3, "z": 1 },
+        { "x": 2, "z": 1 },
+        { "x": 1, "z": 1 },
+        { "x": 0, "z": 1 },
+        { "x": 4, "z": 0 },
+        { "x": 3, "z": 0 },
+        { "x": 2, "z": 0 },
+        { "x": 1, "z": 0 },
+        { "x": 0, "z": 0 }
+    ],
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 2,
+                "y": 0.22,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "tool",
+        "type": "tool_rect_0_50_x_5_00",
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": -3.5,
+                "y": 0.15,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 90,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/tool_use_eval_5_ex_2.json b/docs/source/scenes/tool_use_eval_5_ex_2.json
new file mode 100644
index 000000000..76d408bd1
--- /dev/null
+++ b/docs/source/scenes/tool_use_eval_5_ex_2.json
@@ -0,0 +1,102 @@
+﻿{
+    "name": "tool_use_eval_5_ex_2",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/GreyDrywallMCS",
+    "floorMaterial": "Custom/Materials/RoseWoodMCS",
+    "wallMaterial": "Custom/Materials/OrangeWoodMCS",
+    "roomDimensions": {
+        "x": 14,
+        "y": 3,
+        "z": 14
+    },
+    "performerStart": {
+        "position": {
+            "x": -6.5,
+            "z": 0
+        },
+        "rotation": {
+            "x": 0,
+            "y": 70
+        }
+    },
+    "lava": [
+        { "x": 4, "z": 4 },
+        { "x": 3, "z": 4 },
+        { "x": 2, "z": 4 },
+        { "x": 1, "z": 4 },
+        { "x": 0, "z": 4 },
+        { "x": 4, "z": 3 },
+        { "x": 3, "z": 3 },
+        { "x": 2, "z": 3 },
+        { "x": 1, "z": 3 },
+        { "x": 0, "z": 3 },
+        { "x": 4, "z": 2 },
+        { "x": 3, "z": 2 },
+        { "x": 1, "z": 2 },
+        { "x": 0, "z": 2 },
+        { "x": 4, "z": 1 },
+        { "x": 3, "z": 1 },
+        { "x": 2, "z": 1 },
+        { "x": 1, "z": 1 },
+        { "x": 0, "z": 1 },
+        { "x": 4, "z": 0 },
+        { "x": 3, "z": 0 },
+        { "x": 2, "z": 0 },
+        { "x": 1, "z": 0 },
+        { "x": 0, "z": 0 }
+    ],
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 2,
+                "y": 0.22,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "tool",
+        "type": "tool_rect_0_50_x_5_00",
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": -3.5,
+                "y": 0.15,
+                "z": 2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/tool_use_eval_5_ex_3.json b/docs/source/scenes/tool_use_eval_5_ex_3.json
new file mode 100644
index 000000000..a8334c4cc
--- /dev/null
+++ b/docs/source/scenes/tool_use_eval_5_ex_3.json
@@ -0,0 +1,132 @@
+﻿{
+    "name": "tool_use_eval_5_ex_3",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/WhiteDrywallMCS",
+    "floorMaterial": "Custom/Materials/SpringGreenDrywallMCS",
+    "wallMaterial": "Custom/Materials/VioletDrywallMCS",
+    "roomDimensions": {
+        "x": 24,
+        "y": 3,
+        "z": 24
+    },
+    "performerStart": {
+        "position": {
+            "x": -2,
+            "z": 10
+        },
+        "rotation": {
+            "x": 0,
+            "y": 170
+        }
+    },
+    "lava": [
+        { "x": -3, "z": -1 },
+        { "x": -2, "z": -1 },
+        { "x": -1, "z": -1 },
+        { "x": 0, "z": -1 },
+        { "x": 1, "z": -1 },
+        { "x": 2, "z": -1 },
+        { "x": 3, "z": -1 },
+        { "x": -3, "z": -2 },
+        { "x": -2, "z": -2 },
+        { "x": -1, "z": -2 },
+        { "x": 0, "z": -2 },
+        { "x": 1, "z": -2 },
+        { "x": 2, "z": -2 },
+        { "x": 3, "z": -2 },
+        { "x": -3, "z": -3 },
+        { "x": -2, "z": -3 },
+        { "x": -1, "z": -3 },
+        { "x": 0, "z": -3 },
+        { "x": 1, "z": -3 },
+        { "x": 2, "z": -3 },
+        { "x": 3, "z": -3 },
+        { "x": -3, "z": -4 },
+        { "x": -2, "z": -4 },
+        { "x": 2, "z": -4 },
+        { "x": 3, "z": -4 },
+        { "x": -3, "z": -5 },
+        { "x": -2, "z": -5 },
+        { "x": 2, "z": -5 },
+        { "x": 3, "z": -5 },
+        { "x": -3, "z": -6 },
+        { "x": -2, "z": -6 },
+        { "x": 2, "z": -6 },
+        { "x": 3, "z": -6 },
+        { "x": -3, "z": -7 },
+        { "x": -2, "z": -7 },
+        { "x": -1, "z": -7 },
+        { "x": 0, "z": -7 },
+        { "x": 1, "z": -7 },
+        { "x": 2, "z": -7 },
+        { "x": 3, "z": -7 },
+        { "x": -3, "z": -8 },
+        { "x": -2, "z": -8 },
+        { "x": -1, "z": -8 },
+        { "x": 0, "z": -8 },
+        { "x": 1, "z": -8 },
+        { "x": 2, "z": -8 },
+        { "x": 3, "z": -8 },
+        { "x": -3, "z": -9 },
+        { "x": -2, "z": -9 },
+        { "x": -1, "z": -9 },
+        { "x": 0, "z": -9 },
+        { "x": 1, "z": -9 },
+        { "x": 2, "z": -9 },
+        { "x": 3, "z": -9 }
+    ],
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0.22,
+                "z": -5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "tool",
+        "type": "tool_rect_1_00_x_9_00",
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0.15,
+                "z": 4.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }]
+}
diff --git a/docs/source/scenes/tool_use_eval_5_ex_4.json b/docs/source/scenes/tool_use_eval_5_ex_4.json
new file mode 100644
index 000000000..c3f4389eb
--- /dev/null
+++ b/docs/source/scenes/tool_use_eval_5_ex_4.json
@@ -0,0 +1,132 @@
+﻿{
+    "name": "tool_use_eval_5_ex_4",
+    "version": 2,
+    "ceilingMaterial": "Custom/Materials/WhiteDrywallMCS",
+    "floorMaterial": "Custom/Materials/SpringGreenDrywallMCS",
+    "wallMaterial": "Custom/Materials/VioletDrywallMCS",
+    "roomDimensions": {
+        "x": 24,
+        "y": 3,
+        "z": 24
+    },
+    "performerStart": {
+        "position": {
+            "x": -2,
+            "z": 10
+        },
+        "rotation": {
+            "x": 0,
+            "y": 170
+        }
+    },
+    "lava": [
+        { "x": -3, "z": -1 },
+        { "x": -2, "z": -1 },
+        { "x": -1, "z": -1 },
+        { "x": 0, "z": -1 },
+        { "x": 1, "z": -1 },
+        { "x": 2, "z": -1 },
+        { "x": 3, "z": -1 },
+        { "x": -3, "z": -2 },
+        { "x": -2, "z": -2 },
+        { "x": -1, "z": -2 },
+        { "x": 0, "z": -2 },
+        { "x": 1, "z": -2 },
+        { "x": 2, "z": -2 },
+        { "x": 3, "z": -2 },
+        { "x": -3, "z": -3 },
+        { "x": -2, "z": -3 },
+        { "x": -1, "z": -3 },
+        { "x": 0, "z": -3 },
+        { "x": 1, "z": -3 },
+        { "x": 2, "z": -3 },
+        { "x": 3, "z": -3 },
+        { "x": -3, "z": -4 },
+        { "x": -2, "z": -4 },
+        { "x": 2, "z": -4 },
+        { "x": 3, "z": -4 },
+        { "x": -3, "z": -5 },
+        { "x": -2, "z": -5 },
+        { "x": 2, "z": -5 },
+        { "x": 3, "z": -5 },
+        { "x": -3, "z": -6 },
+        { "x": -2, "z": -6 },
+        { "x": 2, "z": -6 },
+        { "x": 3, "z": -6 },
+        { "x": -3, "z": -7 },
+        { "x": -2, "z": -7 },
+        { "x": -1, "z": -7 },
+        { "x": 0, "z": -7 },
+        { "x": 1, "z": -7 },
+        { "x": 2, "z": -7 },
+        { "x": 3, "z": -7 },
+        { "x": -3, "z": -8 },
+        { "x": -2, "z": -8 },
+        { "x": -1, "z": -8 },
+        { "x": 0, "z": -8 },
+        { "x": 1, "z": -8 },
+        { "x": 2, "z": -8 },
+        { "x": 3, "z": -8 },
+        { "x": -3, "z": -9 },
+        { "x": -2, "z": -9 },
+        { "x": -1, "z": -9 },
+        { "x": 0, "z": -9 },
+        { "x": 1, "z": -9 },
+        { "x": 2, "z": -9 },
+        { "x": 3, "z": -9 }
+    ],
+    "goal": {
+        "category": "retrieval",
+        "metadata": {
+            "target": {
+                "id": "target"
+            }
+        },
+        "description": "Find and pick up the tiny light black white rubber ball.",
+        "last_step": 2500
+    },
+    "objects": [{
+        "id": "target",
+        "type": "soccer_ball",
+        "mass": 1,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0.22,
+                "z": -5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 0,
+                "z": 0
+            },
+            "scale": {
+                "x": 2,
+                "y": 2,
+                "z": 2
+            }
+        }]
+    }, {
+        "id": "tool",
+        "type": "tool_rect_1_00_x_9_00",
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0.15,
+                "z": 4.5
+            },
+            "rotation": {
+                "x": 0,
+                "y": 90,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }]
+}
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3a.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3a.mp4
deleted file mode 100644
index 45f405631..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3a.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3b.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3b.mp4
deleted file mode 100644
index 146b6a886..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3b.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3c.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3c.mp4
deleted file mode 100644
index 12fef3b2c..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3c.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3d.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3d.mp4
deleted file mode 100644
index 15cfb7dfb..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3d.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3e.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3e.mp4
deleted file mode 100644
index 2b05075b9..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3e.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3f.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3f.mp4
deleted file mode 100644
index 20765e49b..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3f.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3g.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3g.mp4
deleted file mode 100644
index 7ecb6fc7c..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3g.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3h.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3h.mp4
deleted file mode 100644
index 463000a6e..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3h.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3i.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3i.mp4
deleted file mode 100644
index 672df3368..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3i.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3j.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3j.mp4
deleted file mode 100644
index 7f5fcde5e..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_3j.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_4.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_4.mp4
deleted file mode 100644
index 26b90083a..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_4.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_5.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_5.mp4
deleted file mode 100644
index 716a19bad..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_5.mp4 and /dev/null differ
diff --git a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_7.mp4 b/docs/source/videos/tutorial/adding_3d_models_tutorial_step_7.mp4
deleted file mode 100644
index 374ae8ac8..000000000
Binary files a/docs/source/videos/tutorial/adding_3d_models_tutorial_step_7.mp4 and /dev/null differ
diff --git a/machine_common_sense/_version.py b/machine_common_sense/_version.py
index 93b60a1dc..45869b622 100644
--- a/machine_common_sense/_version.py
+++ b/machine_common_sense/_version.py
@@ -1,1 +1,1 @@
-__version__ = '0.5.1'
+__version__ = '0.5.2'
diff --git a/machine_common_sense/action.py b/machine_common_sense/action.py
index 59bf8d0a9..c5bf0104c 100644
--- a/machine_common_sense/action.py
+++ b/machine_common_sense/action.py
@@ -26,7 +26,7 @@ class Action(Enum):
     CLOSE_OBJECT = (
         "CloseObject",
         "1",
-        "Close a nearby object. (objectId=string, amount=float " +
+        "Close a nearby object. (objectId=string, amount=float "
         "(default:1), objectImageCoordsX=float, objectImageCoordsY=float)"
     )
     """
@@ -177,8 +177,8 @@ class Action(Enum):
     OPEN_OBJECT = (
         "OpenObject",
         "3",
-        "Open a nearby object. (objectId=string, " +
-        "amount=float (default:1), objectImageCoordsX=float, " +
+        "Open a nearby object. (objectId=string, "
+        "amount=float (default:1), objectImageCoordsX=float, "
         "objectImageCoordsY=float)"
     )
     """
@@ -230,7 +230,7 @@ class Action(Enum):
     PICKUP_OBJECT = (
         "PickupObject",
         "4",
-        "Pickup a nearby object and hold it in your hand. " +
+        "Pickup a nearby object and hold it in your hand. "
         "(objectId=string, objectImageCoordsX=float, objectImageCoordsY=float)"
     )
     """
@@ -277,7 +277,7 @@ class Action(Enum):
     PULL_OBJECT = (
         "PullObject",
         "5",
-        "Pull a nearby object. (objectId=string, force=float (default:0.5), " +
+        "Pull a nearby object. (objectId=string, force=float (default:0.5), "
         "objectImageCoordsX=float, objectImageCoordsY=float)"
     )
     """
@@ -324,7 +324,7 @@ class Action(Enum):
     PUSH_OBJECT = (
         "PushObject",
         "6",
-        "Push a nearby object. (objectId=string, force=float (default:0.5), " +
+        "Push a nearby object. (objectId=string, force=float (default:0.5), "
         "objectImageCoordsX=float, objectImageCoordsY=float)"
     )
     """
@@ -371,9 +371,9 @@ class Action(Enum):
     PUT_OBJECT = (
         "PutObject",
         "7",
-        "Place an object you are holding into/onto a nearby " +
-        "receptacle object. (objectId=string, receptacleObjectId=string, " +
-        "receptacleObjectImageCoordsX=float, " +
+        "Place an object you are holding into/onto a nearby "
+        "receptacle object. (objectId=string, receptacleObjectId=string, "
+        "receptacleObjectImageCoordsX=float, "
         "receptacleObjectImageCoordsY=float)"
     )
     """
@@ -429,8 +429,8 @@ class Action(Enum):
     TORQUE_OBJECT = (
         "TorqueObject",
         "8",
-        "Apply torque to a nearby object. (objectId=string, " +
-        "force=float(default:0.5), objectImageCoordsX=float, " +
+        "Apply torque to a nearby object. (objectId=string, "
+        "force=float(default:0.5), objectImageCoordsX=float, "
         "objectImageCoordsY=float)"
     )
     """
@@ -476,9 +476,9 @@ class Action(Enum):
     ROTATE_OBJECT = (
         "RotateObject",
         "9",
-        "Apply a rotation of 5 degrees to a nearby object. " +
-        "(objectId=string, " +
-        "clockwise=bool(default:True), objectImageCoordsX=float, " +
+        "Apply a rotation of 5 degrees to a nearby object. "
+        "(objectId=string, "
+        "clockwise=bool(default:True), objectImageCoordsX=float, "
         "objectImageCoordsY=float)"
     )
     """
@@ -524,11 +524,11 @@ class Action(Enum):
     MOVE_OBJECT = (
         "MoveObject",
         "0",
-        "Apply a movement of 0.1 meters to a nearby object. " +
-        "(objectId=string, " +
-        "lateral=int(default:0), " +
-        "straight=int(default:1), " +
-        "objectImageCoordsX=float, " +
+        "Apply a movement of 0.1 meters to a nearby object. "
+        "(objectId=string, "
+        "lateral=int(default:0), "
+        "straight=int(default:1), "
+        "objectImageCoordsX=float, "
         "objectImageCoordsY=float)"
     )
     """
@@ -649,8 +649,8 @@ class Action(Enum):
     END_HABITUATION = (
         "EndHabituation",
         "h",
-        "Ends a habituation trial for the scene by blanking the screen " +
-        "for one action (and teleporting the agent if needed). Sometimes" +
+        "Ends a habituation trial for the scene by blanking the screen "
+        "for one action (and teleporting the agent if needed). Sometimes"
         " needed depending on the task type."
     )
     """
@@ -717,11 +717,9 @@ def __new__(cls, action, key, desc):
         return obj
 
     def __repr__(self):
-        return '<%s.%s: %s>' % (
-            self.__class__.__name__,
-            self._name_,
-            ', '.join([self._value_, self._key, self._desc])
-        )
+        return (
+            f"<{self.__class__.__name__}.{self._name_}: "
+            f"{', '.join([self._value_, self._key, self._desc])}>")
 
     @property
     def key(self):
diff --git a/machine_common_sense/controller.py b/machine_common_sense/controller.py
index 9c7015c8e..b8e89745c 100644
--- a/machine_common_sense/controller.py
+++ b/machine_common_sense/controller.py
@@ -174,7 +174,7 @@ def start_scene(
                               scene_config.goal.skip_preview_phase)
 
         if (not self._scene_config.name):
-            raise Exception('The `name` field in the scene ' +
+            raise Exception('The `name` field in the scene '
                             'file cannot be empty.')
 
         if (self._config.is_file_writing_enabled()):
@@ -514,7 +514,7 @@ def _publish_event(self, event_type: EventType,
                 subscriber.on_event(event_type, payload)
             except Exception as msg:
                 logger.error(
-                    f"Error in event with type={event_type}" +
+                    f"Error in event with type={event_type}"
                     f" to subscriber={type(subscriber)}",
                     exc_info=msg)
 
diff --git a/machine_common_sense/controller_output_handler.py b/machine_common_sense/controller_output_handler.py
index b845a1b57..a9dcff6f1 100644
--- a/machine_common_sense/controller_output_handler.py
+++ b/machine_common_sense/controller_output_handler.py
@@ -87,6 +87,14 @@ def clipping_plane_far(self):
     def haptic_feedback(self):
         return self._raw_output.metadata.get('hapticFeedback')
 
+    @property
+    def resolved_object(self):
+        return self._raw_output.metadata.get('resolvedObject', '')
+
+    @property
+    def resolved_receptacle(self):
+        return self._raw_output.metadata.get('resolvedReceptacle', '')
+
     @property
     def steps_on_lava(self):
         return self._raw_output.metadata.get('stepsOnLava')
@@ -300,6 +308,12 @@ def _get_step_metadata(self, goal, habituation_trial,
                 self._config.get_lava_penalty(),
                 self._config.get_step_penalty(),
                 self._config.get_goal_reward()),
+            resolved_object=(
+                None if restrict_non_oracle
+                else self._scene_event.resolved_object),
+            resolved_receptacle=(
+                None if restrict_non_oracle
+                else self._scene_event.resolved_receptacle),
             rotation=(
                 None if restrict_non_oracle else self._scene_event.rotation),
             step_number=self._step_number,
diff --git a/machine_common_sense/history_writer.py b/machine_common_sense/history_writer.py
index 26e38a72b..c8068a18c 100644
--- a/machine_common_sense/history_writer.py
+++ b/machine_common_sense/history_writer.py
@@ -143,23 +143,45 @@ def write_file(self):
                         self.history_obj,
                         cls=NumpyEncoder))
 
-    def filter_history_output(
+    def update_history_output(
             self,
             history: SceneHistory) -> SceneHistory:
         """ filter out images from the step history data and
-            object lists and action list """
+            object lists and action list, incorporate
+            additional target info if needed """
         if history.output:
             history.output.action_list = None
-            history.output.object_list = None
             history.output.structural_object_list = None
-            targets = ['target', 'target_1', 'target2']
+            targets = ['target', 'target_1', 'target_2']
             for target in targets:
+
                 if (
                     target in history.output.goal.metadata.keys() and
                     history.output.goal.metadata[target].get('image', None)
                     is not None
                 ):
                     del history.output.goal.metadata[target]['image']
+                if (
+                    target in history.output.goal.metadata.keys() and
+                    history.output.goal.metadata[target].get('id', None)
+                    is not None
+                ):
+                    # Save target position at each step for history file/
+                    # scorecard purposes (accounts for tasks where the
+                    # target position changes)
+                    target_id = history.output.goal.metadata[target].get('id',
+                                                                         None)
+
+                    target_info = next(
+                        (obj for obj in history.output.object_list
+                         if obj.uuid == target_id), None)
+
+                    if target_info:
+                        history.output.goal.metadata[target][
+                            "position"
+                        ] = target_info.position
+
+            history.output.object_list = None
         return history
 
     def init_timer(self):
@@ -179,7 +201,7 @@ def add_step(self, step_obj: SceneHistory):
                     step_obj)
             logger.debug("Adding history step")
             self.current_steps.append(
-                dict(self.filter_history_output(step_obj)))
+                dict(self.update_history_output(step_obj)))
 
     def is_target_visible(
             self,
diff --git a/machine_common_sense/logging_config.py b/machine_common_sense/logging_config.py
index 4dcc9c0d6..0acc74c88 100644
--- a/machine_common_sense/logging_config.py
+++ b/machine_common_sense/logging_config.py
@@ -180,7 +180,7 @@ def get_configurable_logging_config(
             handlers['console'] = {
                 "class": "logging.StreamHandler",
                 "formatter": console_format,
-                "level": "DEBUG",
+                "level": log_level,
                 "stream": "ext://sys.stdout"
             }
         if debug_file:
@@ -232,7 +232,7 @@ def get_configurable_logging_config(
                     "format": "%(asctime)s <%(levelname)s>: %(message)s"
                 },
                 "full": {
-                    "format": "[%(name)s] %(asctime)s <%(levelname)s>: " +
+                    "format": "[%(name)s] %(asctime)s <%(levelname)s>: "
                     "%(message)s"
                 }
             }
diff --git a/machine_common_sense/scripts/run_human_input.py b/machine_common_sense/scripts/run_human_input.py
index 16e52ec58..88931a9bb 100644
--- a/machine_common_sense/scripts/run_human_input.py
+++ b/machine_common_sense/scripts/run_human_input.py
@@ -33,8 +33,8 @@ def parse_args():
         type=str,
         default=None,
         required=True,
-        help='Path to configuration file to read in and set various ' +
-        'properties, such as metadata level and whether or not to ' +
+        help='Path to configuration file to read in and set various '
+        'properties, such as metadata level and whether or not to '
         'save history files properties.')
     return parser.parse_args()
 
diff --git a/machine_common_sense/scripts/run_init_scenes.py b/machine_common_sense/scripts/run_init_scenes.py
index 415191036..7dba9c1f7 100644
--- a/machine_common_sense/scripts/run_init_scenes.py
+++ b/machine_common_sense/scripts/run_init_scenes.py
@@ -38,7 +38,7 @@ def main():
         output = controller.start_scene(scene_data)
 
         print(
-            'Saving initialization output (scene image and metadata) of ' +
+            'Saving initialization output (scene image and metadata) of '
             'JSON scene config file ' + scene_data['name'])
 
         with open(output_folder + scene_data['name'] +
diff --git a/machine_common_sense/step_metadata.py b/machine_common_sense/step_metadata.py
index 83d39143d..53b67c724 100644
--- a/machine_common_sense/step_metadata.py
+++ b/machine_common_sense/step_metadata.py
@@ -107,6 +107,10 @@ class StepMetadata:
         The "x", "y", and "z" coordinates for your global position.
         Will be set to 'None' if using a metadata level below the
         'oracle' level.
+    resolved_object : string
+        The object that was selected based on objectImageCoords
+    resolved_receptacle_object_id : string
+        The receptacle that was selected based on receptacleObjectImageCoords
     return_status : string
         The return status from your last action. See
         :mod:`Action <machine_common_sense.Action>`.
@@ -154,6 +158,8 @@ def __init__(
         performer_reach=0.0,
         physics_frames_per_second=0,
         position=None,
+        resolved_object='',
+        resolved_receptacle='',
         return_status=ReturnStatus.UNDEFINED.value,
         reward=0,
         rotation=0.0,
@@ -191,6 +197,8 @@ def __init__(
         self.performer_reach = performer_reach
         self.physics_frames_per_second = physics_frames_per_second
         self.position = {} if position is None else position
+        self.resolved_object = resolved_object
+        self.resolved_receptacle = resolved_receptacle
         self.return_status = return_status
         self.reward = reward
         self.rotation = rotation
@@ -237,6 +245,8 @@ def __iter__(self):
         yield 'performer_reach', self.performer_reach
         yield 'physics_frames_per_second', self.physics_frames_per_second
         yield 'position', self.position
+        yield 'resolved_object', self.resolved_object
+        yield 'resolved_receptacle', self.resolved_receptacle
         yield 'return_status', self.return_status
         yield 'reward', self.reward
         yield 'rotation', self.rotation
diff --git a/machine_common_sense/unity_executable_provider.py b/machine_common_sense/unity_executable_provider.py
index 0c014b00a..9b42115c9 100644
--- a/machine_common_sense/unity_executable_provider.py
+++ b/machine_common_sense/unity_executable_provider.py
@@ -51,8 +51,9 @@ def _linux_init(self):
 
     def _other_init(self):
         raise Exception(
-            "Ai2thorProvider only supports Linux and Mac.  Platform={}".format(
-                platform.system()))
+            "Ai2thorProvider only supports Linux and Mac. "
+            f"Platform={platform.system()}"
+        )
 
     def clear_cache(self, version=None):
         '''clears the entire cache if no version is passed in, otherwise
@@ -71,7 +72,7 @@ def get_executable(self, version=None,
             version = __version__
         if version in ["dev", "development", "develop"]:
             logger.warn(
-                "Warning: Attempting to use development version of " +
+                "Warning: Attempting to use development version of "
                 "MCS-AI2Thor.  This is intended for developers only.")
             version = "develop"
             url = self._downloader.get_url(version)
diff --git a/requirements.txt b/requirements.txt
index 0177fadb2..1d974b315 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,6 +3,8 @@ autopep8==1.5.4
 colour==0.1.5
 commonmark==0.9.1
 flake8==3.9.1
+flake8-implicit-str-concat==0.2.0
+flake8-use-fstring==1.3
 isort==5.8.0
 marshmallow==3.12.1
 matplotlib==3.3.3
diff --git a/scripts/README.md b/scripts/README.md
deleted file mode 100644
index 7015c5f3a..000000000
--- a/scripts/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Developer Scripts
-
-## Run Scripts
-
-The following Python scripts use subclasses of RunnerScript from [`runner_script.py`](./runner_script.py) to run one or more MCS scenes sequentially. Use `--help` on any script to see a full list of command line options.
-
-### Single File
-
-Runs a single given scene file.
-
-- [`run_action_file.py`](./run_action_file.py`) Runs a scene using a given action file, which is a text file containing one or more lines, each line with an MCS action and parameters (like `Pass` or `PickupObject,objectId=ball`).
-- [`run_just_pass.py`](./run_just_pass.py) Just uses the Pass action until the scene's last step. Useful for passive scenes that only require passing.
-- [`run_just_rotate.py`](./run_just_rotate.py) Just uses a Rotate action 36 times to spin around in a circle. Useful for interactive scenes.
-- [`run_last_action.py`](./run_last_action.py) Runs the last action (element) from the scene's action list (array) that's returned on each step. Useful for passive scenes that require specific actions run on specific steps (like passive agent scenes that require EndHabituation actions on some steps).
-
-Example:
-
-```
-python run_just_pass.py --mcs_unity_build_file <path_to_unity_build> <path_to_json_scene>
-```
-
-### Multiple File
-
-Runs all of the `_debug.json` files found using a given file prefix. For example, if the given file prefix is `./folder/file_`, and `folder/` contains `file_1.json`, `file_1_debug.json`, `file_2.json`, and `file_2_debug.json`, then the script will run `file_1_debug.json` and `file_2_debug.json`.
-
-- [`run_interactive_scenes.py`](./run_interactive_scenes.py) Just uses a Rotate action 36 times to spin around in a circle for each given scene.
-- [`run_passive_scenes.py`](./run_passive_scenes.py) Runs the last action (element) from the scene's action list (array) that's returned on each step.
-- [`run_reorientation_scenes.py`](./run_reorientation_scenes.py) Runs specific actions for reorientation scenes.
-
-Example:
-
-```
-python run_passive_scenes.py --mcs_unity_build_file <path_to_unity_build> <prefix_to_json_scene>
-```
-
-#### Generating Example Hypercube Videos
-
-Use the following command line options:
-
-- `--debug` Saves output images of each action/frame/step to file.
-- `--save-videos` Creates a video from all the output images after running each scene.
-- `--prefix <prefix>` Uses the given prefix with each scene's name as the name for all the output files.
-- `--rename <name>` Ignores each scene's original name and uses the given name with each scene's ID (if available) as the name for all the output files.
-
-Example:
-
-```
-python run_passive_scenes.py --mcs_unity_build_file <path_to_unity_build> <prefix_to_json_scene> --debug --save-videos --rename EX_1
-```
-
diff --git a/scripts/compile_passive_scene_ground_truth.py b/scripts/compile_passive_scene_ground_truth.py
deleted file mode 100644
index a29b12f2e..000000000
--- a/scripts/compile_passive_scene_ground_truth.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python3
-
-import argparse
-import glob
-import json
-
-
-def main(args):
-    filename_list = glob.glob(f"{args.folder}*_debug.json")
-    filename_list.sort()
-    data = {}
-    for filename in filename_list:
-        scene_data = None
-        with open(filename, encoding='utf-8-sig') as json_file:
-            scene_data = json.load(json_file)
-        if not scene_data:
-            print(f'Cannot load JSON file as an MCS scene: {filename}')
-            continue
-        data[scene_data['name']] = scene_data['goal']['answer']['choice']
-    with open(args.output, 'w') as output_file:
-        for name, answer in data.items():
-            output_file.write(f'{name},{answer}\n')
-
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser(
-        description='Compile passive scene ground truth data into a CSV file'
-    )
-    parser.add_argument('folder', help='Passive scene folder prefix')
-    parser.add_argument('output', help='Output file (please end with .csv)')
-    args = parser.parse_args()
-    main(args)
diff --git a/scripts/create_intuitive_physics_frames.py b/scripts/create_intuitive_physics_frames.py
deleted file mode 100644
index 9bee19234..000000000
--- a/scripts/create_intuitive_physics_frames.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import glob
-import os
-import subprocess
-import sys
-
-if len(sys.argv) < 3:
-    print('Usage: python create_intuitive_physics_frames.py <folder_prefix> '
-          '<eval_number> <move_across>')
-    sys.exit()
-
-
-def run():
-    folder_prefix = sys.argv[1]
-    eval_number = sys.argv[2]
-    move_across = len(sys.argv) > 3
-    folder_list = glob.glob(f"{folder_prefix}*")
-    folder_list = sorted([
-        folder for folder in folder_list if os.path.isdir(folder)
-    ])
-
-    file_list = []
-
-    frame_1 = '0' if move_across else '32'
-    frame_2 = '40' if move_across else '60'
-    for folder in folder_list:
-        file_list.append(f"{folder}/frame_image_{frame_1}.png")
-        file_list.append(f"{folder}/frame_image_{frame_2}.png")
-
-    zip_prefix = (
-        f"eval_{eval_number}_{folder_prefix}frames_{frame_1}_{frame_2}"
-    )
-    print('Making ZIP of frame image files')
-    subprocess.call(['zip', f"{zip_prefix}.zip"] + file_list)
-
-
-if __name__ == "__main__":
-    run()
diff --git a/scripts/generate_passive_quartet_videos.py b/scripts/generate_passive_quartet_videos.py
deleted file mode 100644
index 23d095030..000000000
--- a/scripts/generate_passive_quartet_videos.py
+++ /dev/null
@@ -1,102 +0,0 @@
-import argparse
-import os
-import pathlib
-import shutil
-import subprocess
-from typing import List
-
-import machine_common_sense as mcs
-
-
-def parse_args():
-    parser = argparse.ArgumentParser()
-    parser.add_argument('-i',
-                        '--input',
-                        required=True,
-                        help="Input directory path")
-    parser.add_argument('-o',
-                        '--output',
-                        required=True,
-                        help="Output directory")
-    parser.add_argument('-e',
-                        '--engine',
-                        required=True,
-                        help="Path to Unity runtime")
-    return parser.parse_args()
-
-
-def run_scene(controller, file_name: str) -> None:
-    '''Run the passive physics scene to generate the image frames'''
-    scene_data = mcs.load_scene_json_file(file_name)
-
-    scene_file_path = file_name
-    scene_file_name = scene_file_path[scene_file_path.rfind('/') + 1:]
-
-    if 'name' not in scene_data.keys():
-        scene_data['name'] = scene_file_name[0:scene_file_name.find('.')]
-
-    last_step = 30
-    if (
-        'goal' in scene_data.keys(
-        ) and 'last_step' in scene_data['goal'].keys()
-    ):
-        last_step = scene_data['goal']['last_step']
-
-    output = controller.start_scene(scene_data)
-
-    for _ in range(output.step_number + 1, last_step + 1):
-        action = output.action_list[len(output.action_list) - 1]
-        output = controller.step(action)
-
-
-def list_quartets(input_dir: str) -> List:
-    '''From the input directory, list the non-debug quartet files'''
-    files = list(sorted(pathlib.Path(input_dir).glob('*[!debug].json')))
-    num_files = len(files)
-    if num_files % 4 != 0:
-        raise ValueError('Number of scene files is not a multiple of 4')
-    return [files[x:x + 4] for x in range(0, num_files, 4)]
-
-
-def cleanup(quartet: List) -> None:
-    '''Remove quartet directories and images'''
-    for q in quartet:
-        shutil.rmtree(str(q.stem), ignore_errors=True)
-
-
-def main():
-    args = parse_args()
-    quartets = list_quartets(args.input)
-    output_dir = pathlib.Path(args.output)
-    controller = mcs.create_controller(config_file_or_dict={},
-                                       unity_app_file_path=args.engine)
-
-    # object_permanence, shape_constancy, spatio_temporal_continuity -
-    # {0001 - 0100} - {1 - 4}
-    for quartet in quartets:
-        for q in quartet:
-            run_scene(controller, str(q))
-
-        basename = str(quartet[0].stem[:-2])
-        # make a system call to ffmpeg to make the quad video
-        try:
-            # yapf: disable
-            subprocess.run(['ffmpeg',
-                            '-y',
-                            '-i', f'{str(quartet[0].stem)}/frame_image_%d.png',
-                            '-i', f'{str(quartet[1].stem)}/frame_image_%d.png',
-                            '-i', f'{str(quartet[2].stem)}/frame_image_%d.png',
-                            '-i', f'{str(quartet[3].stem)}/frame_image_%d.png',
-                            '-filter_complex', 'nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240',  # noqa: E501
-                            '-c:v', 'libx264', output_dir / f'{basename}.mp4'
-                            ])
-            # yapf: enable
-        except OSError as e:
-            if e.errno == os.errno.ENOENT:
-                raise OSError('ffmpeg command missing')
-
-        cleanup(quartet)
-
-
-if __name__ == "__main__":
-    main()
diff --git a/scripts/generate_sphinx_docs.sh b/scripts/generate_sphinx_docs.sh
deleted file mode 100755
index ac96991e1..000000000
--- a/scripts/generate_sphinx_docs.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-echo "calling python generate"
-venv/bin/python scripts/generate_sphinx_docs.py
-status=$?
-echo $status
-if [ $status -eq 1 ]
-then
-    exit $status
-elif [ $status -eq 2 ]
-then
-    exit 0
-fi
-echo "moving to docs"
-cd docs/
-echo "calling make"
-make html
-echo "Finished update to Python API sphinx html documentation."
-# echo "moving to API"
-# cp _build/markdown/index.md ../machine_common_sense/API.md
-# git add ../machine_common_sense/API.md
-# echo "Finished update to Python API sphinx markdown documentation."


Test patch:
diff --git a/integration_tests/data/050.drop_tall_object.oracle.outputs.json b/integration_tests/data/050.drop_tall_object.oracle.outputs.json
index bfe2adf41..ebe752126 100644
--- a/integration_tests/data/050.drop_tall_object.oracle.outputs.json
+++ b/integration_tests/data/050.drop_tall_object.oracle.outputs.json
@@ -249,7 +249,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.01],
         "return_status": "SUCCESSFUL",
         "rotation_y": 80,
         "step_number": 10,
@@ -271,8 +271,8 @@
             }
         ],
         "objects_count": 2,
-        "position_x": 0.0,
-        "position_z": 0.0,
+        "position_x": 0,
+        "position_z": [0.0, -0.01],
         "return_status": "SUCCESSFUL",
         "rotation_y": 90,
         "step_number": 11,
@@ -295,7 +295,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.01],
         "return_status": "SUCCESSFUL",
         "rotation_y": 100,
         "step_number": 12,
@@ -318,7 +318,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.01],
         "return_status": "SUCCESSFUL",
         "rotation_y": 110,
         "step_number": 13,
@@ -341,7 +341,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.01],
         "return_status": "SUCCESSFUL",
         "rotation_y": 120,
         "step_number": 14,
@@ -363,8 +363,8 @@
             }
         ],
         "objects_count": 2,
-        "position_x": 0.0,
-        "position_z": 0.0,
+        "position_x": 0,
+        "position_z": [0.0, -0.03],
         "return_status": "SUCCESSFUL",
         "rotation_y": 130,
         "step_number": 15,
@@ -387,7 +387,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.03],
         "return_status": "SUCCESSFUL",
         "rotation_y": 140,
         "step_number": 16,
@@ -410,7 +410,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.03],
         "return_status": "SUCCESSFUL",
         "rotation_y": 140,
         "step_number": 17,
@@ -433,7 +433,7 @@
         ],
         "objects_count": 2,
         "position_x": 0.0,
-        "position_z": 0.0,
+        "position_z": [0.0, -0.03],
         "return_status": "SUCCESSFUL",
         "rotation_y": 140,
         "step_number": 18,
diff --git a/integration_tests/data/069.intuitive_physics_scene_start.actions.txt b/integration_tests/data/069.intuitive_physics_scene_start.actions.txt
index bb51421a9..e2c4cdfbc 100644
--- a/integration_tests/data/069.intuitive_physics_scene_start.actions.txt
+++ b/integration_tests/data/069.intuitive_physics_scene_start.actions.txt
@@ -1,1 +1,11 @@
 ﻿Pass
+Pass
+Pass
+Pass
+Pass
+Pass
+Pass
+Pass
+Pass
+Pass
+Pass
diff --git a/integration_tests/data/069.intuitive_physics_scene_start.level1.outputs.json b/integration_tests/data/069.intuitive_physics_scene_start.level1.outputs.json
index 92164d3be..807c25876 100644
--- a/integration_tests/data/069.intuitive_physics_scene_start.level1.outputs.json
+++ b/integration_tests/data/069.intuitive_physics_scene_start.level1.outputs.json
@@ -16,4 +16,94 @@
     "rotation_y": null,
     "objects_count": 0,
     "structural_objects_count": 0
+}, {
+    "step_number": 2,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 3,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 4,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 5,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 6,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 7,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 8,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 9,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 10,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 11,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
 }]
diff --git a/integration_tests/data/069.intuitive_physics_scene_start.level2.outputs.json b/integration_tests/data/069.intuitive_physics_scene_start.level2.outputs.json
index 92164d3be..807c25876 100644
--- a/integration_tests/data/069.intuitive_physics_scene_start.level2.outputs.json
+++ b/integration_tests/data/069.intuitive_physics_scene_start.level2.outputs.json
@@ -16,4 +16,94 @@
     "rotation_y": null,
     "objects_count": 0,
     "structural_objects_count": 0
+}, {
+    "step_number": 2,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 3,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 4,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 5,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 6,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 7,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 8,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 9,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 10,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
+}, {
+    "step_number": 11,
+    "head_tilt": 0,
+    "position_x": null,
+    "position_z": null,
+    "return_status": "SUCCESSFUL",
+    "rotation_y": null,
+    "objects_count": 0,
+    "structural_objects_count": 0
 }]
diff --git a/integration_tests/data/069.intuitive_physics_scene_start.oracle.outputs.json b/integration_tests/data/069.intuitive_physics_scene_start.oracle.outputs.json
index ce3c98a50..6b6425a89 100644
--- a/integration_tests/data/069.intuitive_physics_scene_start.oracle.outputs.json
+++ b/integration_tests/data/069.intuitive_physics_scene_start.oracle.outputs.json
@@ -12,12 +12,1024 @@
         "structural_objects": [
             {
                 "direction_x": 0.0,
-                "direction_y": 1.0,
-                "direction_z": 0.0,
-                "distance": 2.488,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.34050261974334717,
+                "direction_z": 0.9363821744918823,
+                "distance": 5.8736701011657715,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 1,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.37007471919059753,
+                "direction_z": 0.9251867532730103,
+                "distance": 5.9447455406188965,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.03619058057665825,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 2,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.39856332540512085,
+                "direction_z": 0.9133742451667786,
+                "distance": 6.021627902984619,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.07223937660455704,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 3,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.43,
+                "direction_z": 0.9,
+                "distance": 6.1,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.11,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 4,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.45,
+                "direction_z": 0.89,
+                "distance": 6.19,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.14,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 5,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.08,
+                "direction_y": 0.48,
+                "direction_z": 0.88,
+                "distance": 6.28,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.18,
+                "direction_z": 0.98,
+                "distance": 5.61,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 6,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.45,
+                "direction_z": 0.89,
+                "distance": 6.19,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.14,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 7,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
+                "held": false,
+                "id": "wall_front",
+                "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.43,
+                "direction_z": 0.9,
+                "distance": 6.1,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.11,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 8,
+        "structural_objects": [
+            {
+                "direction_x": 0.0,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
                 "held": false,
-                "id": "ceiling",
+                "id": "wall_front",
                 "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
                 "position_z": 0.0,
                 "shape": "structural",
                 "texture_color_list": [
@@ -25,6 +1037,50 @@
                 ],
                 "visible": true
             },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.39856332540512085,
+                "direction_z": 0.9133742451667786,
+                "distance": 6.021627902984619,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.07223937660455704,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 9,
+        "structural_objects": [
             {
                 "direction_x": 0.0,
                 "direction_y": -0.36,
@@ -99,9 +1155,39 @@
                     "white"
                 ],
                 "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.37,
+                "direction_z": 0.93,
+                "distance": 5.94,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.04,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
             }
         ],
-        "structural_objects_count": 5
+        "structural_objects_count": 7
     },
     {
         "camera_height": 1.5,
@@ -112,16 +1198,76 @@
         "position_z": -4.5,
         "return_status": "SUCCESSFUL",
         "rotation_y": 0.0,
-        "step_number": 1,
+        "step_number": 10,
         "structural_objects": [
             {
                 "direction_x": 0.0,
-                "direction_y": 1.0,
-                "direction_z": 0.0,
-                "distance": 2.488,
+                "direction_y": -0.36,
+                "direction_z": 0.93,
+                "distance": 4.83,
+                "held": false,
+                "id": "floor",
+                "position_x": 0.0,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.0,
+                "direction_z": -1.0,
+                "distance": 0.75,
+                "held": false,
+                "id": "wall_back",
+                "position_x": 0.0,
+                "position_z": -5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.0,
+                "direction_y": 0.15,
+                "direction_z": 0.99,
+                "distance": 9.86,
                 "held": false,
-                "id": "ceiling",
+                "id": "wall_front",
                 "position_x": 0.0,
+                "position_z": 5.25,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": -0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_left",
+                "position_x": -7.5,
+                "position_z": 0.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.854,
+                "direction_y": 0.0,
+                "direction_z": 0.513,
+                "distance": 8.778,
+                "held": false,
+                "id": "wall_right",
+                "position_x": 7.5,
                 "position_z": 0.0,
                 "shape": "structural",
                 "texture_color_list": [
@@ -129,6 +1275,50 @@
                 ],
                 "visible": true
             },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.34,
+                "direction_z": 0.94,
+                "distance": 5.87,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.0,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
+            }
+        ],
+        "structural_objects_count": 7
+    },
+    {
+        "camera_height": 1.5,
+        "head_tilt": 0,
+        "objects_count": 0,
+        "position_x": 0.0,
+        "position_y": 1.5,
+        "position_z": -4.5,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 11,
+        "structural_objects": [
             {
                 "direction_x": 0.0,
                 "direction_y": -0.36,
@@ -203,8 +1393,38 @@
                     "white"
                 ],
                 "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.34,
+                "direction_z": 0.94,
+                "distance": 5.87,
+                "held": false,
+                "id": "occluder_pole",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "white"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0.09053575247526169,
+                "direction_y": 0.0,
+                "direction_z": 0.993752658367157,
+                "distance": 5.534576416015625,
+                "held": false,
+                "id": "occluder_wall",
+                "position_x": 0.5,
+                "position_z": 1.0,
+                "shape": "structural",
+                "texture_color_list": [
+                    "orange"
+                ],
+                "visible": true
             }
         ],
-        "structural_objects_count": 5
+        "structural_objects_count": 7
     }
 ]
\ No newline at end of file
diff --git a/integration_tests/data/069.intuitive_physics_scene_start.scene.json b/integration_tests/data/069.intuitive_physics_scene_start.scene.json
index eb6cbc51e..054002b94 100644
--- a/integration_tests/data/069.intuitive_physics_scene_start.scene.json
+++ b/integration_tests/data/069.intuitive_physics_scene_start.scene.json
@@ -15,5 +15,102 @@
             "y": 0
         }
     },
-    "objects": []
+    "objects": [
+        {
+            "id": "occluder_wall",
+            "type": "cube",
+            "kinematic": true,
+            "structure": true,
+            "mass": 100,
+            "materials": ["Custom/Materials/OrangeDrywallMCS"],
+            "shows": [
+              {
+                "stepBegin": 0,
+                "position": {
+                  "x": 0.5,
+                  "y": 1.5,
+                  "z": 1
+                },
+                "rotation": {
+                  "x": 0,
+                  "y": 0,
+                  "z": 0
+                },
+                "scale": {
+                  "x": 2.3248018464562668,
+                  "y": 3,
+                  "z": 0.1
+                }
+              }
+            ],
+            "moves": [
+              {
+                "stepBegin": 1,
+                "stepEnd": 5,
+                "vector": {
+                  "x": 0,
+                  "y": 0.20,
+                  "z": 0
+                }
+              },
+              {
+                "stepBegin": 6,
+                "stepEnd": 10,
+                "vector": {
+                  "x": 0,
+                  "y": -0.20,
+                  "z": 0
+                }
+              }
+            ]
+          },
+          {
+            "id": "occluder_pole",
+            "type": "cylinder",
+            "kinematic": true,
+            "structure": true,
+            "mass": 100,
+            "materials": ["AI2-THOR/Materials/Metals/WhiteMetal"],
+            "shows": [
+              {
+                "stepBegin": 0,
+                "position": {
+                  "x": 0.5,
+                  "y": 3.5,
+                  "z": 1
+                },
+                "rotation": {
+                  "x": 0,
+                  "y": 0,
+                  "z": 0
+                },
+                "scale": {
+                  "x": 0.095,
+                  "y": 0.5,
+                  "z": 0.095
+                }
+              }
+            ],
+            "moves": [
+              {
+                "stepBegin": 1,
+                "stepEnd": 5,
+                "vector": {
+                  "x": 0,
+                  "y": 0.20,
+                  "z": 0
+                }
+              },
+              {
+                "stepBegin": 6,
+                "stepEnd": 10,
+                "vector": {
+                  "x": 0,
+                  "y": -0.20,
+                  "z": 0
+                }
+              }
+            ]
+          }
+    ]
 }
diff --git a/integration_tests/data/095.torque_object.oracle.outputs.json b/integration_tests/data/095.torque_object.oracle.outputs.json
index d7ef66091..f0227df02 100644
--- a/integration_tests/data/095.torque_object.oracle.outputs.json
+++ b/integration_tests/data/095.torque_object.oracle.outputs.json
@@ -29,7 +29,7 @@
                 "position_x": 0.0,
                 "position_z": 1.004,
                 "rotation_x": 0,
-                "rotation_y": 215,
+                "rotation_y": 220,
                 "visible": true
             }
         ],
@@ -48,7 +48,7 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": 0.0,
-                "position_z": 1.011,
+                "position_z": 1.0,
                 "rotation_x": 0,
                 "rotation_y": 331,
                 "visible": true
@@ -69,9 +69,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": 0.0,
-                "position_z": 1.018,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 68,
+                "rotation_y": 69,
                 "visible": true
             }
         ],
@@ -90,7 +90,7 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": 0.0,
-                "position_z": 1.023,
+                "position_z": 1.0,
                 "rotation_x": 0,
                 "rotation_y": 148,
                 "visible": true
@@ -110,10 +110,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": -0.01,
-                "position_z": 1.028,
+                "position_x": 0.0,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 213,
+                "rotation_y": 210,
                 "visible": true
             }
         ],
@@ -132,9 +132,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": -0.0,
-                "position_z": 1.02,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 263,
+                "rotation_y": 257,
                 "visible": true
             }
         ],
@@ -153,9 +153,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": 0.01,
-                "position_z": 1.02,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 300,
+                "rotation_y": 288,
                 "visible": true
             }
         ],
@@ -173,10 +173,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.02,
-                "position_z": 1.02,
+                "position_x": 0.0,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 323,
+                "rotation_y": 305,
                 "visible": true
             }
         ],
@@ -194,10 +194,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.02,
+                "position_x": -0.0,
                 "position_z": 1.01,
                 "rotation_x": 0,
-                "rotation_y": 333,
+                "rotation_y": 309,
                 "visible": true
             }
         ],
@@ -215,10 +215,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.03,
+                "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 334,
+                "rotation_y": 309,
                 "visible": true
             }
         ],
@@ -236,10 +236,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.03,
+                "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 209,
+                "rotation_y": 176,
                 "visible": true
             }
         ],
@@ -257,10 +257,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.03,
+                "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 91,
+                "rotation_y": 60,
                 "visible": true
             }
         ],
@@ -278,10 +278,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.03,
+                "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 352,
+                "rotation_y": 321,
                 "visible": true
             }
         ],
@@ -299,10 +299,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.03,
+                "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 270,
+                "rotation_y": 239,
                 "visible": true
             }
         ],
@@ -320,10 +320,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.04,
+                "position_x": 0.0,
                 "position_z": 1.01,
                 "rotation_x": 0,
-                "rotation_y": 204,
+                "rotation_y": 174,
                 "visible": true
             }
         ],
@@ -341,10 +341,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.03,
+                "position_x": 0.0,
                 "position_z": 1.01,
                 "rotation_x": 0,
-                "rotation_y": 153,
+                "rotation_y": 125,
                 "visible": true
             }
         ],
@@ -362,10 +362,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.02,
-                "position_z": 1.01,
+                "position_x": 0.0,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 115,
+                "rotation_y": 90,
                 "visible": true
             }
         ],
@@ -384,9 +384,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": 0.01,
-                "position_z": 1.01,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 91,
+                "rotation_y": 71,
                 "visible": true
             }
         ],
@@ -404,10 +404,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.01,
-                "position_z": 1.01,
+                "position_x": -0.0,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 81,
+                "rotation_y": 67,
                 "visible": true
             }
         ],
@@ -428,7 +428,7 @@
                 "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 79,
+                "rotation_y": 67,
                 "visible": true
             }
         ],
@@ -449,7 +449,7 @@
                 "position_x": 0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 204,
+                "rotation_y": 200,
                 "visible": true
             }
         ],
@@ -470,7 +470,7 @@
                 "position_x": -0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 323,
+                "rotation_y": 315,
                 "visible": true
             }
         ],
@@ -489,9 +489,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": -0.0,
-                "position_z": 1.01,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 63,
+                "rotation_y": 54,
                 "visible": true
             }
         ],
@@ -510,9 +510,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": -0.0,
-                "position_z": 1.01,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 145,
+                "rotation_y": 135,
                 "visible": true
             }
         ],
@@ -531,9 +531,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": -0.0,
-                "position_z": 1.01,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 212,
+                "rotation_y": 200,
                 "visible": true
             }
         ],
@@ -552,9 +552,9 @@
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
                 "position_x": 0.0,
-                "position_z": 1.01,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 262,
+                "rotation_y": 250,
                 "visible": true
             }
         ],
@@ -572,10 +572,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.01,
-                "position_z": 1.01,
+                "position_x": -0.0,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 299,
+                "rotation_y": 283,
                 "visible": true
             }
         ],
@@ -593,10 +593,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.01,
-                "position_z": 1.01,
+                "position_x": -0.0,
+                "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 322,
+                "rotation_y": 302,
                 "visible": true
             }
         ],
@@ -614,10 +614,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.02,
+                "position_x": -0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 331,
+                "rotation_y": 308,
                 "visible": true
             }
         ],
@@ -635,10 +635,10 @@
             {
                 "id": "turtle_on_wheels",
                 "mass": 1.5,
-                "position_x": 0.02,
+                "position_x": -0.0,
                 "position_z": 1.0,
                 "rotation_x": 0,
-                "rotation_y": 332,
+                "rotation_y": 308,
                 "visible": true
             }
         ],
@@ -650,4 +650,4 @@
         "step_number": 30,
         "structural_objects_count": 6
     }
-]
+]
\ No newline at end of file
diff --git a/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.actions.txt b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.actions.txt
new file mode 100644
index 000000000..696be0822
--- /dev/null
+++ b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.actions.txt
@@ -0,0 +1,5 @@
+PickupObject,objectImageCoordsX=300,objectImageCoordsY=395
+PutObject,receptacleObjectImageCoordsX=300,receptacleObjectImageCoordsY=200
+OpenObject,objectImageCoordsX=300,objectImageCoordsY=200
+PutObject,receptacleObjectImageCoordsX=300,receptacleObjectImageCoordsY=200
+CloseObject,objectImageCoordsX=300,objectImageCoordsY=200
diff --git a/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.level1.outputs.json b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.level1.outputs.json
new file mode 100644
index 000000000..7683bb394
--- /dev/null
+++ b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.level1.outputs.json
@@ -0,0 +1,74 @@
+﻿[
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 0,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 1,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "OBSTRUCTED",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 2,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 3,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 4,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 5,
+        "structural_objects_count": 0
+    }
+]
\ No newline at end of file
diff --git a/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.level2.outputs.json b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.level2.outputs.json
new file mode 100644
index 000000000..7683bb394
--- /dev/null
+++ b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.level2.outputs.json
@@ -0,0 +1,74 @@
+﻿[
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 0,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 1,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "OBSTRUCTED",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 2,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 3,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 4,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 20,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "return_status": "SUCCESSFUL",
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "rotation_y": null,
+        "step_number": 5,
+        "structural_objects_count": 0
+    }
+]
\ No newline at end of file
diff --git a/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.oracle.outputs.json b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.oracle.outputs.json
new file mode 100644
index 000000000..a0e225ca3
--- /dev/null
+++ b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.oracle.outputs.json
@@ -0,0 +1,314 @@
+﻿[
+    {
+        "head_tilt": 20,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.038,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.8,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0,
+                "direction_y": -0.536,
+                "direction_z": 0.844,
+                "distance": 1.421,
+                "held": false,
+                "id": "testContainer",
+                "mass": 5,
+                "material_list": [
+                    "WOOD"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "chest",
+                "texture_color_list": [
+                    "brown"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 2,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 0,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 20,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.4678877,
+                "direction_z": 0.883788,
+                "distance": 0.384707659,
+                "held": true,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.34,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0,
+                "direction_y": -0.536,
+                "direction_z": 0.844,
+                "distance": 1.421,
+                "held": false,
+                "id": "testContainer",
+                "mass": 5,
+                "material_list": [
+                    "WOOD"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "chest",
+                "texture_color_list": [
+                    "brown"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 2,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testBall",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 1,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 20,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.4678877,
+                "direction_z": 0.883788,
+                "distance": 0.384707659,
+                "held": true,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.34,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0,
+                "direction_y": -0.536,
+                "direction_z": 0.844,
+                "distance": 1.421,
+                "held": false,
+                "id": "testContainer",
+                "mass": 5,
+                "material_list": [
+                    "WOOD"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "chest",
+                "texture_color_list": [
+                    "brown"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 2,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "testContainer",
+        "return_status": "OBSTRUCTED",
+        "rotation_y": 0.0,
+        "step_number": 2,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 20,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.4678877,
+                "direction_z": 0.883788,
+                "distance": 0.384707659,
+                "held": true,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.34,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0,
+                "direction_y": -0.536,
+                "direction_z": 0.844,
+                "distance": 1.421,
+                "held": false,
+                "id": "testContainer",
+                "mass": 5,
+                "material_list": [
+                    "WOOD"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "chest",
+                "texture_color_list": [
+                    "brown"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 2,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testContainer",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 3,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 20,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.442,
+                "direction_z": 0.897,
+                "distance": 1.338,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            },
+            {
+                "direction_x": 0,
+                "direction_y": -0.536,
+                "direction_z": 0.844,
+                "distance": 1.421,
+                "held": false,
+                "id": "testContainer",
+                "mass": 5,
+                "material_list": [
+                    "WOOD"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "chest",
+                "texture_color_list": [
+                    "brown"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 2,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "testContainer",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 4,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 20,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.465,
+                "direction_z": 0.885,
+                "distance": 1.356,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": false
+            },
+            {
+                "direction_x": 0,
+                "direction_y": -0.536,
+                "direction_z": 0.844,
+                "distance": 1.421,
+                "held": false,
+                "id": "testContainer",
+                "mass": 5,
+                "material_list": [
+                    "WOOD"
+                ],
+                "position_x": 0,
+                "position_z": 1.2,
+                "shape": "chest",
+                "texture_color_list": [
+                    "brown"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 2,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testContainer",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 5,
+        "structural_objects_count": 6
+    }
+]
\ No newline at end of file
diff --git a/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.scene.json b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.scene.json
new file mode 100644
index 000000000..47379a7e4
--- /dev/null
+++ b/integration_tests/data/117.pickup_open_put_close_resolved_object_ids.scene.json
@@ -0,0 +1,62 @@
+﻿{
+    "name": "put an object into a container",
+    "version": 2,
+    "ceilingMaterial": "AI2-THOR/Materials/Walls/Drywall",
+    "floorMaterial": "AI2-THOR/Materials/Fabrics/CarpetWhite 3",
+    "wallMaterial": "AI2-THOR/Materials/Walls/Drywall",
+    "performerStart": {
+        "position": {
+            "x": 0,
+            "z": 0
+        },
+        "rotation": {
+            "x": 20,
+            "y": 0
+        }
+    },
+    "objects": [{
+        "id": "testBall",
+        "type": "ball",
+        "mass": 1,
+        "materials": ["AI2-THOR/Materials/Plastics/BlueRubber"],
+        "salientMaterials": ["rubber"],
+        "pickupable": true,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0.1,
+                "z": 0.8
+            },
+            "scale": {
+                "x": 0.2,
+                "y": 0.2,
+                "z": 0.2
+            }
+        }]
+    }, {
+        "id": "testContainer",
+        "type": "chest_1",
+        "mass": 5,
+        "materials": ["AI2-THOR/Materials/Wood/WornWood"],
+        "salientMaterials": ["wood"],
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0,
+                "z": 1.2
+            },
+            "rotation": {
+                "x": 0,
+                "y": 180,
+                "z": 0
+            },
+            "scale": {
+                "x": 1,
+                "y": 1,
+                "z": 1
+            }
+        }]
+    }]
+}
diff --git a/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.actions.txt b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.actions.txt
new file mode 100644
index 000000000..30ab7363d
--- /dev/null
+++ b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.actions.txt
@@ -0,0 +1,8 @@
+TorqueObject,objectImageCoordsX=300,objectImageCoordsY=200
+Pass
+RotateObject,objectImageCoordsX=300,objectImageCoordsY=200
+Pass
+MoveObject,objectImageCoordsX=300,objectImageCoordsY=200,straight=-1
+Pass
+PushObject,objectImageCoordsX=300,objectImageCoordsY=200
+Pass
diff --git a/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.level1.outputs.json b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.level1.outputs.json
new file mode 100644
index 000000000..d11936209
--- /dev/null
+++ b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.level1.outputs.json
@@ -0,0 +1,110 @@
+﻿[
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 0,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 1,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 2,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 3,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 4,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 5,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 6,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 7,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 8,
+        "structural_objects_count": 0
+    }
+]
\ No newline at end of file
diff --git a/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.level2.outputs.json b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.level2.outputs.json
new file mode 100644
index 000000000..d11936209
--- /dev/null
+++ b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.level2.outputs.json
@@ -0,0 +1,110 @@
+﻿[
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 0,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 1,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 2,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 3,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 4,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 5,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 6,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 7,
+        "structural_objects_count": 0
+    },
+    {
+        "head_tilt": 45,
+        "objects_count": 0,
+        "position_x": null,
+        "position_z": null,
+        "resolved_object": null,
+        "resolved_receptacle": null,
+        "return_status": "SUCCESSFUL",
+        "rotation_y": null,
+        "step_number": 8,
+        "structural_objects_count": 0
+    }
+]
\ No newline at end of file
diff --git a/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.oracle.outputs.json b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.oracle.outputs.json
new file mode 100644
index 000000000..3ddefc8f4
--- /dev/null
+++ b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.oracle.outputs.json
@@ -0,0 +1,299 @@
+﻿[
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.038,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.8,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 0,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.038,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.8,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testBall",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 1,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.038,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.8,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 2,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.038,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.8,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testBall",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 3,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.038,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.8,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 4,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.69,
+                "direction_z": 0.73,
+                "distance": 0.96,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.7,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testBall",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 5,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.69,
+                "direction_z": 0.73,
+                "distance": 0.96,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.7,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 6,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.638,
+                "direction_z": 0.77,
+                "distance": 1.05,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.82,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "testBall",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 7,
+        "structural_objects_count": 6
+    },
+    {
+        "head_tilt": 45,
+        "objects": [
+            {
+                "direction_x": 0,
+                "direction_y": -0.58,
+                "direction_z": 0.81,
+                "distance": 1.14,
+                "held": false,
+                "id": "testBall",
+                "mass": 1,
+                "material_list": [
+                    "RUBBER"
+                ],
+                "position_x": 0,
+                "position_z": 0.93,
+                "shape": "ball",
+                "texture_color_list": [
+                    "blue"
+                ],
+                "visible": true
+            }
+        ],
+        "objects_count": 1,
+        "position_x": 0.0,
+        "position_z": 0.0,
+        "resolved_object": "",
+        "resolved_receptacle": "",
+        "return_status": "SUCCESSFUL",
+        "rotation_y": 0.0,
+        "step_number": 8,
+        "structural_objects_count": 6
+    }
+]
\ No newline at end of file
diff --git a/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.scene.json b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.scene.json
new file mode 100644
index 000000000..f1799ef14
--- /dev/null
+++ b/integration_tests/data/118.torque_rotate_move_push_resolved_object_ids.scene.json
@@ -0,0 +1,38 @@
+﻿{
+    "name": "put an object into a container",
+    "version": 2,
+    "ceilingMaterial": "AI2-THOR/Materials/Walls/Drywall",
+    "floorMaterial": "AI2-THOR/Materials/Fabrics/CarpetWhite 3",
+    "wallMaterial": "AI2-THOR/Materials/Walls/Drywall",
+    "performerStart": {
+        "position": {
+            "x": 0,
+            "z": 0
+        },
+        "rotation": {
+            "x": 45,
+            "y": 0
+        }
+    },
+    "objects": [{
+        "id": "testBall",
+        "type": "ball",
+        "mass": 1,
+        "materials": ["AI2-THOR/Materials/Plastics/BlueRubber"],
+        "salientMaterials": ["rubber"],
+        "pickupable": true,
+        "shows": [{
+            "stepBegin": 0,
+            "position": {
+                "x": 0,
+                "y": 0.1,
+                "z": 0.8
+            },
+            "scale": {
+                "x": 0.2,
+                "y": 0.2,
+                "z": 0.2
+            }
+        }]
+    }]
+}
diff --git a/integration_tests/integration_test_utils.py b/integration_tests/integration_test_utils.py
index 7534a05bb..3d668b5ed 100644
--- a/integration_tests/integration_test_utils.py
+++ b/integration_tests/integration_test_utils.py
@@ -54,7 +54,7 @@ def add_test_args(parser: argparse.ArgumentParser,
         type=str,
         default=None,
         help=(
-            'Version of the MCS Unity build and addressables to download ' +
+            'Version of the MCS Unity build and addressables to download '
             '(like "development"). Default: current'
         )
     )
diff --git a/integration_tests/run_handmade_tests.py b/integration_tests/run_handmade_tests.py
index 19129bd64..76c95a3b8 100644
--- a/integration_tests/run_handmade_tests.py
+++ b/integration_tests/run_handmade_tests.py
@@ -50,6 +50,8 @@ def create_step_test_case_list(expected, actual):
         ('position_y', actual.position.get('y') if actual.position else None),
         ('position_z', actual.position.get('z') if actual.position else None),
         ('return_status', actual.return_status),
+        ('resolved_object', actual.resolved_object),
+        ('resolved_receptacle', actual.resolved_receptacle),
         ('reward', actual.reward),
         (
             'rotation_y',
@@ -135,21 +137,18 @@ def validate_single_output(expected, actual):
     # Validate each test case.
     for test_case, expected_data, actual_data in test_case_list:
         failed = (expected_data != actual_data)
-        if (
-            isinstance(expected_data, (int, float, list)) and
-            isinstance(actual_data, (int, float))
-        ):
-            # This test case passes if any number in the expected list matches.
-            expected_list = (
-                [expected_data] if not isinstance(expected_data, list)
-                else expected_data
-            )
-            failed = not any([math.isclose(
-                expected_number,
-                actual_data,
-                rel_tol=0.01,
-                abs_tol=0.01
-            )] for expected_number in expected_list)
+        if isinstance(actual_data, (int, float)):
+            if isinstance(expected_data, (int, float)):
+                failed = (not math.isclose(
+                    expected_data,
+                    actual_data,
+                    rel_tol=0.01,
+                    abs_tol=0.01
+                ))
+            elif isinstance(expected_data, list):
+                # Assume that the list is a numerical range.
+                min_max = list(sorted(expected_data))
+                failed = (min_max[1] < actual_data < min_max[0])
         if failed:
             test_case_string = ' '.join(test_case)
             failed_validation_list.append((
diff --git a/tests/test_action.py b/tests/test_action.py
index 76d2bafe1..5136207f1 100644
--- a/tests/test_action.py
+++ b/tests/test_action.py
@@ -28,7 +28,7 @@ def test_close_object(self):
         self.assertEqual(mcs.Action.CLOSE_OBJECT.key, "1")
         self.assertEqual(
             mcs.Action.CLOSE_OBJECT.desc,
-            "Close a nearby object. (objectId=string, amount=float " +
+            "Close a nearby object. (objectId=string, amount=float "
             "(default:1), objectImageCoordsX=float, objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("CloseObject"), mcs.Action.CLOSE_OBJECT)
@@ -89,8 +89,8 @@ def test_open_object(self):
         self.assertEqual(mcs.Action.OPEN_OBJECT.key, "3")
         self.assertEqual(
             mcs.Action.OPEN_OBJECT.desc,
-            "Open a nearby object. (objectId=string, " +
-            "amount=float (default:1), objectImageCoordsX=float, " +
+            "Open a nearby object. (objectId=string, "
+            "amount=float (default:1), objectImageCoordsX=float, "
             "objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("OpenObject"), mcs.Action.OPEN_OBJECT)
@@ -101,8 +101,8 @@ def test_pickup_object(self):
         self.assertEqual(mcs.Action.PICKUP_OBJECT.key, "4")
         self.assertEqual(
             mcs.Action.PICKUP_OBJECT.desc,
-            "Pickup a nearby object and hold it in your hand. " +
-            "(objectId=string, objectImageCoordsX=float, " +
+            "Pickup a nearby object and hold it in your hand. "
+            "(objectId=string, objectImageCoordsX=float, "
             "objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("PickupObject"), mcs.Action.PICKUP_OBJECT)
@@ -113,8 +113,8 @@ def test_pull_object(self):
         self.assertEqual(mcs.Action.PULL_OBJECT.key, "5")
         self.assertEqual(
             mcs.Action.PULL_OBJECT.desc,
-            "Pull a nearby object. (objectId=string, " +
-            "force=float (default:0.5), " +
+            "Pull a nearby object. (objectId=string, "
+            "force=float (default:0.5), "
             "objectImageCoordsX=float, objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("PullObject"), mcs.Action.PULL_OBJECT)
@@ -125,8 +125,8 @@ def test_push_object(self):
         self.assertEqual(mcs.Action.PUSH_OBJECT.key, "6")
         self.assertEqual(
             mcs.Action.PUSH_OBJECT.desc,
-            "Push a nearby object. (objectId=string, " +
-            "force=float (default:0.5), " +
+            "Push a nearby object. (objectId=string, "
+            "force=float (default:0.5), "
             "objectImageCoordsX=float, objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("PushObject"), mcs.Action.PUSH_OBJECT)
@@ -137,8 +137,8 @@ def test_torque_object(self):
         self.assertEqual(mcs.Action.TORQUE_OBJECT.key, "8")
         self.assertEqual(
             mcs.Action.TORQUE_OBJECT.desc,
-            "Apply torque to a nearby object. (objectId=string, " +
-            "force=float(default:0.5), objectImageCoordsX=float, " +
+            "Apply torque to a nearby object. (objectId=string, "
+            "force=float(default:0.5), objectImageCoordsX=float, "
             "objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("TorqueObject"), mcs.Action.TORQUE_OBJECT)
@@ -149,9 +149,9 @@ def test_rotate_object(self):
         self.assertEqual(mcs.Action.ROTATE_OBJECT.key, "9")
         self.assertEqual(
             mcs.Action.ROTATE_OBJECT.desc,
-            "Apply a rotation of 5 degrees to a nearby object. " +
-            "(objectId=string, " +
-            "clockwise=bool(default:True), objectImageCoordsX=float, " +
+            "Apply a rotation of 5 degrees to a nearby object. "
+            "(objectId=string, "
+            "clockwise=bool(default:True), objectImageCoordsX=float, "
             "objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("RotateObject"), mcs.Action.ROTATE_OBJECT)
@@ -162,11 +162,11 @@ def test_move_object(self):
         self.assertEqual(mcs.Action.MOVE_OBJECT.key, "0")
         self.assertEqual(
             mcs.Action.MOVE_OBJECT.desc,
-            "Apply a movement of 0.1 meters to a nearby object. " +
-            "(objectId=string, " +
-            "lateral=int(default:0), " +
-            "straight=int(default:1), " +
-            "objectImageCoordsX=float, " +
+            "Apply a movement of 0.1 meters to a nearby object. "
+            "(objectId=string, "
+            "lateral=int(default:0), "
+            "straight=int(default:1), "
+            "objectImageCoordsX=float, "
             "objectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("MoveObject"), mcs.Action.MOVE_OBJECT)
@@ -177,10 +177,10 @@ def test_put_object(self):
         self.assertEqual(mcs.Action.PUT_OBJECT.key, "7")
         self.assertEqual(
             mcs.Action.PUT_OBJECT.desc,
-            "Place an object you are holding into/onto a nearby " +
-            "receptacle object. (objectId=string, " +
-            "receptacleObjectId=string, " +
-            "receptacleObjectImageCoordsX=float, " +
+            "Place an object you are holding into/onto a nearby "
+            "receptacle object. (objectId=string, "
+            "receptacleObjectId=string, "
+            "receptacleObjectImageCoordsX=float, "
             "receptacleObjectImageCoordsY=float)"
         )
         self.assertEqual(mcs.Action("PutObject"), mcs.Action.PUT_OBJECT)
diff --git a/tests/test_config_manager.py b/tests/test_config_manager.py
index 955407786..e91e9a81f 100644
--- a/tests/test_config_manager.py
+++ b/tests/test_config_manager.py
@@ -75,7 +75,8 @@ def test_init_with_arg_and_env_variable(
     @mock_env(MCS_CONFIG_FILE_PATH='~/somefolder/env-var-test.ini')
     def test_nonexistent_file_from_env_variable(self):
         '''Missing config files should raise an exception'''
-        self.assertRaises(RuntimeError, ConfigManager)
+        with self.assertRaises(RuntimeError):
+            ConfigManager()
 
     @mock_env(MCS_CONFIG_FILE_PATH=('machine_common_sense/scripts/'
                                     'config_level2_debug.ini'))
@@ -110,11 +111,13 @@ def test_init_with_filepath(self):
     def test_init_with_filepath_missing(self):
         '''Provided config file path must exist or an exception occurs'''
         missing_config_file = '~/somefolder/env-var-test.ini'
-        self.assertRaises(RuntimeError, ConfigManager, missing_config_file)
+        with self.assertRaises(RuntimeError):
+            ConfigManager(missing_config_file)
 
     def test_init_with_no_config(self):
         '''No dictionary, no file, and no env should raise an exception'''
-        self.assertRaises(RuntimeError, ConfigManager)
+        with self.assertRaises(RuntimeError):
+            ConfigManager()
 
     def test_init_with_dict(self):
         config_options = {
diff --git a/tests/test_controller.py b/tests/test_controller.py
index 2a6f57deb..5e30dc14d 100644
--- a/tests/test_controller.py
+++ b/tests/test_controller.py
@@ -361,9 +361,8 @@ def test_end_scene_with_rating_string(self):
                 ]}
         }
 
-        self.assertRaises(
-            TypeError,
-            lambda: self.controller.end_scene("1.0", np.float64(0.5), {
+        with self.assertRaises(TypeError):
+            self.controller.end_scene("1.0", np.float64(0.5), {
                 1: {
                     "rating": 1.0,
                     "score": np.float64(.75),
@@ -374,7 +373,6 @@ def test_end_scene_with_rating_string(self):
                         }
                     ]}
             })
-        )
 
     def test_end_scene_twice(self):
         test_payload = self.controller._create_event_payload_kwargs()
@@ -406,9 +404,8 @@ def test_end_scene_twice(self):
         })
 
         # calling end_scene a second time raises an exception
-        self.assertRaises(
-            RuntimeError,
-            lambda: self.controller.end_scene(
+        with self.assertRaises(RuntimeError):
+            self.controller.end_scene(
                 1.0,
                 0.5,
                 {1: {
@@ -421,7 +418,6 @@ def test_end_scene_twice(self):
                         }
                     ]}
                  })
-        )
 
     def test_start_scene(self):
         self.controller.set_metadata_tier(
@@ -756,23 +752,19 @@ def test_step_open_action_magnitude(self):
                 objectId='test_id_1',
                 receptacleObjectId='test_id_2'))
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.OPEN_OBJECT.value,
                 amount=1.5,
                 objectId='test_id_1',
                 receptacleObjectID='test_id_2')
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.OPEN_OBJECT.value,
                 amount=-1,
                 objectId='test_id_1',
                 receptacleObjectId='test_id_2')
-        )
 
         self.controller.step(
             mcs.Action.OPEN_OBJECT.value,
@@ -796,18 +788,14 @@ def test_step_open_action_magnitude(self):
 
     def test_step_validate_action(self):
         _ = self.controller.start_scene({'name': TEST_FILE_NAME})
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step('Foobar')
-        )
+        with self.assertRaises(ValueError):
+            self.controller.step('Foobar')
 
         self.controller.set_goal(mcs.GoalMetadata(action_list=[
             [(mcs.Action.PASS.value, {})]
         ]))
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(mcs.Action.MOVE_AHEAD.value)
-        )
+        with self.assertRaises(ValueError):
+            self.controller.step(mcs.Action.MOVE_AHEAD.value)
 
         self.controller.set_goal(mcs.GoalMetadata(action_list=[
             [(mcs.Action.MOVE_AHEAD.value, {})],
@@ -815,10 +803,8 @@ def test_step_validate_action(self):
         ))
         output = self.controller.step(mcs.Action.MOVE_AHEAD.value)
         self.assertIsNotNone(output)
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(mcs.Action.MOVE_AHEAD.value)
-        )
+        with self.assertRaises(ValueError):
+            self.controller.step(mcs.Action.MOVE_AHEAD.value)
 
     def test_step_validate_parameters_move(self):
         _ = self.controller.start_scene({'name': TEST_FILE_NAME})
@@ -887,20 +873,16 @@ def test_step_validate_parameters_force_object(self):
                 moveMagnitude=0.1,
                 objectId='test_id_1'))
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.PUSH_OBJECT.value,
                 force=1.5,
                 objectId='test_id_1')
-        )
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.PUSH_OBJECT.value,
                 force=-1,
                 objectId='test_id_1')
-        )
 
         self.controller.step(
             mcs.Action.PUSH_OBJECT.value,
@@ -961,21 +943,17 @@ def test_step_validate_parameters_torque_object(self):
                 moveMagnitude=0.5,
                 objectImageCoords={'x': 1, 'y': 397}))
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.TORQUE_OBJECT.value,
                 force=1.1,
                 objectId='test_id_1')
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.TORQUE_OBJECT.value,
                 force=-1.1,
                 objectId='test_id_1')
-        )
 
     def test_step_validate_parameters_rotate_object(self):
         _ = self.controller.start_scene({'name': TEST_FILE_NAME})
@@ -1033,21 +1011,17 @@ def test_step_validate_parameters_rotate_object(self):
                 objectId='test_id_1',
                 clockwise=False))
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.ROTATE_OBJECT.value,
                 clockwise=1.0,
                 objectId='test_id_1')
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 mcs.Action.ROTATE_OBJECT.value,
                 clockwise='string',
                 objectId='test_id_1')
-        )
 
     def test_step_validate_parameters_move_object(self):
         _ = self.controller.start_scene({'name': TEST_FILE_NAME})
@@ -1083,44 +1057,34 @@ def test_step_validate_parameters_move_object(self):
                 lateral=1,
                 straight=-1))
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 'MoveObject',
                 lateral='string',
                 objectId='test_id_1')
-        )
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 'MoveObject',
                 straight='string',
                 objectId='test_id_1')
-        )
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 'MoveObject',
                 lateral=1,
                 straight=0.1,
                 objectId='test_id_1')
-        )
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 'MoveObject',
                 lateral=0.1,
                 straight=1,
                 objectId='test_id_1')
-        )
-        self.assertRaises(
-            ValueError,
-            lambda: self.controller.step(
+        with self.assertRaises(ValueError):
+            self.controller.step(
                 'MoveObject',
                 lateral=True,
                 straight=False,
                 objectId='test_id_1')
-        )
 
 
 if __name__ == '__main__':
diff --git a/tests/test_controller_output_handler.py b/tests/test_controller_output_handler.py
index abf931226..c805441e2 100644
--- a/tests/test_controller_output_handler.py
+++ b/tests/test_controller_output_handler.py
@@ -68,6 +68,8 @@ def create_wrap_output_scene_event(self):
                 "cameraPosition": {
                     "y": 0.1234
                 },
+                "resolvedObject": 'testResolvedId',
+                "resolvedReceptacle": '',
                 "clippingPlaneFar": 150,
                 "clippingPlaneNear": 0,
                 "fov": 42.5,
@@ -477,6 +479,8 @@ def test_wrap_output(self):
         self.assertEqual(actual.holes, [(0, 0), (1, 2), (9, 8)])
         self.assertEqual(actual.lava, [(3, 3), (7, 5), (4, 6)])
         self.assertEqual(actual.position, {'x': 0.12, 'y': -0.23, 'z': 4.5})
+        self.assertEqual(actual.resolved_object, 'testResolvedId')
+        self.assertEqual(actual.resolved_receptacle, '')
         self.assertEqual(actual.rotation, 2.222)
         self.assertEqual(
             actual.return_status,
@@ -597,6 +601,8 @@ def test_wrap_output_with_config_metadata_level2(self):
         self.assertEqual(actual.habituation_trial, None)
         self.assertEqual(actual.head_tilt, 12.34)
         self.assertEqual(actual.position, None)
+        self.assertEqual(actual.resolved_object, None)
+        self.assertEqual(actual.resolved_receptacle, None)
         self.assertEqual(actual.rotation, None)
         self.assertEqual(
             actual.return_status,
@@ -652,6 +658,8 @@ def test_wrap_output_with_config_metadata_level1(self):
         self.assertEqual(actual.habituation_trial, None)
         self.assertEqual(actual.head_tilt, 12.34)
         self.assertEqual(actual.position, None)
+        self.assertEqual(actual.resolved_object, None)
+        self.assertEqual(actual.resolved_receptacle, None)
         self.assertEqual(actual.rotation, None)
         self.assertEqual(
             actual.return_status,
@@ -695,6 +703,8 @@ def test_wrap_output_with_config_metadata_none(self):
         self.assertEqual(actual.habituation_trial, None)
         self.assertEqual(actual.head_tilt, 12.34)
         self.assertEqual(actual.position, None)
+        self.assertEqual(actual.resolved_object, None)
+        self.assertEqual(actual.resolved_receptacle, None)
         self.assertEqual(actual.rotation, None)
         self.assertEqual(
             actual.return_status,
@@ -737,6 +747,8 @@ def test_wrap_output_with_config_metadata_oracle_non_restrict(self):
         self.assertEqual(actual.habituation_trial, None)
         self.assertEqual(actual.head_tilt, 12.34)
         self.assertEqual(actual.position, {'x': 0.12, 'y': -0.23, 'z': 4.5})
+        self.assertEqual(actual.resolved_object, 'testResolvedId')
+        self.assertEqual(actual.resolved_receptacle, '')
         self.assertEqual(actual.rotation, 2.222)
         self.assertEqual(
             actual.return_status,
@@ -790,6 +802,8 @@ def test_wrap_output_with_config_metadata_oracle(self):
         self.assertEqual(actual.habituation_trial, None)
         self.assertEqual(actual.head_tilt, 12.34)
         self.assertEqual(actual.position, {'x': 0.12, 'y': -0.23, 'z': 4.5})
+        self.assertEqual(actual.resolved_object, 'testResolvedId')
+        self.assertEqual(actual.resolved_receptacle, '')
         self.assertEqual(actual.rotation, 2.222)
         self.assertEqual(
             actual.return_status,
diff --git a/tests/test_history_writer.py b/tests/test_history_writer.py
index d5dd9cdc2..0c1ada046 100644
--- a/tests/test_history_writer.py
+++ b/tests/test_history_writer.py
@@ -1,3 +1,4 @@
+import copy
 import glob
 import os
 import shutil
@@ -213,7 +214,7 @@ def test_write_step_removes_some_output(self):
         history_item = mcs.SceneHistory(
             step=1,
             action=mcs.Action.MOVE_AHEAD.value,
-            output=output
+            output=copy.deepcopy(output)
         )
         writer.add_step(history_item)
 
@@ -229,7 +230,7 @@ def test_write_step_removes_some_output(self):
         history_item = mcs.SceneHistory(
             step=2,
             action=mcs.Action.MOVE_LEFT.value,
-            output=output
+            output=copy.deepcopy(output)
         )
         writer.add_step(history_item)
 
@@ -242,6 +243,49 @@ def test_write_step_removes_some_output(self):
         self.assertIsNone(
             writer.current_steps[1]["output"]["structural_object_list"])
 
+    def test_write_step_has_target_updates_some_output(self):
+        writer = mcs.HistoryWriter(self.prefix_config_data)
+
+        goal = mcs.GoalMetadata(metadata={
+            'target': {'id': 'targetId',
+                       'image': 'something.png'}
+        })
+        output = mcs.StepMetadata(
+            action_list=[
+                mcs.Action.CLOSE_OBJECT.value,
+                mcs.Action.MOVE_AHEAD.value],
+            return_status="SUCCESSFUL",
+            step_number=1,
+            object_list=[
+                mcs.ObjectMetadata(
+                    uuid="targetId", position={
+                        "x": 1, "y": 0.5, "z": 1})
+            ],
+            structural_object_list=[
+                mcs.ObjectMetadata(uuid='struct_obj')
+            ],
+            goal=goal
+        )
+
+        history_item = mcs.SceneHistory(
+            step=1,
+            action=mcs.Action.MOVE_AHEAD.value,
+            output=copy.deepcopy(output)
+        )
+        writer.add_step(history_item)
+
+        self.assertEqual(len(writer.current_steps), 1)
+        self.assertEqual(
+            writer.current_steps[0]["action"],
+            mcs.Action.MOVE_AHEAD.value)
+        self.assertIsNone(writer.current_steps[0]["output"]["action_list"])
+        self.assertIsNone(writer.current_steps[0]["output"]["object_list"])
+        self.assertIsNone(
+            writer.current_steps[0]["output"]["structural_object_list"])
+        self.assertEqual(
+            writer.current_steps[0]["output"]["goal"]["metadata"]["target"],
+            {'id': 'targetId', 'position': {'x': 1, 'y': 0.5, 'z': 1}})
+
     def test_write_history_file_with_numpy(self):
         writer = mcs.HistoryWriter(self.prefix_config_data)
 
diff --git a/tests/test_mcs.py b/tests/test_mcs.py
index d578393af..105435626 100644
--- a/tests/test_mcs.py
+++ b/tests/test_mcs.py
@@ -220,17 +220,13 @@ def test_load_scene_file_json(self):
         self.assertEqual(actual, expected)
 
     def test_load_scene_file_json_is_invalid(self):
-        self.assertRaises(
-            ValueError,
-            lambda: mcs.load_scene_json_file("tests/test_scene_invalid.json")
-        )
+        with self.assertRaises(ValueError):
+            mcs.load_scene_json_file("tests/test_scene_invalid.json")
 
     def test_load_scene_file_json_is_missing(self):
-        self.assertRaises(
-            FileNotFoundError,
-            lambda: mcs.load_scene_json_file(
+        with self.assertRaises(FileNotFoundError):
+            mcs.load_scene_json_file(
                 "tests/test_scene_missing.json")
-        )
 
 
 if __name__ == '__main__':
diff --git a/tests/test_parameter.py b/tests/test_parameter.py
index 76703ebec..47be03721 100644
--- a/tests/test_parameter.py
+++ b/tests/test_parameter.py
@@ -203,23 +203,17 @@ def test_get_amount(self):
         self.assertAlmostEqual(amount, Parameter.DEFAULT_AMOUNT)
 
         # ensure exceptions are raised for unexpected value or types
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_amount(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_amount(
                 action=mcs.Action.PASS, amount="string")
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_amount(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_amount(
                 action=mcs.Action.PASS, amount=1.1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_amount(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_amount(
                 action=mcs.Action.PASS, amount=-0.1)
-        )
 
     def test_get_force(self):
         force = self.parameter_converter._get_force(
@@ -244,36 +238,26 @@ def test_get_force(self):
         self.assertAlmostEqual(force, Parameter.DEFAULT_AMOUNT)
 
         # raise errors when force value and type is unexpected
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_force(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_force(
                 action=mcs.Action.PASS, force="string")
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_force(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_force(
                 action=mcs.Action.PASS, force=1.1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_force(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_force(
                 action=mcs.Action.PASS, force=-0.1)
-        )
 
         # torque force ranges
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_force(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_force(
                 action=mcs.Action.TORQUE_OBJECT, force=1.1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_force(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_force(
                 action=mcs.Action.TORQUE_OBJECT, force=-1.1)
-        )
 
     def test_get_clockwise(self):
         clockwise = self.parameter_converter._get_clockwise(clockwise="False")
@@ -304,20 +288,14 @@ def test_get_clockwise(self):
         self.assertIsInstance(clockwise, bool)
         self.assertEqual(clockwise, True)
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_clockwise(clockwise="string")
-        )
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_clockwise(clockwise="string")
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_clockwise(clockwise=1)
-        )
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_clockwise(clockwise=1)
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_clockwise(clockwise=-0.1)
-        )
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_clockwise(clockwise=-0.1)
 
     def test_get_movement_direction(self):
         (lateral, straight) = (
@@ -351,77 +329,53 @@ def test_get_movement_direction(self):
         self.assertEqual(lateral, 1)
         self.assertEqual(straight, -1)
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=2)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 straight=-2)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=-2, straight=1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=-1, straight=2)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=0.1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 straight=0.1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=-0.1, straight=1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=1, straight=-0.1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral="x", straight="z")
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral="x", straight=1)
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=1, straight="z")
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_movement_direction(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_movement_direction(
                 lateral=True, straight=False)
-        )
 
     def test_get_number(self):
         number = self.parameter_converter._get_number(key="val", val=7)
@@ -431,12 +385,10 @@ def test_get_number(self):
         number = self.parameter_converter._get_number(key="val", not_val=7)
         self.assertIsNone(number)
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_number(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_number(
                 key="string", string="invalid"
             )
-        )
 
     def test_get_number_with_default(self):
         number = self.parameter_converter._get_number_with_default(
@@ -449,11 +401,9 @@ def test_get_number_with_default(self):
         self.assertEqual(number, 5)
         self.assertIsInstance(number, float)
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_number_with_default(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_number_with_default(
                 key="string", default=5, string="invalid")
-        )
 
         number = self.parameter_converter._get_number_with_default(
             key="val", default=5, val=None
@@ -507,31 +457,25 @@ def test_get_teleport(self):
         self.assertEqual(teleport_rot, {'y': 90.0})
         self.assertEqual(teleport_pos, {'x': 1.0, 'z': 2.0})
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_teleport(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_teleport(
                 yRotation='invalid',
                 xPosition='1',
                 zPosition='2')
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_teleport(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_teleport(
                 yRotation='90',
                 xPosition='invalid',
                 zPosition='2'
             )
-        )
 
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._get_teleport(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._get_teleport(
                 yRotation=90,
                 xPosition=1,
                 zPosition='invalid'
             )
-        )
 
     def test_teleport_position(self):
         position = self.parameter_converter._get_teleport_position(
@@ -583,48 +527,38 @@ def test_convert_y_image_coord_for_unity(self):
         self.assertEqual(unity_coord, 0)
 
         image_coord = screen_height
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._convert_y_image_coord_for_unity(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._convert_y_image_coord_for_unity(
                 y_coord=image_coord
             )
-        )
 
         # value much greater than the screen height
         image_coord = 1000000
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._convert_y_image_coord_for_unity(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._convert_y_image_coord_for_unity(
                 y_coord=image_coord
             )
-        )
 
         # value less than the origin
         image_coord = -1
-        self.assertRaises(
-            ValueError,
-            lambda: self.parameter_converter._convert_y_image_coord_for_unity(
+        with self.assertRaises(ValueError):
+            self.parameter_converter._convert_y_image_coord_for_unity(
                 y_coord=image_coord
             )
-        )
 
         # Invalid image coordinate
         image_coord = None
-        self.assertRaises(
-            TypeError,
-            lambda: self.parameter_converter._convert_y_image_coord_for_unity(
+        with self.assertRaises(TypeError):
+            self.parameter_converter._convert_y_image_coord_for_unity(
                 y_coord=image_coord
             )
-        )
 
         # Invalid image coordinate value
         image_coord = "one"
-        self.assertRaises(
-            TypeError,
-            lambda: self.parameter_converter._convert_y_image_coord_for_unity(
+        with self.assertRaises(TypeError):
+            self.parameter_converter._convert_y_image_coord_for_unity(
                 y_coord=image_coord
             )
-        )
 
     def test_mcs_action_to_ai2thor_action(self):
         ai2thor_action = \
diff --git a/tests/test_recorder.py b/tests/test_recorder.py
index a04d4e12f..5a00d3192 100644
--- a/tests/test_recorder.py
+++ b/tests/test_recorder.py
@@ -116,7 +116,8 @@ def test_missing_folder(self):
         bad_recorder = JsonRecorder(
             pathlib.Path("missing/test_json_{:04d}.json"))
         bad_recorder.add(self.test_data())
-        self.assertRaises(FileNotFoundError, bad_recorder.finish)
+        with self.assertRaises(FileNotFoundError):
+            bad_recorder.finish()
 
     def test_add_after_finish(self):
         output_file = pathlib.Path("tests/test_json_0000.json")
@@ -217,7 +218,8 @@ def test_missing_folder(self):
         size = (50, 100)
         img = PIL.Image.new("RGB", size, self.random_color())
         bad_recorder.add(img)
-        self.assertRaises(FileNotFoundError, bad_recorder.finish)
+        with self.assertRaises(FileNotFoundError):
+            bad_recorder.finish()
 
     def test_add_after_finish(self):
         output_file = pathlib.Path("tests/test_image_0000.jpg")
@@ -301,7 +303,8 @@ def test_wrong_size_frame(self):
         # any different sized frame will cause a ValueError exception
         wrong_size = (100, 100)
         wrong_size_img = PIL.Image.new("RGB", wrong_size, color='red')
-        self.assertRaises(ValueError, self.recorder.add, wrong_size_img)
+        with self.assertRaises(ValueError):
+            self.recorder.add(wrong_size_img)
 
         self.recorder.finish()
         self.assertFalse(self.recorder.recording)
diff --git a/tests/test_serializer.py b/tests/test_serializer.py
index bef6354dd..2d5fc5ad8 100644
--- a/tests/test_serializer.py
+++ b/tests/test_serializer.py
@@ -16,10 +16,12 @@ def test_version(self):
         self.assertEqual(ISerializer.version(), version)
 
     def test_serialize(self):
-        self.assertRaises(NotImplementedError, ISerializer.serialize, None)
+        with self.assertRaises(NotImplementedError):
+            ISerializer.serialize(None)
 
     def test_deserialize(self):
-        self.assertRaises(NotImplementedError, ISerializer.deserialize, None)
+        with self.assertRaises(NotImplementedError):
+            ISerializer.deserialize(None)
 
     def test_image_to_bytes(self):
         size = (50, 100)
@@ -35,12 +37,13 @@ def test_image_to_bytes(self):
 
     def test_bytes_to_image(self):
         # bytes representing a black (0,0,0) 50x100 image
-        image_bytes = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x002\x00' \
-            b'\x00\x00d\x08\x02\x00\x00\x00K\x8a\xf4\x0c\x00\x00\x00' \
-            b'&IDATx\x9c\xed\xc11\x01\x00\x00\x00\xc2\xa0\xf5Om\r\x0f' \
-            b'\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
-            b'\x00\x00\xe0\xc3\x00:\xfc\x00\x01\xc0gM\x95\x00\x00\x00' \
-            b'\x00IEND\xaeB`\x82'
+        image_bytes = (
+            b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x002\x00'
+            b'\x00\x00d\x08\x02\x00\x00\x00K\x8a\xf4\x0c\x00\x00\x00'
+            b'&IDATx\x9c\xed\xc11\x01\x00\x00\x00\xc2\xa0\xf5Om\r\x0f'
+            b'\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+            b'\x00\x00\xe0\xc3\x00:\xfc\x00\x01\xc0gM\x95\x00\x00\x00'
+            b'\x00IEND\xaeB`\x82')
         image = ISerializer.bytes_to_image(image_bytes)
         self.assertIsInstance(image, PIL.Image.Image)
         self.assertEqual(image.size, (50, 100))
@@ -130,14 +133,15 @@ def test_ext_pack_with_ndarray(self):
 
     def test_ext_unpack_with_stepmetadata(self):
         # from default StepMetadata()
-        test_data = b'\xdc\x00\x11\x90\xc7\x13\x02\x92\xcb\x00\x00\x00\x00' \
-            b'\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x13' \
-            b'\x02\x92\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00' \
-            b'\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb' \
-            b'\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd7\x04\x97\xc0\xa0\xa0' \
-            b'\x00\x00\xc0\x80\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x90\x90' \
-            b'\x90\x80\xa9UNDEFINED\x00\xcb\x00\x00\x00\x00\x00\x00\x00' \
-            b'\x00\x00\x90'
+        test_data = (
+            b'\xdc\x00\x11\x90\xc7\x13\x02\x92\xcb\x00\x00\x00\x00'
+            b'\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x13'
+            b'\x02\x92\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00'
+            b'\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb'
+            b'\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd7\x04\x97\xc0\xa0\xa0'
+            b'\x00\x00\xc0\x80\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x90\x90'
+            b'\x90\x80\xa9UNDEFINED\x00\xcb\x00\x00\x00\x00\x00\x00\x00'
+            b'\x00\x00\x90')
         unpacked_step = self.serializer._ext_unpack(code=1, data=test_data)
         self.assertIsInstance(unpacked_step, StepMetadata)
         step_metadata = StepMetadata()
@@ -160,12 +164,13 @@ def test_ext_unpack_with_tuple(self):
 
     def test_ext_unpack_with_image(self):
         # from (50,100) image of all black pixels (0,0,0)
-        test_data = b'\xc4_\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x002' \
-            b'\x00\x00\x00d\x08\x02\x00\x00\x00K\x8a\xf4\x0c\x00\x00\x00' \
-            b'&IDATx\x9c\xed\xc11\x01\x00\x00\x00\xc2\xa0\xf5Om\r\x0f' \
-            b'\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
-            b'\x00\x00\xe0\xc3\x00:\xfc\x00\x01\xc0gM\x95\x00\x00\x00' \
-            b'\x00IEND\xaeB`\x82'
+        test_data = (
+            b'\xc4_\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x002'
+            b'\x00\x00\x00d\x08\x02\x00\x00\x00K\x8a\xf4\x0c\x00\x00\x00'
+            b'&IDATx\x9c\xed\xc11\x01\x00\x00\x00\xc2\xa0\xf5Om\r\x0f'
+            b'\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+            b'\x00\x00\xe0\xc3\x00:\xfc\x00\x01\xc0gM\x95\x00\x00\x00'
+            b'\x00IEND\xaeB`\x82')
         unpacked_image = self.serializer._ext_unpack(3, test_data)
         self.assertIsInstance(unpacked_image, PIL.Image.Image)
         self.assertEqual(unpacked_image.size, (50, 100))
@@ -181,10 +186,11 @@ def test_ext_unpack_with_goalmetadata(self):
 
     def test_ext_unpack_with_objectmetadata(self):
         # from default ObjectMetadata()
-        obj_data = b'\xdc\x00\x10\xa0\x90\x80\xcb\xbf\xf0\x00\x00\x00\x00' \
-            b'\x00\x00\xcb\xbf\xf0\x00\x00\x00\x00\x00\x00\xcb\xbf\xf0\x00' \
-            b'\x00\x00\x00\x00\x00\xc2\xcb\x00\x00\x00\x00\x00\x00\x00\x00' \
-            b'\x90\x80\x80\x80\xa0\x90\x90\xc2'
+        obj_data = (
+            b'\xdc\x00\x10\xa0\x90\x80\xcb\xbf\xf0\x00\x00\x00\x00'
+            b'\x00\x00\xcb\xbf\xf0\x00\x00\x00\x00\x00\x00\xcb\xbf\xf0\x00'
+            b'\x00\x00\x00\x00\x00\xc2\xcb\x00\x00\x00\x00\x00\x00\x00\x00'
+            b'\x90\x80\x80\x80\xa0\x90\x90\xc2')
         unpacked_objectmetadata = self.serializer._ext_unpack(
             code=5, data=obj_data)
         self.assertIsInstance(unpacked_objectmetadata, ObjectMetadata)
@@ -194,13 +200,14 @@ def test_ext_unpack_with_objectmetadata(self):
 
     def test_ext_unpack_with_ndarray(self):
         # from [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
-        test_data = b'\x9a\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00' \
-            b'\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00' \
-            b'\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00' \
-            b'\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00' \
-            b'\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00' \
-            b'\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00' \
-            b'\x00\x00\x00'
+        test_data = (
+            b'\x9a\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00'
+            b'\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00'
+            b'\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00'
+            b'\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00'
+            b'\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x00\x00\x00'
+            b'\xcb\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x00\x00\x00\x00\x00'
+            b'\x00\x00\x00')
         unpacked_ndarray = self.serializer._ext_unpack(6, test_data)
         self.assertIsInstance(unpacked_ndarray, np.ndarray)
         self.assertFalse(np.all(unpacked_ndarray))
diff --git a/tests/test_step_metadata.py b/tests/test_step_metadata.py
index d21c0c751..ee45402c3 100644
--- a/tests/test_step_metadata.py
+++ b/tests/test_step_metadata.py
@@ -36,6 +36,8 @@ class TestStepMetadata(unittest.TestCase):
         "performer_reach": 0.0,
         "physics_frames_per_second": 0,
         "position": {},
+        "resolved_object": "",
+        "resolved_receptacle": "",
         "return_status": "UNDEFINED",
         "reward": 0,
         "rotation": 0.0,
@@ -73,6 +75,8 @@ class TestStepMetadata(unittest.TestCase):
         "performer_reach": 0.0,
         "physics_frames_per_second": 0,
         "position": {},
+        "resolved_object": "",
+        "resolved_receptacle": "",
         "return_status": "UNDEFINED",
         "reward": 0,
         "rotation": 0.0,
@@ -159,6 +163,40 @@ def test_performer_reach(self):
     def test_position(self):
         self.assertIsInstance(self.step_metadata.position, dict)
 
+    def test_resolved_object(self):
+        self.assertEqual(self.step_metadata.resolved_object, '')
+        self.assertIsInstance(self.step_metadata.resolved_object, str)
+
+        self.step_metadata.resolved_object = 'testResolvedId'
+        self.assertEqual(self.step_metadata.resolved_object, 'testResolvedId')
+        self.assertIsInstance(self.step_metadata.resolved_object, str)
+
+        self.step_metadata.resolved_object = 'testResolved'
+        self.assertNotEqual(
+            self.step_metadata.resolved_object,
+            'testResolvedId')
+        self.assertIsInstance(self.step_metadata.resolved_object, str)
+
+        self.step_metadata.resolved_object = ''
+
+    def test_resolved_receptacle(self):
+        self.assertEqual(self.step_metadata.resolved_receptacle, '')
+        self.assertIsInstance(self.step_metadata.resolved_receptacle, str)
+
+        self.step_metadata.resolved_receptacle = 'testResolvedId'
+        self.assertEqual(
+            self.step_metadata.resolved_receptacle,
+            'testResolvedId')
+        self.assertIsInstance(self.step_metadata.resolved_receptacle, str)
+
+        self.step_metadata.resolved_receptacle = 'testResolved'
+        self.assertNotEqual(
+            self.step_metadata.resolved_receptacle,
+            'testResolvedId')
+        self.assertIsInstance(self.step_metadata.resolved_receptacle, str)
+
+        self.step_metadata.resolved_receptacle = ''
+
     def test_return_status(self):
         self.assertEqual(
             self.step_metadata.return_status,
@@ -220,6 +258,8 @@ def test_copy_without_depth_or_images(self):
             physics_frames_per_second=20,
             position={'x': 1, 'z': 2},
             return_status=mcs.ReturnStatus.SUCCESSFUL.value,
+            resolved_object='testObjectId',
+            resolved_receptacle='',
             reward=0,
             rotation=90,
             step_number=25,
@@ -256,6 +296,8 @@ def test_copy_without_depth_or_images(self):
         )
         self.assertEqual(data.position, copy.position)
         self.assertEqual(data.return_status, copy.return_status)
+        self.assertEqual(data.resolved_object, copy.resolved_object)
+        self.assertEqual(data.resolved_receptacle, copy.resolved_receptacle)
         self.assertEqual(data.reward, copy.reward)
         self.assertEqual(data.rotation, copy.rotation)
         self.assertEqual(data.step_number, copy.step_number)