diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj
index 408e504..d906780 100644
--- a/HTMLKit.xcodeproj/project.pbxproj
+++ b/HTMLKit.xcodeproj/project.pbxproj
@@ -69,6 +69,7 @@
624493AC19CD0CBE00BCDDF4 /* HTMLToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 624493AA19CD0CBE00BCDDF4 /* HTMLToken.h */; };
624493AD19CD0CBE00BCDDF4 /* HTMLToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 624493AB19CD0CBE00BCDDF4 /* HTMLToken.m */; };
624493AE19CD0CBE00BCDDF4 /* HTMLToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 624493AB19CD0CBE00BCDDF4 /* HTMLToken.m */; };
+ 6247A9471B152F8C00CCF25C /* HTMLNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6247A9461B152F8C00CCF25C /* HTMLNodeFilter.h */; };
624AC8FF19FBF59800BD3C4A /* HTMLTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = 624AC8FE19FBF4F700BD3C4A /* HTMLTokens.h */; };
624AC90119FBF9ED00BD3C4A /* HTMLKitTokenizerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624AC90019FBF9ED00BD3C4A /* HTMLKitTokenizerTests.m */; };
624AC90219FBF9ED00BD3C4A /* HTMLKitTokenizerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624AC90019FBF9ED00BD3C4A /* HTMLKitTokenizerTests.m */; };
@@ -212,6 +213,7 @@
624493A919CCE84A00BCDDF4 /* HTMLTokenizerStates.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizerStates.h; sourceTree = ""; };
624493AA19CD0CBE00BCDDF4 /* HTMLToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLToken.h; sourceTree = ""; };
624493AB19CD0CBE00BCDDF4 /* HTMLToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLToken.m; sourceTree = ""; };
+ 6247A9461B152F8C00CCF25C /* HTMLNodeFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNodeFilter.h; sourceTree = ""; };
624AC8FE19FBF4F700BD3C4A /* HTMLTokens.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLTokens.h; sourceTree = ""; };
624AC90019FBF9ED00BD3C4A /* HTMLKitTokenizerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitTokenizerTests.m; sourceTree = ""; };
624AC90419FBFE8A00BD3C4A /* html5lib-tests */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "html5lib-tests"; sourceTree = ""; };
@@ -333,6 +335,7 @@
62362A3B1A9FA70400301989 /* HTMLText.m */,
623406DF1ADB04F9004677A3 /* HTMLTemplate.h */,
623406E01ADB04F9004677A3 /* HTMLTemplate.m */,
+ 6247A9461B152F8C00CCF25C /* HTMLNodeFilter.h */,
623916C11AC707250066B4FE /* HTMLNodeTreeEnumerator.h */,
623916C21AC707250066B4FE /* HTMLNodeTreeEnumerator.m */,
6238C9831AB8D6330006512E /* HTMLKitDOMExceptions.h */,
@@ -563,6 +566,7 @@
623857911A9E772B003A45D9 /* HTMLDocument.h in Headers */,
624493A619CCC54100BCDDF4 /* HTMLTokenizer.h in Headers */,
62AE593A19F97E1C0043F069 /* HTMLDOCTYPEToken.h in Headers */,
+ 6247A9471B152F8C00CCF25C /* HTMLNodeFilter.h in Headers */,
623424881AB467B200726190 /* HTMLOrderedDictionary.h in Headers */,
625A150419C783EB00AD0C32 /* HTMLKit.h in Headers */,
625A150819C78ABA00AD0C32 /* HTMLInputStreamReader.h in Headers */,
diff --git a/HTMLKit/HTMLNodeFilter.h b/HTMLKit/HTMLNodeFilter.h
new file mode 100644
index 0000000..2f302f2
--- /dev/null
+++ b/HTMLKit/HTMLNodeFilter.h
@@ -0,0 +1,36 @@
+//
+// HTMLNodeFilter.h
+// HTMLKit
+//
+// Created by Iska on 27/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+typedef NS_ENUM(unsigned short, HTMLNodeFilterValue)
+{
+ HTMLNodeFilterAccept = 1,
+ HTMLNodeFilterReject = 2,
+ HTMLNodeFilterSkip = 3
+} HTMLNodeFilterValue;
+
+typedef NS_ENUM(unsigned long, HTMLNodeFilterShowOptions)
+{
+ HTMLNodeFilterShowAll = 0xFFFFFFFF;
+ HTMLNodeFilterShowElement = 0x1;
+ HTMLNodeFilterShowText = 0x4;
+ HTMLNodeFilterShowProcessingInstruction = 0x40;
+ HTMLNodeFilterShowComment = 0x80;
+ HTMLNodeFilterShowDocument = 0x100;
+ HTMLNodeFilterShowDocumentType = 0x200;
+ HTMLNodeFilterShowDocumentFragment = 0x400;
+} HTMLNodeFilterShowOptions;
+
+@class HTMLNode;
+
+@protocol HTMLNodeFilter
+
+- (HTMLNodeFilterValue)acceptNode:(HTMLNode *)node;
+
+@end