diff --git a/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/renv/core/BasicREnvConfigurationTest.java b/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/renv/core/BasicREnvConfigurationTest.java
new file mode 100644
index 0000000..09ee423
--- /dev/null
+++ b/core/org.eclipse.statet.rj.services.core-tests/src/org/eclipse/statet/rj/renv/core/BasicREnvConfigurationTest.java
@@ -0,0 +1,232 @@
+/*=============================================================================#
+ # Copyright (c) 2019 Stephan Wahlbrink <sw@wahlbrink.eu> and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.rj.renv.core;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.junit.Test;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.SystemUtils;
+
+
+@NonNullByDefault
+public class BasicREnvConfigurationTest {
+	
+	
+	private static class TestREnvConfiguration extends BasicREnvConfiguration {
+		
+		
+		private final byte expliciteOs;
+		
+		
+		public TestREnvConfiguration(final REnv rEnv, final Path stateRootDirectoryPath,
+				final byte expliciteOs) {
+			super(rEnv, stateRootDirectoryPath);
+			this.expliciteOs= expliciteOs;
+		}
+		
+		
+		@Override
+		protected byte getOs() {
+			return this.expliciteOs;
+		}
+		
+	}
+	
+	
+	private final Path statePath;
+	
+	
+	public BasicREnvConfigurationTest() throws IOException {
+		this.statePath= Files.createTempDirectory("rj.renv.core-tests");
+	}
+	
+	
+	private TestREnvConfiguration createCommonLocalConfig(final byte os) {
+		try {
+			final String id= "test";
+			final Path path= this.statePath.resolve(id);
+			Files.createDirectories(path);
+			final TestREnvConfiguration config= new TestREnvConfiguration(
+					new BasicREnvManager.ActualREnv(id), path, os );
+			config.setFlags(TestREnvConfiguration.LOCAL | TestREnvConfiguration.SPEC_SETUP);
+			return config;
+		}
+		catch (final IOException e) {
+			throw new RuntimeException(e);
+		}
+	}
+	
+	
+	@Test
+	public void setget_RHomeDirectory_Win() throws IOException {
+		final TestREnvConfiguration config= createCommonLocalConfig(SystemUtils.OS_WIN);
+		
+		config.setRHomeDirectory("C:/R-3.5");
+		assertEquals("C:/R-3.5", config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+		
+		config.setRHomeDirectory("C:/R-3.5/");
+		assertEquals("C:/R-3.5", config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+		
+		config.setRHomeDirectory("C:\\R-3.5");
+		assertEquals("C:/R-3.5", config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+		
+		config.setRHomeDirectory("C:\\R-3.5\\");
+		assertEquals("C:/R-3.5", config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+	}
+	
+	@Test
+	public void setget_RHomeDirectory_Nix() throws IOException {
+		final TestREnvConfiguration config= createCommonLocalConfig((byte) 0);
+		
+		config.setRHomeDirectory("/opt/R-3.5");
+		assertEquals("/opt/R-3.5", config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+		
+		config.setRHomeDirectory("/opt/R-3.5/");
+		assertEquals("/opt/R-3.5", config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+		
+		config.setRHomeDirectory("/opt/R-3.5/");
+		config.setRHomeDirectory(null);
+		assertNull(config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+		
+		config.setRHomeDirectory("/opt/R-3.5/");
+		config.setRHomeDirectory("");
+		assertNull(config.getRHomeDirectory());
+		assertNull(config.getRHomeDirectoryPath());
+	}
+	
+	@Test
+	public void setget_RArch_Win() {
+		final TestREnvConfiguration config= createCommonLocalConfig(SystemUtils.OS_WIN);
+		
+		config.setRArch("x64");
+		assertEquals(SystemUtils.ARCH_X86_64, config.getRArch());
+		
+		config.setRArch("/x64");
+		assertEquals(SystemUtils.ARCH_X86_64, config.getRArch());
+		
+		config.setRArch("amd64");
+		assertEquals(SystemUtils.ARCH_X86_64, config.getRArch());
+		
+		config.setRArch("i386");
+		assertEquals(SystemUtils.ARCH_X86_32, config.getRArch());
+		
+		config.setRArch("/i386");
+		assertEquals(SystemUtils.ARCH_X86_32, config.getRArch());
+		
+		config.setRArch("x64");
+		config.setRArch(null);
+		assertNull(config.getRArch());
+		
+		config.setRArch("x64");
+		config.setRArch("");
+		assertNull(config.getRArch());
+	}
+	
+	@Test
+	public void setget_RDocDirectory_Win() {
+		final TestREnvConfiguration config= createCommonLocalConfig(SystemUtils.OS_WIN);
+		
+		config.setRDocDirectory("C:/R-3.5/doc");
+		assertEquals("C:/R-3.5/doc", config.getRDocDirectory());
+		assertNull(config.getRDocDirectoryPath());
+		
+		config.setRDocDirectory("C:/R-3.5/doc/");
+		assertEquals("C:/R-3.5/doc", config.getRDocDirectory());
+		assertNull(config.getRDocDirectoryPath());
+		
+		config.setRDocDirectory("${r_home}/doc");
+		assertEquals("${r_home}/doc", config.getRDocDirectory());
+		assertNull(config.getRDocDirectoryPath());
+		
+		config.setRDocDirectory("C:/R-3.5/doc");
+		config.setRDocDirectory(null);
+		assertNull(config.getRDocDirectory());
+		assertNull(config.getRDocDirectoryPath());
+		
+		config.setRDocDirectory("C:/R-3.5/doc");
+		config.setRDocDirectory("");
+		assertNull(config.getRDocDirectory());
+		assertNull(config.getRDocDirectoryPath());
+	}
+	
+	@Test
+	public void setget_RShareDirectory_Win() {
+		final TestREnvConfiguration config= createCommonLocalConfig(SystemUtils.OS_WIN);
+		
+		config.setRShareDirectory("C:/R-3.5/share");
+		assertEquals("C:/R-3.5/share", config.getRShareDirectory());
+		assertNull(config.getRShareDirectoryPath());
+		
+		config.setRShareDirectory("C:/R-3.5/share/");
+		assertEquals("C:/R-3.5/share", config.getRShareDirectory());
+		assertNull(config.getRShareDirectoryPath());
+		
+		config.setRShareDirectory("${r_home}/share");
+		assertEquals("${r_home}/share", config.getRShareDirectory());
+		assertNull(config.getRShareDirectoryPath());
+		
+		config.setRShareDirectory("C:/R-3.5/share");
+		config.setRShareDirectory(null);
+		assertNull(config.getRShareDirectory());
+		assertNull(config.getRShareDirectoryPath());
+		
+		config.setRShareDirectory("C:/R-3.5/share");
+		config.setRShareDirectory("");
+		assertNull(config.getRShareDirectory());
+		assertNull(config.getRShareDirectoryPath());
+	}
+	
+	@Test
+	public void setget_RIncludeDirectory_Win() {
+		final TestREnvConfiguration config= createCommonLocalConfig(SystemUtils.OS_WIN);
+		
+		config.setRIncludeDirectory("C:/R-3.5/include");
+		assertEquals("C:/R-3.5/include", config.getRIncludeDirectory());
+		assertNull(config.getRIncludeDirectoryPath());
+		
+		config.setRIncludeDirectory("C:/R-3.5/include/");
+		assertEquals("C:/R-3.5/include", config.getRIncludeDirectory());
+		assertNull(config.getRIncludeDirectoryPath());
+		
+		config.setRIncludeDirectory("${r_home}/include");
+		assertEquals("${r_home}/include", config.getRIncludeDirectory());
+		assertNull(config.getRIncludeDirectoryPath());
+		
+		config.setRIncludeDirectory("C:/R-3.5/include");
+		config.setRIncludeDirectory(null);
+		assertNull(config.getRIncludeDirectory());
+		assertNull(config.getRIncludeDirectoryPath());
+		
+		config.setRIncludeDirectory("C:/R-3.5/include");
+		config.setRIncludeDirectory("");
+		assertNull(config.getRIncludeDirectory());
+		assertNull(config.getRIncludeDirectoryPath());
+	}
+	
+}
diff --git a/core/org.eclipse.statet.rj.services.core/srcEnv/org/eclipse/statet/rj/renv/core/BasicREnvConfiguration.java b/core/org.eclipse.statet.rj.services.core/srcEnv/org/eclipse/statet/rj/renv/core/BasicREnvConfiguration.java
index 7d46244..6dd9990 100644
--- a/core/org.eclipse.statet.rj.services.core/srcEnv/org/eclipse/statet/rj/renv/core/BasicREnvConfiguration.java
+++ b/core/org.eclipse.statet.rj.services.core/srcEnv/org/eclipse/statet/rj/renv/core/BasicREnvConfiguration.java
@@ -259,6 +259,10 @@
 		}
 	}
 	
+	protected byte getOs() {
+		return ((this.flags & LOCAL) != 0) ? SystemUtils.getLocalOs() : 0;
+	}
+	
 	protected @Nullable String normalizeRArch(@Nullable String arch) {
 		if (arch == null || arch.isEmpty()) {
 			return null;
@@ -272,7 +276,7 @@
 		if (arch.equals("exec")) { //$NON-NLS-1$
 			return null;
 		}
-		if (SystemUtils.getLocalOs() == OS_WIN) {
+		if (getOs() == OS_WIN) {
 			final String knownArch= SystemUtils.getArch(arch);
 			if (knownArch != null) {
 				return knownArch;
@@ -284,7 +288,7 @@
 	
 	@Override
 	public @Nullable String getRShareDirectory() {
-		return this.rDocDirectory;
+		return this.rShareDirectory;
 	}
 	
 	@Override
