diff --git a/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java b/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java
index f17b5af..03cad62 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/AssemblerConfigurationSource.java
@@ -67,11 +67,6 @@
     MavenProject getProject();
 
     /**
-     * @return Site included.
-     */
-    boolean isSiteIncluded();
-
-    /**
      * @return The site directory.
      */
     File getSiteDirectory();
diff --git a/src/main/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReader.java b/src/main/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReader.java
index 3581f88..2dfe932 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReader.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReader.java
@@ -383,7 +383,7 @@
             IOUtil.close( reader );
         }
 
-        if ( configSource.isSiteIncluded() || assembly.isIncludeSiteDirectory() )
+        if ( assembly.isIncludeSiteDirectory() )
         {
             includeSiteInAssembly( assembly, configSource );
         }
diff --git a/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java b/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
index 3aea1d6..3c11a13 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
@@ -246,15 +246,6 @@
     private File siteDirectory;
 
     /**
-     * Set to true to include the site generated by site:site goal.
-     *
-     * @deprecated Please set this variable in the assembly descriptor instead
-     */
-    @Deprecated
-    @Parameter( property = "includeSite", defaultValue = "false" )
-    private boolean includeSite;
-
-    /**
      * Set to true in order to not fail when a descriptor is missing.
      */
     @Parameter( property = "assembly.ignoreMissingDescriptor", defaultValue = "false" )
@@ -688,12 +679,6 @@
     }
 
     @Override
-    public boolean isSiteIncluded()
-    {
-        return includeSite;
-    }
-
-    @Override
     public String getFinalName()
     {
         return finalName;
@@ -818,11 +803,6 @@
         this.descriptorRefs = descriptorRefs;
     }
 
-    public void setIncludeSite( final boolean includeSite )
-    {
-        this.includeSite = includeSite;
-    }
-
     public void setTempRoot( final File tempRoot )
     {
         this.tempRoot = tempRoot;
diff --git a/src/test/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReaderTest.java b/src/test/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReaderTest.java
index 9feed6c..e4377aa 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReaderTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/io/DefaultAssemblyReaderTest.java
@@ -560,50 +560,6 @@
 
         expect( configSource.getProject() ).andReturn( project ).anyTimes();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false ).anyTimes();
-        DefaultAssemblyArchiverTest.setupInterpolators( configSource );
-
-        mockManager.replayAll();
-
-        final Assembly result = new DefaultAssemblyReader().readAssembly( sr, "testLocation", null, configSource );
-
-        assertEquals( assembly.getId(), result.getId() );
-
-        final List<FileSet> fileSets = result.getFileSets();
-
-        assertEquals( 1, fileSets.size() );
-
-        assertEquals( "/site", fileSets.get( 0 ).getOutputDirectory() );
-
-        mockManager.verifyAll();
-    }
-
-    public void testReadAssembly_ShouldReadAssemblyWithSiteDirInclusionFromConfigWithoutComponentsOrInterpolation()
-        throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
-    {
-        final Assembly assembly = new Assembly();
-        assembly.setId( "test" );
-
-        final StringReader sr = writeToStringReader( assembly );
-
-        final File siteDir = fileManager.createTempDir();
-
-        expect( configSource.getSiteDirectory() ).andReturn( siteDir ).anyTimes();
-
-        final File basedir = fileManager.createTempDir();
-
-        expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
-
-        final Model model = new Model();
-        model.setGroupId( "group" );
-        model.setArtifactId( "artifact" );
-        model.setVersion( "version" );
-
-        final MavenProject project = new MavenProject( model );
-
-        expect( configSource.getProject() ).andReturn( project ).anyTimes();
-
-        expect( configSource.isSiteIncluded() ).andReturn( true ).anyTimes();
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
 
         mockManager.replayAll();
@@ -667,7 +623,6 @@
         final MavenProject project = new MavenProject( model );
         expect( configSource.getProject() ).andReturn( project ).anyTimes();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false ).anyTimes();
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
 
         mockManager.replayAll();
@@ -733,7 +688,6 @@
 
         expect( configSource.getProject() ).andReturn( project ).atLeastOnce();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false );
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
 
         mockManager.replayAll();
@@ -782,8 +736,6 @@
 
         expect( configSource.getProject() ).andReturn( project ).anyTimes();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false ).anyTimes();
-
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
 
         mockManager.replayAll();
@@ -810,8 +762,6 @@
 
         expect( configSource.getProject() ).andReturn( new MavenProject( new Model() ) ).anyTimes();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false ).anyTimes();
-
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
 
         Writer writer = null;
@@ -845,8 +795,6 @@
 
         expect( configSource.getProject() ).andReturn( new MavenProject( new Model() ) ).anyTimes();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false ).anyTimes();
-
         expect( configSource.isIgnoreMissingDescriptor() ).andReturn( false ).anyTimes();
 
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
@@ -1095,8 +1043,6 @@
 
         expect( configSource.getProject() ).andReturn( new MavenProject( new Model() ) ).anyTimes();
 
-        expect( configSource.isSiteIncluded() ).andReturn( false ).anyTimes();
-
         expect( configSource.isIgnoreMissingDescriptor() ).andReturn( ignoreMissing ).anyTimes();
         DefaultAssemblyArchiverTest.setupInterpolators( configSource );
 
