Index: src/org/mediawiki/importer/ExactListFilter.java
===================================================================
--- src/org/mediawiki/importer/ExactListFilter.java	(revision 26176)
+++ src/org/mediawiki/importer/ExactListFilter.java	(working copy)
@@ -28,11 +28,11 @@
 import java.io.IOException;
 
 public class ExactListFilter extends ListFilter {
-	public ExactListFilter(DumpWriter sink, String sourceFileName) throws IOException {
-		super(sink, sourceFileName);
+	public ExactListFilter(DumpWriter sink, String sourceFileName, boolean negate) throws IOException {
+		super(sink, sourceFileName, negate);
 	}
 	
 	protected boolean pass(Page page) {
-		return list.containsKey(page.Title.toString());
+		return list.containsKey(page.Title.toString()) ^ negate;
 	}
 }
Index: src/org/mediawiki/importer/ListFilter.java
===================================================================
--- src/org/mediawiki/importer/ListFilter.java	(revision 26176)
+++ src/org/mediawiki/importer/ListFilter.java	(working copy)
@@ -33,10 +33,14 @@
 
 public class ListFilter extends PageFilter {
 	protected HashMap list;
+	protected boolean negate;
 	
-	public ListFilter(DumpWriter sink, String sourceFileName) throws IOException {
+	
+	public ListFilter(DumpWriter sink, String sourceFileName, boolean negate) throws IOException {
 		super(sink);
+		this.negate = negate;
 		list = new HashMap();
+		
 		BufferedReader input = new BufferedReader(new InputStreamReader(
 			new FileInputStream(sourceFileName), "utf-8"));
 		String line = input.readLine();
@@ -55,7 +59,7 @@
 	}
 	
 	protected boolean pass(Page page) {
-		return list.containsKey(page.Title.subjectPage().toString())
-			|| list.containsKey(page.Title.talkPage().toString());
+		return (list.containsKey(page.Title.subjectPage().toString())
+			|| list.containsKey(page.Title.talkPage().toString())) ^ negate;
 	}
 }
Index: src/org/mediawiki/dumper/Dumper.java
===================================================================
--- src/org/mediawiki/dumper/Dumper.java	(revision 26176)
+++ src/org/mediawiki/dumper/Dumper.java	(working copy)
@@ -276,9 +276,13 @@
 		else if (filter.equals("titlematch"))
 			return new TitleMatchFilter(sink, param);
 		else if (filter.equals("list"))
-			return new ListFilter(sink, param);
+			return new ListFilter(sink, param, false);
+		else if (filter.equals("except"))
+			return new ListFilter(sink, param, true);
 		else if (filter.equals("exactlist"))
-			return new ExactListFilter(sink, param);
+			return new ExactListFilter(sink, param, false);
+		else if (filter.equals("exactexcept"))
+    		return new ExactListFilter(sink, param, false);
 		else if (filter.equals("revlist"))
 			return new RevisionListFilter(sink, param);
 		else if (filter.equals("before"))
Index: README
===================================================================
--- README	(revision 26176)
+++ README	(working copy)
@@ -112,8 +112,15 @@
       Excludes all pages whose titles do not appear in the given file.
       Use one title per line; blanks and lines starting with # are
       ignored. Talk and subject pages of given titles are both matched.
+  --filter=except:<list-filename>
+      As list filter, but excludes all pages whose titles do *not* appear
+      in the given file.
   --filter=exactlist:<list-filename>
-      As above, but does not try to match associated talk/subject pages.
+      As list filter, but does not try to match associated talk/subject
+      pages.
+  --filter=exactexcept:<list-filnaem>
+      As exactlist filter, but excludes all pages whose titles do *not*
+      appear in the given file.
   --filter=revlist:<list-filename>
       Includes only the revisions specified by ID in the given file. 
   --filter=namespace:[!]<NS_KEY,NS_OTHERKEY,100,...>
