diff --git a/src/it/fast-delete/invoker.properties b/src/it/fast-delete/invoker.properties
new file mode 100644
index 0000000..808c49e
--- /dev/null
+++ b/src/it/fast-delete/invoker.properties
@@ -0,0 +1,18 @@
+# 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.
+
+invoker.goals = install clean -Dorg.slf4j.simpleLogger.showThreadName=true -X -e
diff --git a/src/it/fast-delete/pom.xml b/src/it/fast-delete/pom.xml
new file mode 100644
index 0000000..9203056
--- /dev/null
+++ b/src/it/fast-delete/pom.xml
@@ -0,0 +1,52 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0"
+		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>test</groupId>
+	<artifactId>fast-delete</artifactId>
+	<version>1.0-SNAPSHOT</version>
+
+	<name>Fast delete</name>
+	<description>Check that fast delete is invoked.</description>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-clean-plugin</artifactId>
+				<version>@project.version@</version>
+				<configuration>
+					<fast>true</fast>
+					<fastDir>${project.basedir}${file.separator}.fastdir</fastDir>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/src/it/fast-delete/verify.groovy b/src/it/fast-delete/verify.groovy
new file mode 100644
index 0000000..59f5940
--- /dev/null
+++ b/src/it/fast-delete/verify.groovy
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+
+File buildLog = new File(basedir, 'build.log')
+return buildLog.text.contains('mvn-background-cleaner')
diff --git a/src/main/java/org/apache/maven/plugins/clean/CleanMojo.java b/src/main/java/org/apache/maven/plugins/clean/CleanMojo.java
index 3dff361..afc0df4 100644
--- a/src/main/java/org/apache/maven/plugins/clean/CleanMojo.java
+++ b/src/main/java/org/apache/maven/plugins/clean/CleanMojo.java
@@ -258,8 +258,17 @@
                     if (fileset.getDirectory() == null) {
                         throw new MojoExecutionException("Missing base directory for " + fileset);
                     }
-                    GlobSelector selector = new GlobSelector(
-                            fileset.getIncludes(), fileset.getExcludes(), fileset.isUseDefaultExcludes());
+                    final String[] includes = fileset.getIncludes();
+                    final String[] excludes = fileset.getExcludes();
+                    final boolean useDefaultExcludes = fileset.isUseDefaultExcludes();
+                    final GlobSelector selector;
+                    if ((includes != null && includes.length != 0)
+                            || (excludes != null && excludes.length != 0)
+                            || useDefaultExcludes) {
+                        selector = new GlobSelector(includes, excludes, useDefaultExcludes);
+                    } else {
+                        selector = null;
+                    }
                     cleaner.delete(
                             fileset.getDirectory(), selector, fileset.isFollowSymlinks(), failOnError, retryOnError);
                 }
diff --git a/src/site/apt/examples/delete_additional_files.apt.vm b/src/site/apt/examples/delete_additional_files.apt.vm
index 40e5bf6..84ed079 100644
--- a/src/site/apt/examples/delete_additional_files.apt.vm
+++ b/src/site/apt/examples/delete_additional_files.apt.vm
@@ -73,3 +73,6 @@
 
  You could also define file set rules in a parent POM. In this case, the clean plugin adds the subproject
  basedir to the defined relative path.
+
+ <<Note:>> The <<<fast>>> delete method will not work for any <<<fileset>>> which defines any <<<includes>>>
+ or <<<excludes>>>, or sets <<<followSymlinks>>> to <<<false>>>, or sets <<<useDefaultExcludes>>> to <<<true>>>.
\ No newline at end of file
