diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4660ResumeFromTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4660ResumeFromTest.java
index 2d3191d..e008c2f 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4660ResumeFromTest.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4660ResumeFromTest.java
@@ -38,7 +38,7 @@
     /**
      * Test that the --resume-from flag resolves dependencies inside the same Maven project
      * without having them installed first.
-     * This test case uses the target/classes folder of module-a, for the situation where
+     * This test case uses the target/classes directory of module-a, for the situation where
      * module-a has not been packaged.
      */
     public void testShouldResolveOutputDirectoryFromEarlierBuild() throws Exception
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6256SpecialCharsAlternatePOMLocation.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6256SpecialCharsAlternatePOMLocation.java
index 5038113..027c1d0 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6256SpecialCharsAlternatePOMLocation.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng6256SpecialCharsAlternatePOMLocation.java
@@ -26,7 +26,7 @@
 /**
  * This is a test set for <a href="https://issues.apache.org/jira/browse/MNG-6256">MNG-6256</a>: check that directories
  * passed via <code>-f/--file</code> containing special characters do not break the script. E.g
- * <code>-f "folderWithClosing)Bracket/pom.xml"</code>.
+ * <code>-f "directoryWithClosing)Bracket/pom.xml"</code>.
  */
 public class MavenITmng6256SpecialCharsAlternatePOMLocation
     extends AbstractMavenIntegrationTestCase
@@ -42,23 +42,23 @@
     }
 
     /**
-     * check script is working when path to POM is set to <code>folder-with- -space</code>
+     * check script is working when path to POM is set to <code>directory-with- -space</code>
      */
-    public void testFolderWithSpace()
+    public void testDirectoryWithSpace()
         throws Exception
     {
-        runWithMvnFileLongOption( "folder-with- -space" );
-        runWithMvnFileShortOption( "folder-with- -space" );
+        runWithMvnFileLongOption( "directory-with- -space" );
+        runWithMvnFileShortOption( "directory-with- -space" );
     }
 
     /**
-     * check script is working when path to POM is set to <code>folder-with-)-closing-bracket</code>
+     * check script is working when path to POM is set to <code>directory-with-)-closing-bracket</code>
      */
-    public void testFolderWithClosingBracket()
+    public void testDirectoryWithClosingBracket()
         throws Exception
     {
-        runWithMvnFileLongOption( "folder-with-)-closing-bracket" );
-        runWithMvnFileShortOption( "folder-with-)-closing-bracket" );
+        runWithMvnFileLongOption( "directory-with-)-closing-bracket" );
+        runWithMvnFileShortOption( "directory-with-)-closing-bracket" );
     }
 
     private void runWithMvnFileLongOption( String subDir )
diff --git a/core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/folder-with- -space/pom.xml b/core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/directory-with- -space/pom.xml
similarity index 100%
rename from core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/folder-with- -space/pom.xml
rename to core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/directory-with- -space/pom.xml
diff --git "a/core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/folder-with-\051-closing-bracket/pom.xml" "b/core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/directory-with-\051-closing-bracket/pom.xml"
similarity index 100%
rename from "core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/folder-with-\051-closing-bracket/pom.xml"
rename to "core-it-suite/src/test/resources/mng-6256-special-chars-alternate-pom-location/directory-with-\051-closing-bracket/pom.xml"
diff --git a/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/AbstractMavenIntegrationTestCase.java b/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/AbstractMavenIntegrationTestCase.java
index 168101f..bb0a101 100644
--- a/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/AbstractMavenIntegrationTestCase.java
+++ b/core-it-support/maven-it-helper/src/main/java/org/apache/maven/it/AbstractMavenIntegrationTestCase.java
@@ -614,10 +614,10 @@
         return verifier;
     }
 
-    private boolean hasDotMvnSubfolder( Path path )
+    private boolean hasDotMvnSubDirectory( Path path )
     {
-        final Path probablySubfolder = path.resolve( ".mvn" );
-        return Files.exists( probablySubfolder ) && Files.isDirectory( probablySubfolder );
+        final Path probablySubDirectory = path.resolve( ".mvn" );
+        return Files.exists( probablySubDirectory ) && Files.isDirectory( probablySubDirectory );
     }
 
     private String findMultiModuleProjectDirectory( String basedir )
@@ -633,7 +633,7 @@
 
         while ( !fileSystemRoots.contains( path ) )
         {
-            if ( hasDotMvnSubfolder( path ) )
+            if ( hasDotMvnSubDirectory( path ) )
             {
                 result = path;
                 break;
diff --git a/core-it-support/maven-it-sample-archetype/src/main/resources/archetype-resources/src/test/java/MavenITmngXXXXDescriptionOfProblemTest.java b/core-it-support/maven-it-sample-archetype/src/main/resources/archetype-resources/src/test/java/MavenITmngXXXXDescriptionOfProblemTest.java
index 50aa5c8..1392707 100644
--- a/core-it-support/maven-it-sample-archetype/src/main/resources/archetype-resources/src/test/java/MavenITmngXXXXDescriptionOfProblemTest.java
+++ b/core-it-support/maven-it-sample-archetype/src/main/resources/archetype-resources/src/test/java/MavenITmngXXXXDescriptionOfProblemTest.java
@@ -32,10 +32,10 @@
 /**
  * This is a sample integration test. The IT tests typically
  * operate by having a sample project in the
- * /src/test/resources folder along with a junit test like
+ * /src/test/resources directory along with a junit test like
  * this one. The junit test uses the verifier (which uses
  * the invoker) to invoke a new instance of Maven on the
- * project in the resources folder. It then checks the
+ * project in the resources directory. It then checks the
  * results. This is a non-trivial example that shows two
  * phases. See more information inline in the code.
  *
diff --git a/core-it-support/maven-it-sample/src/test/java/org/apache/maven/it/MavenITmngXXXXDescriptionOfProblemTest.java b/core-it-support/maven-it-sample/src/test/java/org/apache/maven/it/MavenITmngXXXXDescriptionOfProblemTest.java
index 311d02b..b4e1079 100644
--- a/core-it-support/maven-it-sample/src/test/java/org/apache/maven/it/MavenITmngXXXXDescriptionOfProblemTest.java
+++ b/core-it-support/maven-it-sample/src/test/java/org/apache/maven/it/MavenITmngXXXXDescriptionOfProblemTest.java
@@ -29,10 +29,10 @@
 /**
  * This is a sample integration test. The IT tests typically
  * operate by having a sample project in the
- * /src/test/resources folder along with a junit test like
+ * /src/test/resources directory along with a junit test like
  * this one. The junit test uses the verifier (which uses
  * the invoker) to invoke a new instance of Maven on the
- * project in the resources folder. It then checks the
+ * project in the resources directory. It then checks the
  * results. This is a non-trivial example that shows two
  * phases. See more information inline in the code.
  *
