diff --git a/releng/EnrichPoms/src/org/eclipse/cbi/p2repo/aggregator/maven/pom/EnrichPoms.java b/releng/EnrichPoms/src/org/eclipse/cbi/p2repo/aggregator/maven/pom/EnrichPoms.java
index 3667667..fe83293 100644
--- a/releng/EnrichPoms/src/org/eclipse/cbi/p2repo/aggregator/maven/pom/EnrichPoms.java
+++ b/releng/EnrichPoms/src/org/eclipse/cbi/p2repo/aggregator/maven/pom/EnrichPoms.java
@@ -15,27 +15,12 @@
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.List;
 
 public class EnrichPoms {
 
 	private static final String DOT_POM = ".pom";
 	private static final String DOT_JAR = ".jar";
 	private static final String BAK_SUFFIX = "-bak";
-	
-	private static final String SWT_ID = "org.eclipse.swt";
-	private static final String[] LINES_SWT_TO_SKIP = {
-		"<dependency>",
-		"<groupId>org.eclipse.platform</groupId>",
-		"<artifactId>org.eclipse.swt.gtk.linux.aarch64</artifactId>",
-		"<version>[3.105.3,3.105.3]</version>",
-		"</dependency>",
-		"<dependency>",
-		"<groupId>org.eclipse.platform</groupId>",
-		"<artifactId>org.eclipse.swt.gtk.linux.arm</artifactId>",
-		"<version>[3.105.3,3.105.3]</version>",
-		"</dependency>"
-	};
 
 
 	public static void main(String[] args) throws IOException {
@@ -72,17 +57,11 @@
 			}
 			Path jarPath = getCorrespondingJarPath(pomPath);
 			ArtifactInfo info = ManifestReader.read(jarPath);
-			boolean isSWT = SWT_ID.equals(info.bsn);
 			Path newPom = Files.createTempFile(pomPath.getParent(), "", DOT_POM);
 			try (OutputStreamWriter out = new OutputStreamWriter(Files.newOutputStream(newPom))) {
 				boolean copyrightInserted = false;
 				boolean detailsInserted = false;
-				List<String> allLines = Files.readAllLines(pomPath);
-				for (int i = 0; i < allLines.size(); i++) {
-					if (isSWT && matches(LINES_SWT_TO_SKIP, allLines, i)) {
-						i += LINES_SWT_TO_SKIP.length;
-					}
-					String line = allLines.get(i);
+				for (String line : Files.readAllLines(pomPath)) {
 					out.write(line);
 					out.append('\n');
 					if (!copyrightInserted) {
@@ -106,15 +85,4 @@
 			System.err.println("Failed to rewrite pom "+pomPath+": "+e.getClass()+": "+e.getMessage());
 		}
 	}
-
-	/** Hack to work around https://bugs.eclipse.org/510996 */
-	private static boolean matches(String[] linesToSkip, List<String> allLines, int idx) {
-		if (idx+linesToSkip.length >= allLines.size())
-			return false;
-		for (int i = 0; i < linesToSkip.length; i++) {
-			if (!allLines.get(idx+i).trim().equals(linesToSkip[i]))
-				return false;
-		}
-		return true;
-	}
 }
