diff --git a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java
index 0e5c7d6..f2f76c1 100644
--- a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java
+++ b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/AntPlugin.java
@@ -19,7 +19,7 @@
 package org.apache.felix.bundleplugin;
 
 
-import java.io.FileOutputStream;
+import java.io.File;
 import java.io.OutputStream;
 import java.util.Iterator;
 import java.util.Map;
@@ -75,7 +75,7 @@
             // save the BND generated bundle to the same output directory that maven uses
             bndProperties.setProperty( "-output", "${maven.build.dir}/${maven.build.finalName}.jar" );
 
-            OutputStream out = new FileOutputStream( baseDir + BUILD_BND );
+            OutputStream out = buildContext.newFileOutputStream( new File(baseDir + BUILD_BND) );
             bndProperties.store( out, " Merged BND Instructions" );
             IOUtil.close( out );
 
diff --git a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
index 462a9d2..b750fae 100644
--- a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
+++ b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/BundlePlugin.java
@@ -90,6 +90,7 @@
 import org.codehaus.plexus.util.PropertyUtils;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.WriterFactory;
+import org.sonatype.plexus.build.incremental.BuildContext;
 
 import aQute.bnd.header.Attrs;
 import aQute.bnd.header.OSGiHeader;
@@ -313,6 +314,9 @@
     @Parameter( defaultValue = "${session}", readonly = true, required = true )
     private MavenSession m_mavenSession;
 
+    @Component
+    protected BuildContext buildContext;
+    
     private static final String MAVEN_SYMBOLICNAME = "maven-symbolicname";
     private static final String MAVEN_RESOURCES = "{maven-resources}";
     private static final String MAVEN_TEST_RESOURCES = "{maven-test-resources}";
@@ -519,7 +523,7 @@
 
                 try
                 {
-                    ManifestPlugin.writeManifest( builder, outputFile, niceManifest, exportScr, scrLocation );
+                    ManifestPlugin.writeManifest( builder, outputFile, niceManifest, exportScr, scrLocation, buildContext );
                 }
                 catch ( IOException e )
                 {
diff --git a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
index ff33521..edb81fa 100644
--- a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
+++ b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
@@ -22,7 +22,6 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -33,23 +32,25 @@
 import java.util.Properties;
 import java.util.jar.Manifest;
 
-import aQute.bnd.header.Parameters;
-import aQute.bnd.osgi.Instructions;
-import aQute.bnd.osgi.Processor;
-import aQute.lib.collections.ExtList;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.dependency.graph.DependencyNode;
+import org.sonatype.plexus.build.incremental.BuildContext;
 
+import aQute.bnd.header.Parameters;
 import aQute.bnd.osgi.Analyzer;
 import aQute.bnd.osgi.Builder;
+import aQute.bnd.osgi.Instructions;
 import aQute.bnd.osgi.Jar;
+import aQute.bnd.osgi.Processor;
 import aQute.bnd.osgi.Resource;
-import org.apache.maven.shared.dependency.graph.DependencyNode;
+import aQute.lib.collections.ExtList;
 
 
 /**
@@ -66,6 +67,9 @@
     @Parameter( property = "rebuildBundle" )
     protected boolean rebuildBundle;
 
+    @Component
+    private BuildContext buildContext;
+    
     @Override
     protected void execute( MavenProject project, DependencyNode dependencyGraph, Map<String, String> instructions, Properties properties, Jar[] classpath )
         throws MojoExecutionException
@@ -99,7 +103,7 @@
 
         try
         {
-            writeManifest( analyzer, outputFile, niceManifest, exportScr, scrLocation );
+            writeManifest( analyzer, outputFile, niceManifest, exportScr, scrLocation, buildContext );
         }
         catch ( Exception e )
         {
@@ -122,12 +126,12 @@
     public Manifest getManifest( MavenProject project, DependencyNode dependencyGraph, Jar[] classpath ) throws IOException, MojoFailureException,
         MojoExecutionException, Exception
     {
-        return getManifest( project, dependencyGraph, new LinkedHashMap<String, String>(), new Properties(), classpath );
+        return getManifest( project, dependencyGraph, new LinkedHashMap<String, String>(), new Properties(), classpath, buildContext );
     }
 
 
-    public Manifest getManifest( MavenProject project, DependencyNode dependencyGraph, Map<String, String> instructions, Properties properties, Jar[] classpath )
-        throws IOException, MojoFailureException, MojoExecutionException, Exception
+    public Manifest getManifest( MavenProject project, DependencyNode dependencyGraph, Map<String, String> instructions, Properties properties, Jar[] classpath,
+            BuildContext buildContext) throws IOException, MojoFailureException, MojoExecutionException, Exception
     {
         Analyzer analyzer = getAnalyzer(project, dependencyGraph, instructions, properties, classpath);
 
@@ -136,7 +140,7 @@
 
         if (exportScr)
         {
-            exportScr(analyzer, jar, scrLocation);
+            exportScr(analyzer, jar, scrLocation, buildContext);
         }
 
         // cleanup...
@@ -145,7 +149,7 @@
         return manifest;
     }
     
-    private static void exportScr(Analyzer analyzer, Jar jar, File scrLocation) throws Exception {
+    private static void exportScr(Analyzer analyzer, Jar jar, File scrLocation, BuildContext buildContext) throws Exception {
         scrLocation.mkdirs();
 
         String bpHeader = analyzer.getProperty(Analyzer.SERVICE_COMPONENT);
@@ -159,7 +163,7 @@
                 Resource resource = jar.getResource(root);
                 if (resource != null)
                 {
-                    writeSCR(resource, location);
+                    writeSCR(resource, location, buildContext);
                 }
             }
             else
@@ -168,16 +172,16 @@
                 {
                     String path = entry.getKey();
                     Resource resource = entry.getValue();
-                    writeSCR(resource, new File(location, path));
+                    writeSCR(resource, new File(location, path), buildContext);
                 }
             }
         }
     }
 
-    private static void writeSCR(Resource resource, File destination) throws Exception
+    private static void writeSCR(Resource resource, File destination, BuildContext buildContext) throws Exception
     {
         destination.getParentFile().mkdirs();
-        OutputStream os = new FileOutputStream(destination);
+        OutputStream os = buildContext.newFileOutputStream(destination);
         try
         {
             resource.write(os);
@@ -275,7 +279,7 @@
                 if ( !entryFile.exists() || entry.getValue().lastModified() == 0 )
                 {
                     entryFile.getParentFile().mkdirs();
-                    OutputStream os = new FileOutputStream( entryFile );
+                    OutputStream os = buildContext.newFileOutputStream( entryFile );
                     entry.getValue().write( os );
                     os.close();
                 }
@@ -287,7 +291,7 @@
 
 
     public static void writeManifest( Analyzer analyzer, File outputFile, boolean niceManifest,
-            boolean exportScr, File scrLocation ) throws Exception
+            boolean exportScr, File scrLocation, BuildContext buildContext ) throws Exception
     {
         Properties properties = analyzer.getProperties();
         Jar jar = analyzer.getJar();
@@ -313,21 +317,21 @@
             File parentFile = outputFile.getParentFile();
             parentFile.mkdirs();
         }
-        writeManifest( manifest, outputFile, niceManifest );
+        writeManifest( manifest, outputFile, niceManifest, buildContext );
         
         if (exportScr)
         {
-            exportScr(analyzer, jar, scrLocation);            
+            exportScr(analyzer, jar, scrLocation, buildContext);            
         }
     }
 
 
-    public static void writeManifest( Manifest manifest, File outputFile, boolean niceManifest ) throws IOException
+    public static void writeManifest( Manifest manifest, File outputFile, boolean niceManifest,
+            BuildContext buildContext ) throws IOException
     {
         outputFile.getParentFile().mkdirs();
 
-        FileOutputStream os;
-        os = new FileOutputStream( outputFile );
+        OutputStream os = buildContext.newFileOutputStream( outputFile );
         try
         {
             ManifestWriter.outputManifest( manifest, os, niceManifest );
diff --git a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/AbstractBaselinePlugin.java b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/AbstractBaselinePlugin.java
index b4e5e0f..a28efd5 100644
--- a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/AbstractBaselinePlugin.java
+++ b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/AbstractBaselinePlugin.java
@@ -47,6 +47,7 @@
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.StringUtils;
+import org.sonatype.plexus.build.incremental.BuildContext;
 
 import aQute.bnd.differ.Baseline;
 import aQute.bnd.differ.Baseline.Info;
@@ -148,6 +149,9 @@
     @Parameter
     protected List<String> supportedProjectTypes = Arrays.asList( new String[] { "jar", "bundle" } );
 
+    @Component
+    protected BuildContext buildContext;
+    
     public final void execute()
         throws MojoExecutionException, MojoFailureException
     {
diff --git a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java
index 5774d7d..43665a6 100644
--- a/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java
+++ b/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/baseline/BaselineReport.java
@@ -19,7 +19,6 @@
 package org.apache.felix.bundleplugin.baseline;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -100,7 +99,7 @@
 
             try
             {
-                target = new FileOutputStream( targetFile );
+                target = buildContext.newFileOutputStream( targetFile );
                 IOUtil.copy( source, target );
             }
             catch ( IOException e )
