Index: src/main/java/org/apache/maven/plugin/assembly/format/FileFormatter.java
===================================================================
--- src/main/java/org/apache/maven/plugin/assembly/format/FileFormatter.java	(revision 490229)
+++ src/main/java/org/apache/maven/plugin/assembly/format/FileFormatter.java	(patched)
@@ -49,9 +49,13 @@
     public File format( File source, boolean filter, String lineEnding )
         throws AssemblyFormattingException
     {
-        File result = source;
+        return format ( source, filter, lineEnding, configSource.getTemporaryRootDirectory() );
+    }
 
-        File tempRoot = configSource.getTemporaryRootDirectory();
+    public File format( File source, boolean filter, String lineEnding, File tempRoot )
+        throws AssemblyFormattingException
+    {
+        File result = source;
         
         AssemblyFileUtils.verifyTempDirectoryAvailability( tempRoot, logger );
	 
Index: src/main/java/org/apache/maven/plugin/assembly/format/FileSetFormatter.java
==================================================================
--- src/main/java/org/apache/maven/plugin/assembly/format/FileSetFormatter.java	(revision 490229)
+++ src/main/java/org/apache/maven/plugin/assembly/format/FileSetFormatter.java	(patched)
@@ -37,8 +37,9 @@
         
         String lineEnding = AssemblyFileUtils.getLineEndingCharacters( lineEndingHint );
 
-        if ( lineEnding != null )
+        if ( lineEnding != null || set.isFiltered() )
         {
+            
             FileSet fileSet = new FileSet();
             fileSet.setLineEnding( lineEnding );
             fileSet.setDirectory( set.getDirectory() );
@@ -65,6 +66,7 @@
                 return archiveBaseDir;
             }
             
+            FileFormatter fileFormatter = new FileFormatter( configSource, logger );
             for ( int i = 0; i < files.length; i++ )
             {
                 String file = files[i];
@@ -74,18 +76,8 @@
                 targetFile.getParentFile().mkdirs();
 
                 File sourceFile = new File( archiveBaseDir, file );
-                
-                Reader sourceReader = null;
-                try
-                {
-                    sourceReader = new BufferedReader( new FileReader( sourceFile ) );
-                    
-                    AssemblyFileUtils.convertLineEndings( sourceReader, targetFile, lineEnding );
-                }
-                finally
-                {
-                    IOUtil.close( sourceReader );
-                }
+                sourceFile = fileFormatter.format( sourceFile, set.isFiltered(), lineEndingHint, formattedDir );
+                AssemblyFileUtils.copyFile(sourceFile,targetFile);
             }
         }
	 
Index: src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java
--- src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java	(revision 490229)
+++ src/main/java/org/apache/maven/plugin/assembly/utils/AssemblyFileUtils.java	(patched)
@@ -15,7 +15,9 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.RandomAccessFile;
 import java.io.Reader;
+import java.nio.channels.FileChannel;
 
 public final class AssemblyFileUtils
 {
@@ -149,4 +151,18 @@
 
         return value;
     }
+    
+    public static void copyFile ( File src, File dst ) throws IOException
+    {
+        FileChannel c1= new RandomAccessFile(src,"r").getChannel();
+        FileChannel c2= new RandomAccessFile(dst,"rw").getChannel();
+
+        long tCount= 0, size= c1.size();
+        while ( ( tCount += c2.transferFrom ( c1, 0, size-tCount ) ) < size )
+            ;
+
+        c2.force(true);
+        c2.close();
+    }    
+    
 }	 
