diff --git a/pom.xml b/pom.xml
index 52414f8..5f2226b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,7 +68,7 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.maven</groupId>
-      <artifactId>maven-core</artifactId>
+      <artifactId>maven-core-api</artifactId>
       <version>${mavenVersion}</version>
     </dependency>
     <dependency>
diff --git a/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java b/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
index 0b10ab8..8ce0b6b 100644
--- a/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
+++ b/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
@@ -24,8 +24,8 @@
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 
 /**
  * @since 1.0-beta-3
@@ -33,13 +33,13 @@
 public class AbstractMavenFilteringRequest
 {
 
-    private MavenProject mavenProject;
+    private Project mavenProject;
 
     private List<String> filters;
 
     private boolean escapeWindowsPaths = true;
 
-    private MavenSession mavenSession;
+    private Session mavenSession;
 
     /**
      * List of Strings considered as expressions which contains values in the project/pom: pom project Default value
@@ -96,8 +96,8 @@
      * @param filters The list of filters.
      * @param mavenSession The MavenSession.
      */
-    protected AbstractMavenFilteringRequest( MavenProject mavenProject, List<String> filters,
-                                             MavenSession mavenSession )
+    protected AbstractMavenFilteringRequest( Project mavenProject, List<String> filters,
+                                             Session mavenSession )
     {
         initDefaults();
         this.mavenProject = mavenProject;
@@ -117,7 +117,7 @@
     /**
      * @return The MavenProject
      */
-    public MavenProject getMavenProject()
+    public Project getMavenProject()
     {
         return mavenProject;
     }
@@ -127,7 +127,7 @@
      *
      * @param mavenProject The MavenProject to be set.
      */
-    public void setMavenProject( MavenProject mavenProject )
+    public void setMavenProject( Project mavenProject )
     {
         this.mavenProject = mavenProject;
     }
@@ -213,7 +213,7 @@
     /**
      * @return Current value of mavenSession
      */
-    public MavenSession getMavenSession()
+    public Session getMavenSession()
     {
         return mavenSession;
     }
@@ -221,7 +221,7 @@
     /**
      * @param mavenSession Set new value for the MavenSession of the instance.
      */
-    public void setMavenSession( MavenSession mavenSession )
+    public void setMavenSession( Session mavenSession )
     {
         this.mavenSession = mavenSession;
     }
diff --git a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
index be8908f..85032b2 100644
--- a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
@@ -29,8 +29,8 @@
 import java.util.Properties;
 import java.util.TreeSet;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.shared.utils.StringUtils;
 import org.apache.maven.shared.utils.io.FileUtils;
@@ -52,10 +52,10 @@
 {
 
     @Override
-    public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final MavenProject mavenProject,
+    public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final Project mavenProject,
                                                                    List<String> filters,
                                                                    final boolean escapedBackslashesInFilePath,
-                                                                   MavenSession mavenSession,
+                                                                   Session mavenSession,
                                                                    MavenResourcesExecution mavenResourcesExecution )
                                                                        throws MavenFilteringException
     {
@@ -92,8 +92,8 @@
         // Project properties
         if ( request.getMavenProject() != null )
         {
-            baseProps.putAll( request.getMavenProject().getProperties() == null ? Collections.emptyMap()
-                            : request.getMavenProject().getProperties() );
+            baseProps.putAll( request.getMavenProject().getModel().getProperties() == null ? Collections.emptyMap()
+                            : request.getMavenProject().getModel().getProperties() );
         }
         // TODO this is NPE free but do we consider this as normal
         // or do we have to throw an MavenFilteringException with mavenSession cannot be null
@@ -118,7 +118,8 @@
 
         final Properties filterProperties = new Properties();
 
-        File basedir = request.getMavenProject() != null ? request.getMavenProject().getBasedir() : new File( "." );
+        File basedir = request.getMavenProject() != null
+                ? request.getMavenProject().getBasedir().toFile() : new File( "." );
 
         loadProperties( filterProperties, basedir, request.getFileFilters(), baseProps );
         if ( filterProperties.size() < 1 )
@@ -130,7 +131,8 @@
         {
             if ( request.isInjectProjectBuildFilters() )
             {
-                List<String> buildFilters = new ArrayList<>( request.getMavenProject().getBuild().getFilters() );
+                List<String> buildFilters =
+                        new ArrayList<>( request.getMavenProject().getModel().getBuild().getFilters() );
 
                 // JDK-8015656: (coll) unexpected NPE from removeAll
                 if ( request.getFileFilters() != null )
@@ -142,8 +144,8 @@
             }
 
             // Project properties
-            filterProperties.putAll( request.getMavenProject().getProperties() == null ? Collections.emptyMap()
-                            : request.getMavenProject().getProperties() );
+            filterProperties.putAll( request.getMavenProject().getModel().getProperties() == null
+                    ? Collections.emptyMap() : request.getMavenProject().getModel().getProperties() );
         }
         if ( request.getMavenSession() != null )
         {
@@ -221,7 +223,7 @@
 
         private LinkedHashSet<String> delimiters;
 
-        private MavenProject project;
+        private Project project;
 
         private ValueSource propertiesValueSource;
 
@@ -231,11 +233,11 @@
 
         private boolean escapeWindowsPaths;
 
-        private final MavenSession mavenSession;
+        private final Session mavenSession;
 
         private boolean supportMultiLineFiltering;
 
-        Wrapper( LinkedHashSet<String> delimiters, MavenProject project, MavenSession mavenSession,
+        Wrapper( LinkedHashSet<String> delimiters, Project project, Session mavenSession,
                  ValueSource propertiesValueSource, List<String> projectStartExpressions, String escapeString,
                  boolean escapeWindowsPaths, boolean supportMultiLineFiltering )
         {
@@ -282,8 +284,8 @@
 
     private static Interpolator createInterpolator( LinkedHashSet<String> delimiters,
                                                     List<String> projectStartExpressions,
-                                                    ValueSource propertiesValueSource, MavenProject project,
-                                                    MavenSession mavenSession, String escapeString,
+                                                    ValueSource propertiesValueSource, Project project,
+                                                    Session mavenSession, String escapeString,
                                                     boolean escapeWindowsPaths )
     {
         MultiDelimiterStringSearchInterpolator interpolator = new MultiDelimiterStringSearchInterpolator();
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java b/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java
index a123123..ae49fc0 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultFilterInfo.java
@@ -21,8 +21,8 @@
 
 import java.util.List;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils;
 
 /**
@@ -41,9 +41,9 @@
      * @return {@link java.util.List} of FileUtils.FilterWrapper
      * @since 1.0-beta-2
      */
-    List<FileUtils.FilterWrapper> getDefaultFilterWrappers( MavenProject mavenProject, List<String> filters,
+    List<FileUtils.FilterWrapper> getDefaultFilterWrappers( Project mavenProject, List<String> filters,
                                                             boolean escapedBackslashesInFilePath,
-                                                            MavenSession mavenSession,
+                                                            Session mavenSession,
                                                             MavenResourcesExecution mavenResourcesExecution )
                                                                 throws MavenFilteringException;
 
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
index 3995650..f2d9bb2 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
@@ -23,8 +23,8 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
 import org.codehaus.plexus.component.annotations.Component;
@@ -47,8 +47,8 @@
     private BuildContext buildContext;
 
     @Override
-    public void copyFile( File from, File to, boolean filtering, MavenProject mavenProject, List<String> filters,
-                          boolean escapedBackslashesInFilePath, String encoding, MavenSession mavenSession )
+    public void copyFile( File from, File to, boolean filtering, Project mavenProject, List<String> filters,
+                          boolean escapedBackslashesInFilePath, String encoding, Session mavenSession )
                               throws MavenFilteringException
     {
         MavenResourcesExecution mre = new MavenResourcesExecution();
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java
index 9d3566d..ee91e12 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java
@@ -23,8 +23,8 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
 import org.codehaus.plexus.component.annotations.Component;
 
@@ -37,8 +37,8 @@
     implements MavenReaderFilter
 {
     @Override
-    public Reader filter( Reader from, boolean filtering, MavenProject mavenProject, List<String> filters,
-                          boolean escapedBackslashesInFilePath, MavenSession mavenSession )
+    public Reader filter( Reader from, boolean filtering, Project mavenProject, List<String> filters,
+                          boolean escapedBackslashesInFilePath, Session mavenSession )
                               throws MavenFilteringException
     {
         MavenResourcesExecution mre = new MavenResourcesExecution();
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
index 9d0b579..e2fc2cc 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
@@ -188,8 +188,8 @@
 
             if ( resourceDirectory != null && !resourceDirectory.isAbsolute() )
             {
-                resourceDirectory =
-                        new File( mavenResourcesExecution.getResourcesBaseDirectory(), resourceDirectory.getPath() );
+                resourceDirectory = mavenResourcesExecution
+                        .getResourcesBaseDirectory().resolve( resourceDirectory.getPath() ).toFile();
             }
 
             if ( resourceDirectory == null || !resourceDirectory.exists() )
@@ -201,7 +201,7 @@
             // this part is required in case the user specified "../something"
             // as destination
             // see MNG-1345
-            File outputDirectory = mavenResourcesExecution.getOutputDirectory();
+            File outputDirectory = mavenResourcesExecution.getOutputDirectory().toFile();
             boolean outputExists = outputDirectory.exists();
             if ( !outputExists && !outputDirectory.mkdirs() )
             {
@@ -497,15 +497,15 @@
 
     private String getRelativeOutputDirectory( MavenResourcesExecution execution )
     {
-        String relOutDir = execution.getOutputDirectory().getAbsolutePath();
+        String relOutDir = execution.getOutputDirectory().toAbsolutePath().toString();
 
         if ( execution.getMavenProject() != null && execution.getMavenProject().getBasedir() != null )
         {
-            String basedir = execution.getMavenProject().getBasedir().getAbsolutePath();
+            String basedir = execution.getMavenProject().getBasedir().toAbsolutePath().toString();
             relOutDir = PathTool.getRelativeFilePath( basedir, relOutDir );
             if ( relOutDir == null )
             {
-                relOutDir = execution.getOutputDirectory().getPath();
+                relOutDir = execution.getOutputDirectory().toAbsolutePath().toString();
             }
             else
             {
diff --git a/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java b/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
index 109ece0..558241a 100644
--- a/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/MavenFileFilter.java
@@ -22,8 +22,8 @@
 import java.io.File;
 import java.util.List;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils;
 
 /**
@@ -39,16 +39,16 @@
      * @param from file to copy/filter
      * @param to destination file
      * @param filtering enable or not filtering
-     * @param mavenProject {@link MavenProject}
-     * @param mavenSession {@link MavenSession}
+     * @param mavenProject {@link Project}
+     * @param mavenSession {@link Session}
      * @param escapedBackslashesInFilePath escape backslashes in file path.
      * @param filters {@link List} of String which are path to a Property file
      * @param encoding The encoding which is used during the filtering process.
      * @throws MavenFilteringException in case of failure.
-     * @see DefaultFilterInfo#getDefaultFilterWrappers(MavenProject, List, boolean,MavenSession, MavenResourcesExecution)
+     * @see DefaultFilterInfo#getDefaultFilterWrappers(Project, List, boolean, Session, MavenResourcesExecution)
      */
-    void copyFile( File from, File to, boolean filtering, MavenProject mavenProject, List<String> filters,
-                   boolean escapedBackslashesInFilePath, String encoding, MavenSession mavenSession )
+    void copyFile( File from, File to, boolean filtering, Project mavenProject, List<String> filters,
+                   boolean escapedBackslashesInFilePath, String encoding, Session mavenSession )
                        throws MavenFilteringException;
 
     /**
diff --git a/src/main/java/org/apache/maven/shared/filtering/MavenFileFilterRequest.java b/src/main/java/org/apache/maven/shared/filtering/MavenFileFilterRequest.java
index 27d0fc6..b47036b 100644
--- a/src/main/java/org/apache/maven/shared/filtering/MavenFileFilterRequest.java
+++ b/src/main/java/org/apache/maven/shared/filtering/MavenFileFilterRequest.java
@@ -23,8 +23,8 @@
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 
 /**
  * @author Olivier Lamy
@@ -61,9 +61,9 @@
      * @param mavenSession The Maven Session.
      * @param additionalProperties Supplemental properties.
      */
-    public MavenFileFilterRequest( File from, File to, boolean filtering, MavenProject mavenProject,
+    public MavenFileFilterRequest( File from, File to, boolean filtering, Project mavenProject,
                                    List<String> filters, boolean escapedBackslashesInFilePath, String encoding,
-                                   MavenSession mavenSession, Properties additionalProperties )
+                                   Session mavenSession, Properties additionalProperties )
     {
         super( mavenProject, filters, mavenSession );
         this.encoding = encoding;
diff --git a/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilter.java b/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilter.java
index 2ec1075..c14a7b5 100644
--- a/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilter.java
@@ -22,8 +22,8 @@
 import java.io.Reader;
 import java.util.List;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils;
 
 /**
@@ -39,17 +39,17 @@
      *
      * @param from the source reader
      * @param filtering enable or not filtering
-     * @param mavenProject {@link MavenProject}
-     * @param mavenSession {@link MavenSession}
+     * @param Project {@link Project}
+     * @param Session {@link Session}
      * @param filters {@link java.util.List} of String which are path to a Property file
      * @param escapedBackslashesInFilePath escape backslashes in file path.
      * @return an input stream that applies the filter
      * @throws org.apache.maven.shared.filtering.MavenFilteringException in case of failure.
-     * @see #getDefaultFilterWrappers(org.apache.maven.project.MavenProject, java.util.List, boolean,
-     *      org.apache.maven.execution.MavenSession, org.apache.maven.shared.filtering.MavenResourcesExecution)
+     * @see #getDefaultFilterWrappers(Project, java.util.List, boolean,
+     *      Session, org.apache.maven.shared.filtering.MavenResourcesExecution)
      */
-    Reader filter( Reader from, boolean filtering, MavenProject mavenProject, List<String> filters,
-                   boolean escapedBackslashesInFilePath, MavenSession mavenSession )
+    Reader filter( Reader from, boolean filtering, Project project, List<String> filters,
+                   boolean escapedBackslashesInFilePath, Session session )
                        throws MavenFilteringException;
 
     /**
diff --git a/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilterRequest.java b/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilterRequest.java
index aa3fa77..6dcf6d3 100644
--- a/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilterRequest.java
+++ b/src/main/java/org/apache/maven/shared/filtering/MavenReaderFilterRequest.java
@@ -23,8 +23,8 @@
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 
 /**
  * @author Olivier Lamy
@@ -56,8 +56,8 @@
      * @param mavenSession The Maven Session.
      * @param additionalProperties supplemental properties.
      */
-    public MavenReaderFilterRequest( Reader from, boolean filtering, MavenProject mavenProject, List<String> filters,
-                                     boolean escapedBackslashesInFilePath, MavenSession mavenSession,
+    public MavenReaderFilterRequest( Reader from, boolean filtering, Project mavenProject, List<String> filters,
+                                     boolean escapedBackslashesInFilePath, Session mavenSession,
                                      Properties additionalProperties )
     {
         super( mavenProject, filters, mavenSession );
diff --git a/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java b/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
index 449e405..dfcacea 100644
--- a/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
+++ b/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
@@ -19,14 +19,14 @@
  * under the License.
  */
 
-import java.io.File;
 import java.io.Reader;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.maven.execution.MavenSession;
+import org.apache.maven.api.Project;
+import org.apache.maven.api.Session;
 import org.apache.maven.model.Resource;
-import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.utils.io.FileUtils;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
@@ -43,13 +43,13 @@
 
     private List<Resource> resources;
 
-    private File outputDirectory;
+    private Path outputDirectory;
 
     private List<String> nonFilteredFileExtensions;
 
     private List<FileUtils.FilterWrapper> filterWrappers;
 
-    private File resourcesBaseDirectory;
+    private Path resourcesBaseDirectory;
 
     private boolean useDefaultFilterWrappers = false;
 
@@ -138,9 +138,9 @@
      * @param nonFilteredFileExtensions The extensions which should not being filtered.
      * @param mavenSession The maven session.
      */
-    public MavenResourcesExecution( List<Resource> resources, File outputDirectory, MavenProject mavenProject,
+    public MavenResourcesExecution( List<Resource> resources, Path outputDirectory, Project mavenProject,
                                     String encoding, List<String> fileFilters, List<String> nonFilteredFileExtensions,
-                                    MavenSession mavenSession )
+                                    Session mavenSession )
     {
         super( mavenProject, fileFilters, mavenSession );
         this.encoding = encoding;
@@ -160,8 +160,8 @@
      * @param resourcesBaseDirectory The resources base directory.
      * @param nonFilteredFileExtensions The list of extensions which should not being filtered.
      */
-    public MavenResourcesExecution( List<Resource> resources, File outputDirectory, String encoding,
-                                    List<FileUtils.FilterWrapper> filterWrappers, File resourcesBaseDirectory,
+    public MavenResourcesExecution( List<Resource> resources, Path outputDirectory, String encoding,
+                                    List<FileUtils.FilterWrapper> filterWrappers, Path resourcesBaseDirectory,
                                     List<String> nonFilteredFileExtensions )
     {
         this();
@@ -235,7 +235,7 @@
     /**
      * @return The output directory.
      */
-    public File getOutputDirectory()
+    public Path getOutputDirectory()
     {
         return outputDirectory;
     }
@@ -243,7 +243,7 @@
     /**
      * @param outputDirectory The output directory.
      */
-    public void setOutputDirectory( File outputDirectory )
+    public void setOutputDirectory( Path outputDirectory )
     {
         this.outputDirectory = outputDirectory;
     }
@@ -323,7 +323,7 @@
     /**
      * @return The resource base directory.
      */
-    public File getResourcesBaseDirectory()
+    public Path getResourcesBaseDirectory()
     {
         return resourcesBaseDirectory;
     }
@@ -331,7 +331,7 @@
     /**
      * @param resourcesBaseDirectory Set the resource base directory.
      */
-    public void setResourcesBaseDirectory( File resourcesBaseDirectory )
+    public void setResourcesBaseDirectory( Path resourcesBaseDirectory )
     {
         this.resourcesBaseDirectory = resourcesBaseDirectory;
     }
diff --git a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
index 249aa79..1ba136e 100644
--- a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
@@ -31,7 +31,7 @@
 import java.util.Properties;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.api.Project;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
 import org.codehaus.plexus.PlexusTestCase;
 
@@ -139,8 +139,8 @@
         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
         req.setFileFilters( Collections.singletonList( "src/main/filters/filefilter.properties" ) );
 
-        MavenProject mavenProject = new StubMavenProject( new File( "src/test/units-files/MSHARED-161" ) );
-        mavenProject.getBuild().setFilters( Collections.singletonList( "src/main/filters/buildfilter.properties" ) );
+        Project mavenProject = new StubMavenProject( new File( "src/test/units-files/MSHARED-161" ) );
+        mavenProject.getModel().getBuild().setFilters( Collections.singletonList( "src/main/filters/buildfilter.properties" ) );
         req.setMavenProject( mavenProject );
         req.setInjectProjectBuildFilters( true );
 
diff --git a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
index db6a6f6..d1e6a5c 100644
--- a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
@@ -30,7 +30,7 @@
 import java.util.Properties;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.maven.execution.MavenSession;
+import org.apache.maven.api.Session;
 import org.apache.maven.model.Resource;
 import org.apache.maven.settings.Settings;
 import org.codehaus.plexus.PlexusTestCase;
@@ -75,7 +75,7 @@
         Properties projectProperties = new Properties();
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
 
         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
@@ -93,7 +93,7 @@
         List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8", filtersFile,
                                          nonFilteredFileExtensions, new StubMavenSession() );
         mavenResourcesExecution.setUseDefaultFilterWrappers( true );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
@@ -120,11 +120,11 @@
                                                          System.getProperty( "maven.repo.local",
                                                                              "/path/to/local/repo" ) ) );
 
-        MavenSession session = new StubMavenSession( settings );
+        Session session = new StubMavenSession( settings );
 
         MavenResourcesExecution mre = new MavenResourcesExecution();
         mre.setResources( resources );
-        mre.setOutputDirectory( outputDirectory );
+        mre.setOutputDirectory( outputDirectory.toPath() );
         mre.setEncoding( "UTF-8" );
         mre.setMavenProject( mavenProject );
         mre.setFilters( filtersFile );
@@ -152,7 +152,7 @@
         Properties projectProperties = new Properties();
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
 
         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
@@ -169,8 +169,8 @@
 
         List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         nonFilteredFileExtensions, new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, nonFilteredFileExtensions, new StubMavenSession() );
         mavenResourcesExecution.setEscapeString( "\\" );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
         assertFiltering( initialImageFile, true, false );
@@ -182,7 +182,7 @@
         Properties projectProperties = new Properties();
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
 
         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
@@ -202,8 +202,8 @@
         additionalProperties.put( "greatDate", "1973-06-14" );
         additionalProperties.put( "pom.version", "99.00" );
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         nonFilteredFileExtensions, new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, nonFilteredFileExtensions, new StubMavenSession() );
         mavenResourcesExecution.setAdditionalProperties( additionalProperties );
         mavenResourcesExecution.setEscapeString( "\\" );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
@@ -279,7 +279,7 @@
         Properties projectProperties = new Properties();
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
 
         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
         File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
@@ -297,8 +297,8 @@
         List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", null,
-                                         nonFilteredFileExtensions, new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         null, nonFilteredFileExtensions, new StubMavenSession() );
 
         ValueSource vs =
             new PrefixedObjectValueSource( mavenResourcesExecution.getProjectStartExpressions(), mavenProject, true );
@@ -329,11 +329,11 @@
 
         MavenResourcesExecution mre = new MavenResourcesExecution();
         mre.setResources( resources );
-        mre.setOutputDirectory( outputDirectory );
+        mre.setOutputDirectory( outputDirectory.toPath() );
         mre.setEncoding( "UTF-8" );
         mre.setMavenProject( mavenProject );
         mre.setFilters( null );
-        mre.setNonFilteredFileExtensions( Collections.<String> emptyList() );
+        mre.setNonFilteredFileExtensions( Collections.emptyList() );
         mre.setMavenSession( new StubMavenSession() );
 
         mavenResourcesFiltering.filterResources( mre );
@@ -397,8 +397,8 @@
             + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         Collections.<String> emptyList(), new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
 
         File[] files = outputDirectory.listFiles();
@@ -425,8 +425,8 @@
             + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         Collections.<String> emptyList(), new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
 
         File[] files = outputDirectory.listFiles();
@@ -466,8 +466,8 @@
                 + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-                new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                        Collections.<String> emptyList(), new StubMavenSession() );
+                new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                             filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesExecution.setFlatten(true);
         mavenResourcesExecution.setOverwrite(true);
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
@@ -509,8 +509,8 @@
                 + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-                new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                        Collections.<String> emptyList(), new StubMavenSession() );
+                new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                             filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesExecution.setFlatten(true);
         mavenResourcesExecution.setOverwrite(false);
         try {
@@ -541,8 +541,8 @@
             + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         Collections.<String> emptyList(), new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
 
         File[] files = outputDirectory.listFiles();
@@ -590,8 +590,8 @@
             + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         Collections.<String> emptyList(), new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
 
         File[] files = targetPathFile.listFiles();
@@ -617,8 +617,8 @@
             + "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
-                                         Collections.<String> emptyList(), new StubMavenSession() );
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
+                                         filtersFile, Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
 
         File targetPathFile = new File( outputDirectory, "testTargetPath" );
@@ -642,7 +642,7 @@
             }
         } );
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8",
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
                                          Collections.<String> emptyList(), Collections.<String> emptyList(),
                                          new StubMavenSession() );
         mavenResourcesExecution.setIncludeEmptyDirs( true );
@@ -697,7 +697,7 @@
             }
         } );
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8",
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8",
                                          Collections.<String> emptyList(), Collections.<String> emptyList(),
                                          new StubMavenSession() );
         mavenResourcesExecution.setIncludeEmptyDirs( true );
@@ -779,10 +779,10 @@
     public void testMSHARED81()
         throws Exception
     {
-        mavenProject.addProperty( "escaped", "this is escaped" );
-        mavenProject.addProperty( "escaped.at", "this is escaped.at" );
-        mavenProject.addProperty( "foo", "this is foo" );
-        mavenProject.addProperty( "bar", "this is bar" );
+        mavenProject.getModel().addProperty( "escaped", "this is escaped" );
+        mavenProject.getModel().addProperty( "escaped.at", "this is escaped.at" );
+        mavenProject.getModel().addProperty( "foo", "this is foo" );
+        mavenProject.getModel().addProperty( "bar", "this is bar" );
 
 
         List<Resource> resources = new ArrayList<>();
@@ -802,8 +802,8 @@
         } );
         File output = new File( outputDirectory, "MSHARED-81" );
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, output, mavenProject, "UTF-8", Collections.<String> emptyList(),
-                                         Collections.<String> emptyList(), new StubMavenSession() );
+            new MavenResourcesExecution( resources, output.toPath(), mavenProject, "UTF-8",
+                                         Collections.emptyList(), Collections.emptyList(), new StubMavenSession() );
         mavenResourcesExecution.setIncludeEmptyDirs( true );
         mavenResourcesExecution.setEscapeString( "\\" );
 
@@ -873,12 +873,12 @@
     public void testEdgeCases()
         throws Exception
     {
-        mavenProject.addProperty( "escaped", "this is escaped" );
-        mavenProject.addProperty( "escaped.at", "this is escaped.at" );
-        mavenProject.addProperty( "foo", "this is foo" );
-        mavenProject.addProperty( "bar", "this is bar" );
-        mavenProject.addProperty( "domain", "this.is.domain.com" );
-        mavenProject.addProperty( "com.xxxxxxx.xxxx.root.build.environment.CLOUD_AZURE_AKS_KUBERNETES_NODE_LABEL_AGENTPOOL_VALUE_PRODUCTION_XXXXXXXXXXX_NODE_IMPL_PRODUCT_SEGMENT_PROCESSOR", "longpropvalue" );
+        mavenProject.getModel().addProperty( "escaped", "this is escaped" );
+        mavenProject.getModel().addProperty( "escaped.at", "this is escaped.at" );
+        mavenProject.getModel().addProperty( "foo", "this is foo" );
+        mavenProject.getModel().addProperty( "bar", "this is bar" );
+        mavenProject.getModel().addProperty( "domain", "this.is.domain.com" );
+        mavenProject.getModel().addProperty( "com.xxxxxxx.xxxx.root.build.environment.CLOUD_AZURE_AKS_KUBERNETES_NODE_LABEL_AGENTPOOL_VALUE_PRODUCTION_XXXXXXXXXXX_NODE_IMPL_PRODUCT_SEGMENT_PROCESSOR", "longpropvalue" );
 
 
         List<Resource> resources = new ArrayList<>();
@@ -898,7 +898,7 @@
         } );
         File output = new File( outputDirectory, "edge-cases" );
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, output, mavenProject, "UTF-8", Collections.<String> emptyList(),
+            new MavenResourcesExecution( resources, output.toPath(), mavenProject, "UTF-8", Collections.<String> emptyList(),
                                          Collections.<String> emptyList(), new StubMavenSession() );
         mavenResourcesExecution.setIncludeEmptyDirs( true );
         mavenResourcesExecution.setEscapeString( "\\" );
@@ -939,8 +939,8 @@
         resource.setTargetPath( "testTargetPath" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory, mavenProject, "UTF-8",
-                                         Collections.<String> emptyList(), Collections.<String> emptyList(),
+            new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory.toPath(), mavenProject,
+                                         "UTF-8", Collections.emptyList(), Collections.emptyList(),
                                          new StubMavenSession() );
         mavenResourcesExecution.setFilterFilenames( true );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
@@ -967,8 +967,8 @@
         resource.setTargetPath( "testFilterPropertiesFiles" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory, mavenProject, "UTF-8",
-                                         Collections.<String> emptyList(), Collections.<String> emptyList(),
+            new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory.toPath(), mavenProject,
+                                         "UTF-8", Collections.emptyList(), Collections.emptyList(),
                                          new StubMavenSession() );
         mavenResourcesExecution.setPropertiesEncoding( "ISO-8859-1" );
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
diff --git a/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java b/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java
index 7d0b426..0f23b80 100644
--- a/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java
@@ -66,7 +66,7 @@
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
         projectProperties.put( "replaceThis", "I am the replacement" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
         MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
 
         Resource resource = new Resource();
@@ -80,7 +80,7 @@
         List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8", filtersFile,
                                          nonFilteredFileExtensions, new StubMavenSession() );
         mavenResourcesExecution.setUseDefaultFilterWrappers( true );
 
diff --git a/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
index d63b02d..0195fff 100644
--- a/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
@@ -182,7 +182,7 @@
         Properties projectProperties = new Properties();
         projectProperties.put( "time", time );
         projectProperties.put( "java.version", "zloug" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
         MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
 
         String unitFilesDir = new File( unitDirectory, "files" ).getPath();
@@ -198,7 +198,7 @@
 
         MavenResourcesExecution mre = new MavenResourcesExecution();
         mre.setResources( resources );
-        mre.setOutputDirectory( outputDirectory );
+        mre.setOutputDirectory( outputDirectory.toPath() );
         mre.setEncoding( "UTF-8" );
         mre.setMavenProject( mavenProject );
         mre.setFilters( filtersFile );
diff --git a/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java b/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java
index 324e94c..9f3fc9b 100644
--- a/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java
@@ -56,7 +56,7 @@
         resource.setFiltering( true );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory,
+            new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory.toPath(),
                                          new StubMavenProject( new File( "." ) ), "UTF-8",
                                          Collections.<String>emptyList(), Collections.<String>emptyList(),
                                          new StubMavenSession() );
diff --git a/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java
index c3eef47..cc102af 100644
--- a/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java
@@ -67,7 +67,7 @@
         Properties projectProperties = new Properties();
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
-        mavenProject.setProperties( projectProperties );
+        mavenProject.getModel().setProperties( projectProperties );
         MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
 
         String unitFilesDir = getBasedir() + "/src/test/units-files/MRESOURCES-104";
@@ -84,7 +84,7 @@
         List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
 
         MavenResourcesExecution mavenResourcesExecution =
-            new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
+            new MavenResourcesExecution( resources, outputDirectory.toPath(), mavenProject, "UTF-8", filtersFile,
                                          nonFilteredFileExtensions, new StubMavenSession() );
         mavenResourcesExecution.setUseDefaultFilterWrappers( true );
 
diff --git a/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java b/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java
index 4bc9b2a..f8d27e4 100644
--- a/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java
+++ b/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java
@@ -19,10 +19,16 @@
  * under the License.
  */
 
-import java.io.File;
-import java.util.Properties;
+import javax.annotation.Nonnull;
 
-import org.apache.maven.project.MavenProject;
+import java.io.File;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.apache.maven.api.Artifact;
+import org.apache.maven.api.Dependency;
+import org.apache.maven.api.Project;
+import org.apache.maven.model.Model;
 
 /**
  * @author Olivier Lamy
@@ -30,10 +36,10 @@
  *
  */
 public class StubMavenProject
-    extends MavenProject
+        implements Project
 {
-    private Properties properties;
 
+    private Model model = new Model();
     private File basedir;
 
     protected StubMavenProject( File basedir )
@@ -41,30 +47,98 @@
         this.basedir = basedir;
     }
 
+    @Nonnull
     @Override
-    public Properties getProperties()
+    public String getGroupId()
     {
-        return this.properties;
+        return model.getGroupId();
     }
 
-    public void setProperties( Properties properties )
+    public void setGroupId( String groupId )
     {
-        this.properties = properties;
+        model.setGroupId( groupId );
     }
 
-    public void addProperty( String key, String value )
+    @Nonnull
+    @Override
+    public String getArtifactId()
     {
-        if ( this.properties == null )
-        {
-            this.properties = new Properties();
-        }
-        this.properties.put( key, value );
+        return model.getArtifactId();
+    }
+
+    public void setArtifactId( String artifactId )
+    {
+        model.setArtifactId( artifactId );
+    }
+
+    @Nonnull
+    @Override
+    public String getVersion()
+    {
+        return model.getVersion();
+    }
+
+    public void setVersion( String version )
+    {
+        model.setVersion( version );
+    }
+
+    public String getName()
+    {
+        return model.getName();
+    }
+
+    public void setName( String name )
+    {
+        model.setName( name );
+    }
+
+    @Nonnull
+    @Override
+    public String getPackaging()
+    {
+        return model.getPackaging();
+    }
+
+    @Nonnull
+    @Override
+    public Artifact getArtifact()
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public Model getModel()
+    {
+        return model;
+    }
+
+    @Nonnull
+    @Override
+    public Path getPomPath()
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public List<Dependency> getDependencies()
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public List<Dependency> getManagedDependencies()
+    {
+        return null;
     }
 
     @Override
-    public File getBasedir()
+    public Path getBasedir()
     {
-        return basedir;
+        return basedir.toPath();
     }
 
 }
diff --git a/src/test/java/org/apache/maven/shared/filtering/StubMavenSession.java b/src/test/java/org/apache/maven/shared/filtering/StubMavenSession.java
index 644329a..3095767 100644
--- a/src/test/java/org/apache/maven/shared/filtering/StubMavenSession.java
+++ b/src/test/java/org/apache/maven/shared/filtering/StubMavenSession.java
@@ -19,14 +19,20 @@
  * under the License.
  */
 
+import javax.annotation.Nonnull;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.Properties;
 
-import org.apache.maven.execution.DefaultMavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionResult;
-import org.apache.maven.execution.MavenSession;
+import org.apache.maven.api.Listener;
+import org.apache.maven.api.LocalRepository;
+import org.apache.maven.api.RemoteRepository;
+import org.apache.maven.api.Session;
+import org.apache.maven.api.SessionData;
+import org.apache.maven.api.services.Service;
 import org.apache.maven.settings.Settings;
-import org.codehaus.plexus.PlexusContainer;
-import org.eclipse.aether.RepositorySystemSession;
 
 /**
  * @author Olivier Lamy
@@ -34,7 +40,7 @@
  *
  */
 public class StubMavenSession
-    extends MavenSession
+    implements Session
 {
 
     private Properties userProperties;
@@ -61,9 +67,6 @@
     public StubMavenSession( Properties systemProperties, Properties userProperties, Settings settings )
     {
 
-        super( (PlexusContainer) null, (RepositorySystemSession) null, new DefaultMavenExecutionRequest(),
-               (MavenExecutionResult) null );
-
         this.settings = settings;
 
         this.systemProperties = new Properties();
@@ -98,4 +101,64 @@
         return this.userProperties;
     }
 
+    @Nonnull
+    @Override
+    public LocalRepository getLocalRepository()
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public List<RemoteRepository> getRemoteRepositories()
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public SessionData getData()
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public <T extends Service> T getService( Class<T> clazz ) throws NoSuchElementException
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public Session withLocalRepository( @Nonnull LocalRepository localRepository )
+    {
+        return null;
+    }
+
+    @Nonnull
+    @Override
+    public Session withRemoteRepositories( @Nonnull List<RemoteRepository> repositories )
+    {
+        return null;
+    }
+
+    @Override
+    public void registerListener( @Nonnull Listener listener )
+    {
+
+    }
+
+    @Override
+    public void unregisterListener( @Nonnull Listener listener )
+    {
+
+    }
+
+    @Nonnull
+    @Override
+    public Collection<Listener> getListeners()
+    {
+        return null;
+    }
 }
diff --git a/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java b/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java
index 40b8054..cbdb3a1 100644
--- a/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java
+++ b/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java
@@ -23,7 +23,6 @@
 import java.io.FileInputStream;
 import java.util.Properties;
 
-import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.PlexusTestCase;
 
 /**
@@ -38,7 +37,7 @@
     public void testSimpleFiltering()
         throws Exception
     {
-        MavenProject mavenProject = new MavenProject();
+        StubMavenProject mavenProject = new StubMavenProject( null );
         mavenProject.setVersion( "1.0" );
         mavenProject.setGroupId( "org.apache" );
         Properties userProperties = new Properties();
@@ -72,8 +71,8 @@
     public void testSimpleNonFiltering()
         throws Exception
     {
-        
-        MavenProject mavenProject = new MavenProject();
+
+        StubMavenProject mavenProject = new StubMavenProject( null );
         mavenProject.setVersion( "1.0" );
         mavenProject.setGroupId( "org.apache" );
         Properties userProperties = new Properties();
