diff --git a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
index ca46e3a..9dcef0b 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
@@ -106,6 +106,7 @@
         // -------------------------------------------------------------------------------------------------------------
         // suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137
 
+        suite.addTestSuite( MavenITmng6386BaseUriPropertyTest.class );
         suite.addTestSuite( MavenITmng6330RelativePath.class );
         suite.addTestSuite( MavenITmng6240PluginExtensionAetherProvider.class );
         suite.addTestSuite( MavenITmng6223FindBasedir.class );
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3760BaseUriPropertyTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3760BaseUriPropertyTest.java
index 4e42ce6..4116330 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3760BaseUriPropertyTest.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3760BaseUriPropertyTest.java
@@ -37,7 +37,7 @@
 
     public MavenITmng3760BaseUriPropertyTest()
     {
-        super( "(2.1.0-M1,3.0-alpha-1),(3.0-alpha-2,)" ); // 2.1.0-M2+
+        super( "(2.1.0-M1,3.0-alpha-1),(3.0-alpha-2,3.5.4)" ); // 2.1.0-M2+
     }
 
     public void testitMNG3760()
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6386BaseUriPropertyTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6386BaseUriPropertyTest.java
new file mode 100644
index 0000000..3214ce6
--- /dev/null
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6386BaseUriPropertyTest.java
@@ -0,0 +1,100 @@
+package org.apache.maven.it;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Properties;
+
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+import org.apache.maven.shared.utils.Os;
+
+/**
+ * This is a test set for <a href="https://issues.apache.org/jira/browse/MNG-6386">MNG-6386</a>.
+ */
+public class MavenITmng6386BaseUriPropertyTest
+    extends AbstractMavenIntegrationTestCase
+{
+
+    public MavenITmng6386BaseUriPropertyTest()
+    {
+        super( "[3.5.4,)" );
+    }
+
+    public void testitMNG6386()
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-6386" ).getCanonicalFile();
+
+        Verifier verifier = newVerifier( testDir.getAbsolutePath() );
+        verifier.setAutoclean( false );
+        verifier.deleteDirectory( "target" );
+        verifier.setLogFileName( "log-basic.txt" );
+        verifier.executeGoal( "validate" );
+        verifier.verifyErrorFreeLog();
+        verifier.resetStreams();
+
+        Properties props = verifier.loadProperties( "target/profile.properties" );
+        String pomProperty = props.getProperty( "project.properties.pomProperty" );
+        // set via project
+        assertEquals( testDir.toPath().toUri().toASCIIString(), pomProperty );
+        // check that baseUri begins with file:///
+        assertTrue( pomProperty.startsWith( "file:///" ) );
+    }
+
+     public void testitMNG6386UnicodeChars()
+        throws Exception
+    {
+        String fileEncoding = System.getProperty( "file.encoding" );
+        /*
+         * Unfortunately, AbstractMavenIntegrationTestCase still uses JUnit 3.8 which does not have
+         * Assume, so we cannot make assumptions and skip the test on non-compatible systems.
+         */
+        if ( Os.isFamily( Os.FAMILY_WINDOWS ) ||
+             "UTF-8".equalsIgnoreCase( fileEncoding ) || "UTF8".equalsIgnoreCase( fileEncoding ) )
+        {
+            File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-6386-это по-русский" ).getCanonicalFile();
+
+            Verifier verifier = newVerifier( testDir.getAbsolutePath() );
+            verifier.setAutoclean( false );
+            verifier.deleteDirectory( "target" );
+            verifier.setLogFileName( "log-basic.txt" );
+            verifier.executeGoal( "validate" );
+            verifier.verifyErrorFreeLog();
+            verifier.resetStreams();
+
+            Properties props = verifier.loadProperties( "target/profile.properties" );
+            String pomProperty = props.getProperty( "project.properties.pomProperty" );
+            // set via project
+            assertEquals( testDir.toPath().toUri().toASCIIString(), pomProperty );
+            // check that baseUri begins with file:///
+            assertTrue( pomProperty.startsWith( "file:///" ) );
+            // check that baseUri ends with это по-русский/
+            assertTrue( pomProperty.endsWith( "%D1%8D%D1%82%D0%BE%20%D0%BF%D0%BE-%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9/" ) );
+        }
+        else
+        {
+            System.out.println();
+            System.out.println( "[WARNING] Skipping MNG-6386 Unicode Chars Test on incompatible encoding: " + fileEncoding );
+            System.out.println();
+        }
+    }
+
+}
diff --git "a/core-it-suite/src/test/resources/mng-6386-\321\215\321\202\320\276 \320\277\320\276-\321\200\321\203\321\201\321\201\320\272\320\270\320\271/pom.xml" "b/core-it-suite/src/test/resources/mng-6386-\321\215\321\202\320\276 \320\277\320\276-\321\200\321\203\321\201\321\201\320\272\320\270\320\271/pom.xml"
new file mode 100644
index 0000000..fe7dacf
--- /dev/null
+++ "b/core-it-suite/src/test/resources/mng-6386-\321\215\321\202\320\276 \320\277\320\276-\321\200\321\203\321\201\321\201\320\272\320\270\320\271/pom.xml"
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.mng6386</groupId>
+  <artifactId>child</artifactId>
+  <version>0.1</version>
+
+  <name>Maven Integration Test :: MNG-6386 (Unicode Chars)</name>
+  <description>
+    Test project.baseUri property (RFC 3986 compliance).
+  </description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-expression</artifactId>
+        <version>2.1-SNAPSHOT</version>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>eval</goal>
+            </goals>
+            <configuration>
+              <outputFile>target/profile.properties</outputFile>
+              <expressions>
+                <expression>project/properties</expression>
+              </expressions>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <properties>
+    <pomProperty>${project.baseUri}</pomProperty>
+  </properties>
+</project>
diff --git a/core-it-suite/src/test/resources/mng-6386/pom.xml b/core-it-suite/src/test/resources/mng-6386/pom.xml
new file mode 100644
index 0000000..8ecb601
--- /dev/null
+++ b/core-it-suite/src/test/resources/mng-6386/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.mng6386</groupId>
+  <artifactId>child</artifactId>
+  <version>0.1</version>
+
+  <name>Maven Integration Test :: MNG-6386</name>
+  <description>
+    Test project.baseUri property (RFC 3986 compliance).
+  </description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-expression</artifactId>
+        <version>2.1-SNAPSHOT</version>
+        <executions>
+          <execution>
+            <phase>validate</phase>
+            <goals>
+              <goal>eval</goal>
+            </goals>
+            <configuration>
+              <outputFile>target/profile.properties</outputFile>
+              <expressions>
+                <expression>project/properties</expression>
+              </expressions>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <properties>
+    <pomProperty>${project.baseUri}</pomProperty>
+  </properties>
+</project>
