diff --git a/buildstream/element.py b/buildstream/element.py
index d41ebac76a16606f26e9231fafd4c46890ce47f8..dd7ccfed3faa686db6bccabcb408d099dd485b51 100644
--- a/buildstream/element.py
+++ b/buildstream/element.py
@@ -95,6 +95,7 @@ from . import _site
 from ._platform import Platform
 from .plugin import CoreWarnings
 from .sandbox._config import SandboxConfig
+from .sandbox._sandboxremote import SandboxRemote
 
 from .storage.directory import Directory
 from .storage._filebaseddirectory import FileBasedDirectory
@@ -2154,7 +2155,32 @@ class Element(Plugin):
         project = self._get_project()
         platform = Platform.get_platform()
 
-        if directory is not None and os.path.exists(directory):
+        if self.__remote_execution_url and self.BST_VIRTUAL_DIRECTORY:
+            if not self.__artifacts.has_push_remotes(element=self):
+                # Give an early warning if remote execution will not work
+                raise ElementError("Artifact {} is configured to use remote execution but has no push remotes. "
+                                   .format(self.name) +
+                                   "The remote artifact server(s) may not be correctly configured or contactable.")
+
+            self.info("Using a remote sandbox for artifact {}".format(self.name))
+
+            sandbox = SandboxRemote(context, project,
+                                    directory,
+                                    stdout=stdout,
+                                    stderr=stderr,
+                                    config=config,
+                                    server_url=self.__remote_execution_url,
+                                    allow_real_directory=False)
+            yield sandbox
+
+        elif directory is not None and os.path.exists(directory):
+            if self.__remote_execution_url:
+                self.warn("Artifact {} is configured to use remote execution but element plugin does not support it."
+                          .format(self.name), detail="Element plugin '{kind}' does not support virtual directories."
+                          .format(kind=self.get_kind()), warning_token="remote-failure")
+
+                self.info("Falling back to local sandbox for artifact {}".format(self.name))
+
             sandbox = platform.create_sandbox(context, project,
                                               directory,
                                               stdout=stdout,