diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj
index 3a4744d..9a4ad39 100644
--- a/HTMLKit.xcodeproj/project.pbxproj
+++ b/HTMLKit.xcodeproj/project.pbxproj
@@ -7,6 +7,9 @@
objects = {
/* Begin PBXBuildFile section */
+ 6234584E1A9D2FA4009BD491 /* HTMLNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 6234584C1A9D2FA4009BD491 /* HTMLNode.h */; };
+ 6234584F1A9D2FA4009BD491 /* HTMLNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6234584D1A9D2FA4009BD491 /* HTMLNode.m */; };
+ 623458501A9D2FA4009BD491 /* HTMLNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 6234584D1A9D2FA4009BD491 /* HTMLNode.m */; };
624493A619CCC54100BCDDF4 /* HTMLTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 624493A419CCC54100BCDDF4 /* HTMLTokenizer.h */; };
624493A719CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 624493A519CCC54100BCDDF4 /* HTMLTokenizer.m */; };
624493A819CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 624493A519CCC54100BCDDF4 /* HTMLTokenizer.m */; };
@@ -99,6 +102,8 @@
/* Begin PBXFileReference section */
6223211D1A969B9300BACED5 /* HTMLElementTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLElementTypes.h; sourceTree = ""; };
+ 6234584C1A9D2FA4009BD491 /* HTMLNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNode.h; sourceTree = ""; };
+ 6234584D1A9D2FA4009BD491 /* HTMLNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLNode.m; sourceTree = ""; };
624493A419CCC54100BCDDF4 /* HTMLTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizer.h; sourceTree = ""; };
624493A519CCC54100BCDDF4 /* HTMLTokenizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLTokenizer.m; sourceTree = ""; };
624493A919CCE84A00BCDDF4 /* HTMLTokenizerStates.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTMLTokenizerStates.h; sourceTree = ""; };
@@ -245,6 +250,8 @@
628B7CE61A080E1000602C87 /* HTMLNamespaces.h */,
6223211D1A969B9300BACED5 /* HTMLElementTypes.h */,
6279F87119E17DC700F12EE5 /* HTMLParserInsertionModes.h */,
+ 6234584C1A9D2FA4009BD491 /* HTMLNode.h */,
+ 6234584D1A9D2FA4009BD491 /* HTMLNode.m */,
6279F87219E1808D00F12EE5 /* HTMLElement.h */,
6279F87319E1808D00F12EE5 /* HTMLElement.m */,
625A14B619C7829400AD0C32 /* Supporting Files */,
@@ -336,6 +343,7 @@
625A150819C78ABA00AD0C32 /* HTMLInputStreamReader.h in Headers */,
62AE593519F97D880043F069 /* HTMLParseErrorToken.h in Headers */,
62AE594919F9948A0043F069 /* HTMLCharacterToken.h in Headers */,
+ 6234584E1A9D2FA4009BD491 /* HTMLNode.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -495,6 +503,7 @@
624493A819CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */,
625A14BE19C7829400AD0C32 /* HTMLKit.m in Sources */,
62AE594B19F9948A0043F069 /* HTMLCharacterToken.m in Sources */,
+ 623458501A9D2FA4009BD491 /* HTMLNode.m in Sources */,
62F31FDF19E9DCCF007F0657 /* HTMLTokenizerEntities.m in Sources */,
62AE593719F97D880043F069 /* HTMLParseErrorToken.m in Sources */,
);
@@ -524,6 +533,7 @@
624493A719CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */,
625A150219C783DE00AD0C32 /* HTMLKit.m in Sources */,
62AE594A19F9948A0043F069 /* HTMLCharacterToken.m in Sources */,
+ 6234584F1A9D2FA4009BD491 /* HTMLNode.m in Sources */,
62F31FDE19E9DCCF007F0657 /* HTMLTokenizerEntities.m in Sources */,
62AE593619F97D880043F069 /* HTMLParseErrorToken.m in Sources */,
);
diff --git a/HTMLKit/HTMLNode.h b/HTMLKit/HTMLNode.h
new file mode 100644
index 0000000..632573b
--- /dev/null
+++ b/HTMLKit/HTMLNode.h
@@ -0,0 +1,72 @@
+//
+// HTMLNode.h
+// HTMLKit
+//
+// Created by Iska on 24/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+typedef NS_ENUM(short, HTMLNodeType)
+{
+ HTMLElementNode = 1,
+ HTMLAttributeNode = 2, // historical
+ HTMLTextNode = 3,
+ HTMLCDATASectionNode = 4, // historical
+ HTMLEntityReferenceNode = 5, // historical
+ HTMLEntityNode = 6, // historical
+ HTMLProcessingInstructionNode = 7,
+ HTMLCommentNode = 8,
+ HTMLDocumentNode = 9,
+ HTMLDocumentTypeNode = 10,
+ HTMLDocumentFragmentNode = 11,
+ HTMLNotationNode = 12 // historical
+};
+
+@class HTMLDocument;
+@class HTMLElement;
+
+@interface HTMLNode : NSObject
+
+@property (nonatomic, assign, readonly) HTMLNodeType type;
+
+@property (nonatomic, strong, readonly) NSString *name;
+
+@property (nonatomic, strong, readonly) HTMLDocument *document;
+
+@property (nonatomic, strong, readonly) NSString *baseURI;
+
+@property (nonatomic, strong, readonly) HTMLNode *parentNode;
+
+@property (nonatomic, strong, readonly) HTMLElement *parentElement;
+
+@property (nonatomic, strong, readonly) NSOrderedSet *childNodes;
+
+@property (nonatomic, strong, readonly) HTMLNode *firstNode;
+
+@property (nonatomic, strong, readonly) HTMLNode *lastNode;
+
+@property (nonatomic, strong, readonly) HTMLNode *previousSibling;
+
+@property (nonatomic, strong, readonly) HTMLNode *nextSibling;
+
+@property (nonatomic, copy) NSString *value;
+
+@property (nonatomic, copy) NSString *textContent;
+
+- (BOOL)hasChildNodes;
+
+- (HTMLNode *)childNodeAtIndex:(NSUInteger)index;
+
+- (NSUInteger)indexOfChildNode:(HTMLNode *)node;
+
+- (HTMLNode *)insertNodeBefore:(HTMLNode *)node;
+
+- (HTMLNode *)appendChildNode:(HTMLNode *)node;
+
+- (HTMLNode *)replaceChildNode:(HTMLNode *)node;
+
+- (HTMLNode *)removeChildNode:(HTMLNode *)node;
+
+@end
diff --git a/HTMLKit/HTMLNode.m b/HTMLKit/HTMLNode.m
new file mode 100644
index 0000000..5e4acdc
--- /dev/null
+++ b/HTMLKit/HTMLNode.m
@@ -0,0 +1,13 @@
+//
+// HTMLNode.m
+// HTMLKit
+//
+// Created by Iska on 24/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+
+@implementation HTMLNode
+
+@end