diff --git a/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java b/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java
index 22f15ff..89e118a 100644
--- a/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java
+++ b/plugins/org.eclipse.acceleo.aql.launcher/src/org/eclipse/acceleo/aql/launcher/AcceleoLauncher.java
@@ -220,7 +220,7 @@
 		final QualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
 		// TODO generation strategy should be configurable
 		IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment,
-				new DefaultGenerationStrategy(), URI.createURI(target));
+				new DefaultGenerationStrategy());
 		AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment
 				.getLookupEngine());
 
@@ -241,7 +241,7 @@
 
 	private void evaluate(AcceleoEvaluator evaluator, IAcceleoEnvironment environment,
 			IQualifiedNameLookupEngine lookupEngine, Module mainModule, ResourceSet modelResourceSet) {
-		AcceleoUtil.generate(evaluator, environment, mainModule, modelResourceSet);
+		AcceleoUtil.generate(evaluator, environment, mainModule, modelResourceSet, URI.createURI(target));
 	}
 
 	private void printDiagnostic(PrintStream stream, Diagnostic diagnostic, String indentation) {
diff --git a/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java b/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java
index 4be56bb..8813229 100644
--- a/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java
+++ b/plugins/org.eclipse.acceleo.aql.ls.debug/src/org/eclipse/acceleo/aql/ls/debug/AcceleoDebugger.java
@@ -91,7 +91,7 @@
 					resolver.addLoader(QueryPlugin.getPlugin().createJavaLoader(
 							AcceleoParser.QUALIFIER_SEPARATOR));
 
-					AcceleoUtil.generate(evaluator, environment, module, model);
+					AcceleoUtil.generate(evaluator, environment, module, model, getDestination());
 				}
 			} finally {
 				// FIXME workaround: UI jobs are coming from core.debug even if the gen has finished,
@@ -110,8 +110,8 @@
 
 			IWorkspace workspace = ResourcesPlugin.getWorkspace();
 			if (workspace != null) {
-				IContainer container = workspace.getRoot().getContainerForLocation(new Path(environment
-						.getDestination().toFileString()));
+				IContainer container = workspace.getRoot().getContainerForLocation(new Path(destination
+						.toFileString()));
 				if (container != null) {
 					try {
 						container.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
@@ -144,11 +144,6 @@
 		}
 
 		@Override
-		public Object generate(ASTNode node, Map<String, Object> variables) {
-			return super.generate(node, variables);
-		}
-
-		@Override
 		public Object doSwitch(EObject eObject) {
 			if (isTerminated()) {
 				return null;
@@ -196,6 +191,11 @@
 	private IAcceleoEnvironment environment;
 
 	/**
+	 * The destination {@link URI}.
+	 */
+	private URI destination;
+
+	/**
 	 * The {@link AcceleoAstResult}.
 	 */
 	private AcceleoAstResult astResult;
@@ -227,14 +227,14 @@
 		setNoDebug(noDebug);
 		final URI moduleURI = URI.createURI((String)arguments.get(MODULE));
 		final URI modelURI = URI.createURI((String)arguments.get(MODEL));
-		final URI destination = URI.createURI((String)arguments.get(DESTINATION));
+		destination = URI.createURI((String)arguments.get(DESTINATION));
 
 		final IProject project = LSPEclipseUtils.findResourceFor((String)arguments.get(MODULE)).getProject();
 		final IQualifiedNameResolver resolver = QueryPlugin.getPlugin().createQualifiedNameResolver(
 				AcceleoPlugin.getPlugin().getClass().getClassLoader(), project,
 				AcceleoParser.QUALIFIER_SEPARATOR);
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
-		environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy(), destination);
+		environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy());
 		for (String nsURI : new ArrayList<String>(EPackage.Registry.INSTANCE.keySet())) {
 			registerEPackage(queryEnvironment, EPackage.Registry.INSTANCE.getEPackage(nsURI));
 		}
@@ -325,7 +325,7 @@
 		resolver.addLoader(new ModuleLoader(new AcceleoParser(), noDebugEvaluator));
 		resolver.addLoader(QueryPlugin.getPlugin().createJavaLoader(AcceleoParser.QUALIFIER_SEPARATOR));
 
-		AcceleoUtil.generate(noDebugEvaluator, env, module, modelResource);
+		AcceleoUtil.generate(noDebugEvaluator, env, module, modelResource, getDestination());
 	}
 
 	@Override
@@ -470,4 +470,14 @@
 
 		return res;
 	}
+
+	/**
+	 * Gets the destination {@link URI}.
+	 * 
+	 * @return the destination {@link URI}
+	 */
+	protected URI getDestination() {
+		return destination;
+	}
+
 }
diff --git a/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java b/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java
index b7ddbf2..18de02d 100644
--- a/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java
+++ b/plugins/org.eclipse.acceleo.aql.ls/src/org/eclipse/acceleo/aql/ls/services/textdocument/AcceleoTextDocument.java
@@ -178,7 +178,7 @@
 
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(getProject()
 				.getResolver());
-		acceleoEnvironment = new AcceleoEnvironment(queryEnvironment, null, null);
+		acceleoEnvironment = new AcceleoEnvironment(queryEnvironment, null);
 
 		for (Metamodel metamodel : parsingResult.getModule().getMetamodels()) {
 			if (metamodel.getReferencedPackage() != null) {
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java
index 3075527..e75c707 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoEnvironment.java
@@ -39,11 +39,6 @@
 	private final IAcceleoGenerationStrategy generationStrategy;
 
 	/**
-	 * The destination {@link URI}.
-	 */
-	private final URI destination;
-
-	/**
 	 * The {@link GenerationResult}.
 	 */
 	private final GenerationResult generationResult = new GenerationResult();
@@ -55,13 +50,10 @@
 	 *            the {@link IQualifiedNameQueryEnvironment}
 	 * @param generationStrategy
 	 *            the {@link IAcceleoGenerationStrategy}
-	 * @param destination
-	 *            the destination {@link URI}
 	 */
 	public AcceleoEnvironment(IQualifiedNameQueryEnvironment aqlEnvironment,
-			IAcceleoGenerationStrategy generationStrategy, URI destination) {
+			IAcceleoGenerationStrategy generationStrategy) {
 		this.generationStrategy = generationStrategy;
-		this.destination = destination;
 
 		this.aqlEnvironment = aqlEnvironment;
 		/* FIXME we need a cross reference provider, and we need to make it configurable */
@@ -95,11 +87,6 @@
 	}
 
 	@Override
-	public URI getDestination() {
-		return destination;
-	}
-
-	@Override
 	public GenerationResult getGenerationResult() {
 		return generationResult;
 	}
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java
index d1f60be..3d2d412 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/AcceleoUtil.java
@@ -27,6 +27,7 @@
 import org.eclipse.acceleo.query.runtime.IQueryEnvironment;
 import org.eclipse.acceleo.query.services.EObjectServices;
 import org.eclipse.acceleo.util.AcceleoSwitch;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EObject;
@@ -94,10 +95,12 @@
 	 *            the {@link Module}
 	 * @param model
 	 *            the {@link Resource} containing the model
+	 * @param destination
+	 *            destination {@link URI}
 	 */
 	public static void generate(AcceleoEvaluator evaluator, IAcceleoEnvironment acceleoEnvironment,
-			Module module, Resource model) {
-		generate(evaluator, acceleoEnvironment, module, Collections.singletonList(model));
+			Module module, Resource model, URI destination) {
+		generate(evaluator, acceleoEnvironment, module, Collections.singletonList(model), destination);
 	}
 
 	/**
@@ -111,14 +114,16 @@
 	 *            the {@link Module}
 	 * @param resourceSet
 	 *            the {@link ResourceSet} containing the input model(s)
+	 * @param destination
+	 *            the destination {@link URI}
 	 */
 	public static void generate(AcceleoEvaluator evaluator, IAcceleoEnvironment acceleoEnvironment,
-			Module module, ResourceSet resourceSet) {
-		generate(evaluator, acceleoEnvironment, module, resourceSet.getResources());
+			Module module, ResourceSet resourceSet, URI destination) {
+		generate(evaluator, acceleoEnvironment, module, resourceSet.getResources(), destination);
 	}
 
 	private static void generate(AcceleoEvaluator evaluator, IAcceleoEnvironment acceleoEnvironment,
-			Module module, List<Resource> resources) {
+			Module module, List<Resource> resources, URI destination) {
 		final IQueryEnvironment queryEnvironment = acceleoEnvironment.getQueryEnvironment();
 
 		final EObjectServices services = new EObjectServices(queryEnvironment, null, null);
@@ -148,7 +153,7 @@
 			final Map<String, Object> variables = new HashMap<String, Object>();
 			for (EObject value : values) {
 				variables.put(parameterName, value);
-				evaluator.generate(module, variables);
+				evaluator.generate(module, variables, destination);
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java
index b1af7ad..ccb8828 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/IAcceleoEnvironment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2017, 2020 Obeo.
+ * Copyright (c) 2017, 2021 Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,13 +26,6 @@
 public interface IAcceleoEnvironment {
 
 	/**
-	 * Gets the destination {@link URI}.
-	 * 
-	 * @return the destination {@link URI}
-	 */
-	URI getDestination();
-
-	/**
 	 * Gets the {@link IQualifiedNameQueryEnvironment}.
 	 * 
 	 * @return the {@link IQualifiedNameQueryEnvironment}
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java
index 561b8e1..a85e9e2 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/AcceleoEvaluator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2020  Obeo.
+ * Copyright (c) 2016, 2021  Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,6 +115,11 @@
 	private boolean inlinedBlock;
 
 	/**
+	 * The destination {@link URI}.
+	 */
+	private URI destination;
+
+	/**
 	 * Constructor.
 	 * 
 	 * @param other
@@ -122,6 +127,7 @@
 	 */
 	public AcceleoEvaluator(AcceleoEvaluator other) {
 		this(other.environment, other.lookupEngine);
+		destination = other.destination;
 	}
 
 	/**
@@ -146,12 +152,15 @@
 	 *            the {@link ASTNode} to generate
 	 * @param variables
 	 *            the variables
+	 * @param destinationURI
+	 *            the destination {@link URI}
 	 * @return the generated {@link Object}, can be <code>null</code>
 	 */
-	public Object generate(ASTNode node, Map<String, Object> variables) {
+	public Object generate(ASTNode node, Map<String, Object> variables, URI destinationURI) {
 
 		final Object res;
 
+		destination = destinationURI;
 		lastLineOfLastStatement = "";
 		pushVariables(variables);
 		try {
@@ -499,7 +508,7 @@
 		} else {
 			final OpenModeKind mode = fileStatement.getMode();
 			final Charset charset = getCharset(fileStatement);
-			final URI uri = URI.createURI(toString(uriObject), true).resolve(environment.getDestination());
+			final URI uri = URI.createURI(toString(uriObject), true).resolve(destination);
 			try {
 				// FIXME line delimiter
 				environment.openWriter(uri, mode, charset, NEW_LINE);
@@ -674,4 +683,13 @@
 		return buffer.toString();
 	}
 
+	/**
+	 * Gets the destination {@link URI}.
+	 * 
+	 * @return the destination {@link URI}
+	 */
+	public URI getDestination() {
+		return destination;
+	}
+
 }
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java
index 0071752..18b02bf 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/QueryService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2017  Obeo.
+ * Copyright (c) 2016, 2021  Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -101,7 +101,8 @@
 			variables.put(var.getName(), arguments[i]);
 		}
 
-		return getEvaluator().generate(getOrigin(), variables);
+		final AcceleoEvaluator evaluator = getEvaluator();
+		return evaluator.generate(getOrigin(), variables, evaluator.getDestination());
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java
index d506bfb..664fe09 100644
--- a/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java
+++ b/plugins/org.eclipse.acceleo.aql/src/org/eclipse/acceleo/aql/evaluation/TemplateService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2017  Obeo.
+ * Copyright (c) 2016, 2021  Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,7 +99,8 @@
 			variables.put(var.getName(), arguments[i]);
 		}
 
-		return getEvaluator().generate(getOrigin(), variables);
+		final AcceleoEvaluator evaluator = getEvaluator();
+		return evaluator.generate(getOrigin(), variables, evaluator.getDestination());
 	}
 
 	@Override
diff --git a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java
index 0233ed8..e6c0ff4 100644
--- a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java
+++ b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/completion/CompletionTests.java
@@ -45,7 +45,6 @@
 import org.eclipse.acceleo.query.runtime.namespace.IQualifiedNameQueryEnvironment;
 import org.eclipse.acceleo.query.runtime.namespace.IQualifiedNameResolver;
 import org.eclipse.acceleo.tests.utils.AbstractLanguageTestSuite;
-import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -124,7 +123,7 @@
 				.getClassLoader(), AcceleoParser.QUALIFIER_SEPARATOR);
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
 		final IAcceleoEnvironment acceleoEnvironment = new AcceleoEnvironment(queryEnvironment,
-				new DefaultGenerationStrategy(), URI.createURI(""));
+				new DefaultGenerationStrategy());
 
 		final AcceleoEvaluator evaluator = new AcceleoEvaluator(acceleoEnvironment, queryEnvironment
 				.getLookupEngine());
diff --git a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java
index d95a132..e153f7d 100644
--- a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java
+++ b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractEvaluationTestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2020 Obeo.
+ * Copyright (c) 2016, 2021 Obeo.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -103,7 +103,7 @@
 		final URI generatedFolderURI = URI.createURI("generated/").resolve(model.getURI());
 		final List<URI> expectedGeneratedFiles = getExpectedGeneratedFiles(generatedFolderURI);
 		final List<URI> unexpectedGeneratedFiles = new ArrayList<URI>();
-		AcceleoUtil.generate(evaluator, environment, module, model);
+		AcceleoUtil.generate(evaluator, environment, module, model, memoryDestination);
 
 		assertGenerationMessages(environment.getGenerationResult());
 
diff --git a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java
index d383ec8..b6d2cf8 100644
--- a/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java
+++ b/tests/org.eclipse.acceleo.aql.tests/src/org/eclipse/acceleo/tests/utils/AbstractLanguageTestSuite.java
@@ -144,8 +144,7 @@
 		final IQualifiedNameResolver resolver = new ClassLoaderQualifiedNameResolver(classLoader,
 				AcceleoParser.QUALIFIER_SEPARATOR);
 		final IQualifiedNameQueryEnvironment queryEnvironment = new QualifiedNameQueryEnvironment(resolver);
-		this.environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy(),
-				memoryDestination);
+		this.environment = new AcceleoEnvironment(queryEnvironment, new DefaultGenerationStrategy());
 
 		evaluator = new AcceleoEvaluator(this.environment, queryEnvironment.getLookupEngine());
 		resolver.addLoader(new ModuleLoader(new AcceleoParser(), evaluator));
