diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMerge34Test.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMerge34Test.java
index fc353d5..acf05c7 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMerge34Test.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4720DependencyManagementExclusionMerge34Test.java
@@ -67,35 +67,4 @@
         assertFalse( classpath.toString(), classpath.contains( "d-0.1.jar" ) );
     }
 
-    /**
-     * Verify the effective exclusions applied during transitive dependency resolution when both the regular
-     * dependency section and dependency management declare exclusions for a particular dependency.
-     */
-    public void testitLegacy()
-        throws Exception
-    {
-        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4720" );
-
-        Verifier verifier = newVerifier( testDir.getAbsolutePath() );
-        verifier.setAutoclean( false );
-        verifier.deleteArtifacts( "org.apache.maven.its.mng4720" );
-        verifier.addCliOption( "-s" );
-        verifier.addCliOption( "settings.xml" );
-        verifier.addCliOption( "-ldm" );
-        verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", verifier.newDefaultFilterProperties() );
-        verifier.executeGoal( "validate" );
-        verifier.verifyErrorFreeLog();
-        verifier.resetStreams();
-
-        List<String> classpath = verifier.loadLines( "target/classpath.txt", "UTF-8" );
-
-        assertTrue( classpath.toString(), classpath.contains( "a-0.1.jar" ) );
-        assertTrue( classpath.toString(), classpath.contains( "c-0.1.jar" ) );
-
-        assertFalse( classpath.toString(), classpath.contains( "b-0.1.jar" ) );
-
-        // should better have been excluded as well, now it's a matter of backward-compat (-ldm)
-        assertTrue( classpath.toString(), classpath.contains( "d-0.1.jar" ) );
-    }
-
 }
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5227DependencyOptionalFlagManagementTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5227DependencyOptionalFlagManagementTest.java
index 8371dfe..3dc0ad8 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5227DependencyOptionalFlagManagementTest.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5227DependencyOptionalFlagManagementTest.java
@@ -86,52 +86,4 @@
         assertFalse( classpath.toString(), classpath.contains( "transitive-0.1.jar" ) );
     }
 
-    /**
-     * Verify that a dependency's optional flag is not subject to dependency management. This part of the test checks
-     * the effective model.
-     */
-    public void testitLegacyModel()
-        throws Exception
-    {
-        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4600/model" );
-
-        Verifier verifier = newVerifier( testDir.getAbsolutePath() );
-        verifier.setAutoclean( false );
-        verifier.deleteDirectory( "target" );
-        verifier.addCliOption( "-ldm" );
-        verifier.executeGoal( "validate" );
-        verifier.verifyErrorFreeLog();
-        verifier.resetStreams();
-
-        Properties props = verifier.loadProperties( "target/pom.properties" );
-        assertEquals( "dep", props.getProperty( "project.dependencies.0.artifactId" ) );
-        assertEquals( "false", props.getProperty( "project.dependencies.0.optional" ) );
-    }
-
-    /**
-     * Verify that a transitive dependency's optional flag is not subject to dependency management of the root artifat.
-     * This part of the test checks the artifact collector.
-     */
-    public void testitLegacyResolution()
-        throws Exception
-    {
-        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4600/resolution" );
-
-        Verifier verifier = newVerifier( testDir.getAbsolutePath() );
-        verifier.setAutoclean( false );
-        verifier.deleteDirectory( "target" );
-        verifier.deleteArtifacts( "org.apache.maven.its.mng4600" );
-        verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", verifier.newDefaultFilterProperties() );
-        verifier.addCliOption( "--settings" );
-        verifier.addCliOption( "settings.xml" );
-        verifier.addCliOption( "-ldm" );
-        verifier.executeGoal( "validate" );
-        verifier.verifyErrorFreeLog();
-        verifier.resetStreams();
-
-        List<String> classpath = verifier.loadLines( "target/classpath.txt", "UTF-8" );
-        assertTrue( classpath.toString(), classpath.contains( "direct-0.2.jar" ) );
-        assertTrue( classpath.toString(), classpath.contains( "transitive-0.1.jar" ) );
-    }
-
 }
