diff --git a/buildstream/buildelement.py b/buildstream/buildelement.py
index d729eaa81138641f21fa3301a8702b5949f4ad48..56d029ea887100e5d14e223886d823b6de5813df 100644
--- a/buildstream/buildelement.py
+++ b/buildstream/buildelement.py
@@ -155,6 +155,9 @@ class BuildElement(Element):
             command_dir = build_root
         sandbox.set_work_directory(command_dir)
 
+        # Tell sandbox which directory is preserved in the finished artifact
+        sandbox.set_output_directory(install_root)
+
         # Setup environment
         sandbox.set_environment(self.get_environment())
 
diff --git a/buildstream/sandbox/sandbox.py b/buildstream/sandbox/sandbox.py
index 87a2fb9c9bf7fa05368b3710f431c678e99704be..4c383c77a1b6fdcbd0e249fd37e26665b0f54710 100644
--- a/buildstream/sandbox/sandbox.py
+++ b/buildstream/sandbox/sandbox.py
@@ -99,9 +99,11 @@ class Sandbox():
         self.__stdout = kwargs['stdout']
         self.__stderr = kwargs['stderr']
 
-        # Setup the directories. Root should be available to subclasses, hence
-        # being single-underscore. The others are private to this class.
+        # Setup the directories. Root and output_directory should be
+        # available to subclasses, hence being single-underscore. The
+        # others are private to this class.
         self._root = os.path.join(directory, 'root')
+        self._output_directory = None
         self.__directory = directory
         self.__scratch = os.path.join(self.__directory, 'scratch')
         for directory_ in [self._root, self.__scratch]:
@@ -144,11 +146,17 @@ class Sandbox():
                 self._vdir = FileBasedDirectory(self._root)
         return self._vdir
 
+    def _set_virtual_directory(self, vdir):
+        """ Sets virtual directory. Useful after remote execution
+        has rewritten the working directory.
+        """
+        self._vdir = vdir
+
     def set_environment(self, environment):
         """Sets the environment variables for the sandbox
 
         Args:
-           directory (dict): The environment variables to use in the sandbox
+           environment (dict): The environment variables to use in the sandbox
         """
         self.__env = environment
 
@@ -160,6 +168,15 @@ class Sandbox():
         """
         self.__cwd = directory
 
+    def set_output_directory(self, directory):
+        """Sets the output directory - the directory which is preserved
+        as an artifact after assembly.
+
+        Args:
+           directory (str): An absolute path within the sandbox
+        """
+        self._output_directory = directory
+
     def mark_directory(self, directory, *, artifact=False):
         """Marks a sandbox directory and ensures it will exist