diff --git a/Classes/Retronator/Xni/Framework/Color.h b/Classes/Retronator/Xni/Framework/Color.h
index ce349d3..7269b17 100644
--- a/Classes/Retronator/Xni/Framework/Color.h
+++ b/Classes/Retronator/Xni/Framework/Color.h
@@ -14,16 +14,16 @@
 	uint packedValue;
 }
 
-- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha;
-- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue;
-- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha;
-- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue;
+- (id) initWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha;
+- (id) initWithRed:(int)red green:(int)green blue:(int)blue;
+- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha;
+- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue;
 - (id) initWithColor:(Color*)color;
 
-+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha;
-+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue;
-+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha;
-+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue;
++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha;
++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue;
++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha;
++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue;
 + (Color*) colorWithColor:(Color*)color;
 
 @property (nonatomic) Byte r;
diff --git a/Classes/Retronator/Xni/Framework/Color.m b/Classes/Retronator/Xni/Framework/Color.m
index dfce26f..e157b5d 100644
--- a/Classes/Retronator/Xni/Framework/Color.m
+++ b/Classes/Retronator/Xni/Framework/Color.m
@@ -15,7 +15,7 @@
 
 // CONSTRUCTORS
 
-- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha {
+- (id) initWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha {
     if (self = [super init]) {
         red = CLAMP_TO_BYTE(red);
         green = CLAMP_TO_BYTE(green) << 8;
@@ -26,36 +26,36 @@
     return self;
 }
 
-- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue {
-    return [self initWithRed:red Green:green Blue:blue Alpha:255];
+- (id) initWithRed:(int)red green:(int)green blue:(int)blue {
+    return [self initWithRed:red green:green blue:blue alpha:255];
 }
 
-- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha {
-    return [self initWithRed:255 * red Green:255 * green Blue:255 * blue Alpha:255 * alpha];
+- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha {
+    return [self initWithRed:255 * red green:255 * green blue:255 * blue alpha:255 * alpha];
 }
 
-- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue {
-    return [self initWithPercentageRed:red Green:green Blue:blue Alpha:1];
+- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue {
+    return [self initWithPercentageRed:red green:green blue:blue alpha:1];
 }
 
 - (id) initWithColor:(Color*)color {
-    return [self initWithRed:color.r Green:color.g Blue:color.b Alpha:color.a];
+    return [self initWithRed:color.r green:color.g blue:color.b alpha:color.a];
 }
 
-+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha {
-    return [[[Color alloc] initWithRed:red Green:green Blue:blue Alpha:alpha] autorelease];
++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha {
+    return [[[Color alloc] initWithRed:red green:green blue:blue alpha:alpha] autorelease];
 }
 
-+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue {
-    return [[[Color alloc] initWithRed:red Green:green Blue:blue] autorelease];
++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue {
+    return [[[Color alloc] initWithRed:red green:green blue:blue] autorelease];
 }
 
-+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha {
-    return [[[Color alloc] initWithPercentageRed:red Green:green Blue:blue Alpha:alpha] autorelease];
++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha {
+    return [[[Color alloc] initWithPercentageRed:red green:green blue:blue alpha:alpha] autorelease];
 }
 
-+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue {
-    return [[[Color alloc] initWithPercentageRed:red Green:green Blue:blue] autorelease];
++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue {
+    return [[[Color alloc] initWithPercentageRed:red green:green blue:blue] autorelease];
 }
 
 + (Color*) colorWithColor:(Color *)color {
@@ -86,146 +86,146 @@
 
 
 // Constants
-+ (Color*) aliceBlue {return [Color colorWithRed:240 Green:248 Blue:255 Alpha:255];}
-+ (Color*) antiqueWhite {return [Color colorWithRed:250 Green:235 Blue:215 Alpha:255];}
-+ (Color*) aqua {return [Color colorWithRed:0 Green:255 Blue:255 Alpha:255];}
-+ (Color*) aquamarine {return [Color colorWithRed:127 Green:255 Blue:212 Alpha:255];}
-+ (Color*) azure {return [Color colorWithRed:240 Green:255 Blue:255 Alpha:255];}
-+ (Color*) beige {return [Color colorWithRed:245 Green:245 Blue:220 Alpha:255];}
-+ (Color*) bisque {return [Color colorWithRed:255 Green:228 Blue:196 Alpha:255];}
-+ (Color*) black {return [Color colorWithRed:0 Green:0 Blue:0 Alpha:255];}
-+ (Color*) blanchedAlmond {return [Color colorWithRed:255 Green:235 Blue:205 Alpha:255];}
-+ (Color*) blue {return [Color colorWithRed:0 Green:0 Blue:255 Alpha:255];}
-+ (Color*) blueViolet {return [Color colorWithRed:138 Green:43 Blue:226 Alpha:255];}
-+ (Color*) brown {return [Color colorWithRed:165 Green:42 Blue:42 Alpha:255];}
-+ (Color*) burlyWood {return [Color colorWithRed:222 Green:184 Blue:135 Alpha:255];}
-+ (Color*) cadetBlue {return [Color colorWithRed:95 Green:158 Blue:160 Alpha:255];}
-+ (Color*) chartreuse {return [Color colorWithRed:127 Green:255 Blue:0 Alpha:255];}
-+ (Color*) chocolate {return [Color colorWithRed:210 Green:105 Blue:30 Alpha:255];}
-+ (Color*) coral {return [Color colorWithRed:255 Green:127 Blue:80 Alpha:255];}
-+ (Color*) cornflowerBlue {return [Color colorWithRed:100 Green:149 Blue:237 Alpha:255];}
-+ (Color*) cornsilk {return [Color colorWithRed:255 Green:248 Blue:220 Alpha:255];}
-+ (Color*) crimson {return [Color colorWithRed:220 Green:20 Blue:60 Alpha:255];}
-+ (Color*) cyan {return [Color colorWithRed:0 Green:255 Blue:255 Alpha:255];}
-+ (Color*) darkBlue {return [Color colorWithRed:0 Green:0 Blue:139 Alpha:255];}
-+ (Color*) darkCyan {return [Color colorWithRed:0 Green:139 Blue:139 Alpha:255];}
-+ (Color*) darkGoldenrod {return [Color colorWithRed:184 Green:134 Blue:11 Alpha:255];}
-+ (Color*) darkGray {return [Color colorWithRed:169 Green:169 Blue:169 Alpha:255];}
-+ (Color*) darkGreen {return [Color colorWithRed:0 Green:100 Blue:0 Alpha:255];}
-+ (Color*) darkKhaki {return [Color colorWithRed:189 Green:183 Blue:107 Alpha:255];}
-+ (Color*) darkMagenta {return [Color colorWithRed:139 Green:0 Blue:139 Alpha:255];}
-+ (Color*) darkOliveGreen {return [Color colorWithRed:85 Green:107 Blue:47 Alpha:255];}
-+ (Color*) darkOrange {return [Color colorWithRed:255 Green:140 Blue:0 Alpha:255];}
-+ (Color*) darkOrchid {return [Color colorWithRed:153 Green:50 Blue:204 Alpha:255];}
-+ (Color*) darkRed {return [Color colorWithRed:139 Green:0 Blue:0 Alpha:255];}
-+ (Color*) darkSalmon {return [Color colorWithRed:233 Green:150 Blue:122 Alpha:255];}
-+ (Color*) darkSeaGreen {return [Color colorWithRed:143 Green:188 Blue:139 Alpha:255];}
-+ (Color*) darkSlateBlue {return [Color colorWithRed:72 Green:61 Blue:139 Alpha:255];}
-+ (Color*) darkSlateGray {return [Color colorWithRed:47 Green:79 Blue:79 Alpha:255];}
-+ (Color*) darkTurquoise {return [Color colorWithRed:0 Green:206 Blue:209 Alpha:255];}
-+ (Color*) darkViolet {return [Color colorWithRed:148 Green:0 Blue:211 Alpha:255];}
-+ (Color*) deepPink {return [Color colorWithRed:255 Green:20 Blue:147 Alpha:255];}
-+ (Color*) deepSkyBlue {return [Color colorWithRed:0 Green:191 Blue:255 Alpha:255];}
-+ (Color*) dimGray {return [Color colorWithRed:105 Green:105 Blue:105 Alpha:255];}
-+ (Color*) dodgerBlue {return [Color colorWithRed:30 Green:144 Blue:255 Alpha:255];}
-+ (Color*) firebrick {return [Color colorWithRed:178 Green:34 Blue:34 Alpha:255];}
-+ (Color*) floralWhite {return [Color colorWithRed:255 Green:250 Blue:240 Alpha:255];}
-+ (Color*) forestGreen {return [Color colorWithRed:34 Green:139 Blue:34 Alpha:255];}
-+ (Color*) fuchsia {return [Color colorWithRed:255 Green:0 Blue:255 Alpha:255];}
-+ (Color*) gainsboro {return [Color colorWithRed:220 Green:220 Blue:220 Alpha:255];}
-+ (Color*) ghostWhite {return [Color colorWithRed:248 Green:248 Blue:255 Alpha:255];}
-+ (Color*) gold {return [Color colorWithRed:255 Green:215 Blue:0 Alpha:255];}
-+ (Color*) goldenrod {return [Color colorWithRed:218 Green:165 Blue:32 Alpha:255];}
-+ (Color*) gray {return [Color colorWithRed:128 Green:128 Blue:128 Alpha:255];}
-+ (Color*) green {return [Color colorWithRed:0 Green:128 Blue:0 Alpha:255];}
-+ (Color*) greenYellow {return [Color colorWithRed:173 Green:255 Blue:47 Alpha:255];}
-+ (Color*) honeydew {return [Color colorWithRed:240 Green:255 Blue:240 Alpha:255];}
-+ (Color*) hotPink {return [Color colorWithRed:255 Green:105 Blue:180 Alpha:255];}
-+ (Color*) indianRed {return [Color colorWithRed:205 Green:92 Blue:92 Alpha:255];}
-+ (Color*) indigo {return [Color colorWithRed:75 Green:0 Blue:130 Alpha:255];}
-+ (Color*) ivory {return [Color colorWithRed:255 Green:255 Blue:240 Alpha:255];}
-+ (Color*) khaki {return [Color colorWithRed:240 Green:230 Blue:140 Alpha:255];}
-+ (Color*) lavender {return [Color colorWithRed:230 Green:230 Blue:250 Alpha:255];}
-+ (Color*) lavenderBlush {return [Color colorWithRed:255 Green:240 Blue:245 Alpha:255];}
-+ (Color*) lawnGreen {return [Color colorWithRed:124 Green:252 Blue:0 Alpha:255];}
-+ (Color*) lemonChiffon {return [Color colorWithRed:255 Green:250 Blue:205 Alpha:255];}
-+ (Color*) lightBlue {return [Color colorWithRed:173 Green:216 Blue:230 Alpha:255];}
-+ (Color*) lightCoral {return [Color colorWithRed:240 Green:128 Blue:128 Alpha:255];}
-+ (Color*) lightCyan {return [Color colorWithRed:224 Green:255 Blue:255 Alpha:255];}
-+ (Color*) lightGoldenrodYellow {return [Color colorWithRed:250 Green:250 Blue:210 Alpha:255];}
-+ (Color*) lightGray {return [Color colorWithRed:211 Green:211 Blue:211 Alpha:255];}
-+ (Color*) lightGreen {return [Color colorWithRed:144 Green:238 Blue:144 Alpha:255];}
-+ (Color*) lightPink {return [Color colorWithRed:255 Green:182 Blue:193 Alpha:255];}
-+ (Color*) lightSalmon {return [Color colorWithRed:255 Green:160 Blue:122 Alpha:255];}
-+ (Color*) lightSeaGreen {return [Color colorWithRed:32 Green:178 Blue:170 Alpha:255];}
-+ (Color*) lightSkyBlue {return [Color colorWithRed:135 Green:206 Blue:250 Alpha:255];}
-+ (Color*) lightSlateGray {return [Color colorWithRed:119 Green:136 Blue:153 Alpha:255];}
-+ (Color*) lightSteelBlue {return [Color colorWithRed:176 Green:196 Blue:222 Alpha:255];}
-+ (Color*) lightYellow {return [Color colorWithRed:255 Green:255 Blue:224 Alpha:255];}
-+ (Color*) lime {return [Color colorWithRed:0 Green:255 Blue:0 Alpha:255];}
-+ (Color*) limeGreen {return [Color colorWithRed:50 Green:205 Blue:50 Alpha:255];}
-+ (Color*) linen {return [Color colorWithRed:250 Green:240 Blue:230 Alpha:255];}
-+ (Color*) magenta {return [Color colorWithRed:255 Green:0 Blue:255 Alpha:255];}
-+ (Color*) maroon {return [Color colorWithRed:128 Green:0 Blue:0 Alpha:255];}
-+ (Color*) mediumAquamarine {return [Color colorWithRed:102 Green:205 Blue:170 Alpha:255];}
-+ (Color*) mediumBlue {return [Color colorWithRed:0 Green:0 Blue:205 Alpha:255];}
-+ (Color*) mediumOrchid {return [Color colorWithRed:186 Green:85 Blue:211 Alpha:255];}
-+ (Color*) mediumPurple {return [Color colorWithRed:147 Green:112 Blue:219 Alpha:255];}
-+ (Color*) mediumSeaGreen {return [Color colorWithRed:60 Green:179 Blue:113 Alpha:255];}
-+ (Color*) mediumSlateBlue {return [Color colorWithRed:123 Green:104 Blue:238 Alpha:255];}
-+ (Color*) mediumSpringGreen {return [Color colorWithRed:0 Green:250 Blue:154 Alpha:255];}
-+ (Color*) mediumTurquoise {return [Color colorWithRed:72 Green:209 Blue:204 Alpha:255];}
-+ (Color*) mediumVioletRed {return [Color colorWithRed:199 Green:21 Blue:133 Alpha:255];}
-+ (Color*) midnightBlue {return [Color colorWithRed:25 Green:25 Blue:112 Alpha:255];}
-+ (Color*) mintCream {return [Color colorWithRed:245 Green:255 Blue:250 Alpha:255];}
-+ (Color*) mistyRose {return [Color colorWithRed:255 Green:228 Blue:225 Alpha:255];}
-+ (Color*) moccasin {return [Color colorWithRed:255 Green:228 Blue:181 Alpha:255];}
-+ (Color*) navajoWhite {return [Color colorWithRed:255 Green:222 Blue:173 Alpha:255];}
-+ (Color*) navy {return [Color colorWithRed:0 Green:0 Blue:128 Alpha:255];}
-+ (Color*) oldLace {return [Color colorWithRed:253 Green:245 Blue:230 Alpha:255];}
-+ (Color*) olive {return [Color colorWithRed:128 Green:128 Blue:0 Alpha:255];}
-+ (Color*) oliveDrab {return [Color colorWithRed:107 Green:142 Blue:35 Alpha:255];}
-+ (Color*) orange {return [Color colorWithRed:255 Green:165 Blue:0 Alpha:255];}
-+ (Color*) orangeRed {return [Color colorWithRed:255 Green:69 Blue:0 Alpha:255];}
-+ (Color*) orchid {return [Color colorWithRed:218 Green:112 Blue:214 Alpha:255];}
-+ (Color*) paleGoldenrod {return [Color colorWithRed:238 Green:232 Blue:170 Alpha:255];}
-+ (Color*) paleGreen {return [Color colorWithRed:152 Green:251 Blue:152 Alpha:255];}
-+ (Color*) paleTurquoise {return [Color colorWithRed:175 Green:238 Blue:238 Alpha:255];}
-+ (Color*) paleVioletRed {return [Color colorWithRed:219 Green:112 Blue:147 Alpha:255];}
-+ (Color*) papayaWhip {return [Color colorWithRed:255 Green:239 Blue:213 Alpha:255];}
-+ (Color*) peachPuff {return [Color colorWithRed:255 Green:218 Blue:185 Alpha:255];}
-+ (Color*) peru {return [Color colorWithRed:205 Green:133 Blue:63 Alpha:255];}
-+ (Color*) pink {return [Color colorWithRed:255 Green:192 Blue:203 Alpha:255];}
-+ (Color*) plum {return [Color colorWithRed:221 Green:160 Blue:221 Alpha:255];}
-+ (Color*) powderBlue {return [Color colorWithRed:176 Green:224 Blue:230 Alpha:255];}
-+ (Color*) purple {return [Color colorWithRed:128 Green:0 Blue:128 Alpha:255];}
-+ (Color*) red {return [Color colorWithRed:255 Green:0 Blue:0 Alpha:255];}
-+ (Color*) rosyBrown {return [Color colorWithRed:188 Green:143 Blue:143 Alpha:255];}
-+ (Color*) royalBlue {return [Color colorWithRed:65 Green:105 Blue:225 Alpha:255];}
-+ (Color*) saddleBrown {return [Color colorWithRed:139 Green:69 Blue:19 Alpha:255];}
-+ (Color*) salmon {return [Color colorWithRed:250 Green:128 Blue:114 Alpha:255];}
-+ (Color*) sandyBrown {return [Color colorWithRed:244 Green:164 Blue:96 Alpha:255];}
-+ (Color*) seaGreen {return [Color colorWithRed:46 Green:139 Blue:87 Alpha:255];}
-+ (Color*) seaShell {return [Color colorWithRed:255 Green:245 Blue:238 Alpha:255];}
-+ (Color*) sienna {return [Color colorWithRed:160 Green:82 Blue:45 Alpha:255];}
-+ (Color*) silver {return [Color colorWithRed:192 Green:192 Blue:192 Alpha:255];}
-+ (Color*) skyBlue {return [Color colorWithRed:135 Green:206 Blue:235 Alpha:255];}
-+ (Color*) slateBlue {return [Color colorWithRed:106 Green:90 Blue:205 Alpha:255];}
-+ (Color*) slateGray {return [Color colorWithRed:112 Green:128 Blue:144 Alpha:255];}
-+ (Color*) snow {return [Color colorWithRed:255 Green:250 Blue:250 Alpha:255];}
-+ (Color*) springGreen {return [Color colorWithRed:0 Green:255 Blue:127 Alpha:255];}
-+ (Color*) steelBlue {return [Color colorWithRed:70 Green:130 Blue:180 Alpha:255];}
-+ (Color*) tan {return [Color colorWithRed:210 Green:180 Blue:140 Alpha:255];}
-+ (Color*) teal {return [Color colorWithRed:0 Green:128 Blue:128 Alpha:255];}
-+ (Color*) thistle {return [Color colorWithRed:216 Green:191 Blue:216 Alpha:255];}
-+ (Color*) tomato {return [Color colorWithRed:255 Green:99 Blue:71 Alpha:255];}
-+ (Color*) transparent {return [Color colorWithRed:0 Green:0 Blue:0 Alpha:0];}
-+ (Color*) turquoise {return [Color colorWithRed:64 Green:224 Blue:208 Alpha:255];}
-+ (Color*) violet {return [Color colorWithRed:238 Green:130 Blue:238 Alpha:255];}
-+ (Color*) wheat {return [Color colorWithRed:245 Green:222 Blue:179 Alpha:255];}
-+ (Color*) white {return [Color colorWithRed:255 Green:255 Blue:255 Alpha:255];}
-+ (Color*) whiteSmoke {return [Color colorWithRed:245 Green:245 Blue:245 Alpha:255];}
-+ (Color*) yellow {return [Color colorWithRed:255 Green:255 Blue:0 Alpha:255];}
-+ (Color*) yellowGreen {return [Color colorWithRed:154 Green:205 Blue:50 Alpha:255];}
++ (Color*) aliceBlue {return [Color colorWithRed:240 green:248 blue:255 alpha:255];}
++ (Color*) antiqueWhite {return [Color colorWithRed:250 green:235 blue:215 alpha:255];}
++ (Color*) aqua {return [Color colorWithRed:0 green:255 blue:255 alpha:255];}
++ (Color*) aquamarine {return [Color colorWithRed:127 green:255 blue:212 alpha:255];}
++ (Color*) azure {return [Color colorWithRed:240 green:255 blue:255 alpha:255];}
++ (Color*) beige {return [Color colorWithRed:245 green:245 blue:220 alpha:255];}
++ (Color*) bisque {return [Color colorWithRed:255 green:228 blue:196 alpha:255];}
++ (Color*) black {return [Color colorWithRed:0 green:0 blue:0 alpha:255];}
++ (Color*) blanchedAlmond {return [Color colorWithRed:255 green:235 blue:205 alpha:255];}
++ (Color*) blue {return [Color colorWithRed:0 green:0 blue:255 alpha:255];}
++ (Color*) blueViolet {return [Color colorWithRed:138 green:43 blue:226 alpha:255];}
++ (Color*) brown {return [Color colorWithRed:165 green:42 blue:42 alpha:255];}
++ (Color*) burlyWood {return [Color colorWithRed:222 green:184 blue:135 alpha:255];}
++ (Color*) cadetBlue {return [Color colorWithRed:95 green:158 blue:160 alpha:255];}
++ (Color*) chartreuse {return [Color colorWithRed:127 green:255 blue:0 alpha:255];}
++ (Color*) chocolate {return [Color colorWithRed:210 green:105 blue:30 alpha:255];}
++ (Color*) coral {return [Color colorWithRed:255 green:127 blue:80 alpha:255];}
++ (Color*) cornflowerBlue {return [Color colorWithRed:100 green:149 blue:237 alpha:255];}
++ (Color*) cornsilk {return [Color colorWithRed:255 green:248 blue:220 alpha:255];}
++ (Color*) crimson {return [Color colorWithRed:220 green:20 blue:60 alpha:255];}
++ (Color*) cyan {return [Color colorWithRed:0 green:255 blue:255 alpha:255];}
++ (Color*) darkBlue {return [Color colorWithRed:0 green:0 blue:139 alpha:255];}
++ (Color*) darkCyan {return [Color colorWithRed:0 green:139 blue:139 alpha:255];}
++ (Color*) darkGoldenrod {return [Color colorWithRed:184 green:134 blue:11 alpha:255];}
++ (Color*) darkGray {return [Color colorWithRed:169 green:169 blue:169 alpha:255];}
++ (Color*) darkGreen {return [Color colorWithRed:0 green:100 blue:0 alpha:255];}
++ (Color*) darkKhaki {return [Color colorWithRed:189 green:183 blue:107 alpha:255];}
++ (Color*) darkMagenta {return [Color colorWithRed:139 green:0 blue:139 alpha:255];}
++ (Color*) darkOliveGreen {return [Color colorWithRed:85 green:107 blue:47 alpha:255];}
++ (Color*) darkOrange {return [Color colorWithRed:255 green:140 blue:0 alpha:255];}
++ (Color*) darkOrchid {return [Color colorWithRed:153 green:50 blue:204 alpha:255];}
++ (Color*) darkRed {return [Color colorWithRed:139 green:0 blue:0 alpha:255];}
++ (Color*) darkSalmon {return [Color colorWithRed:233 green:150 blue:122 alpha:255];}
++ (Color*) darkSeaGreen {return [Color colorWithRed:143 green:188 blue:139 alpha:255];}
++ (Color*) darkSlateBlue {return [Color colorWithRed:72 green:61 blue:139 alpha:255];}
++ (Color*) darkSlateGray {return [Color colorWithRed:47 green:79 blue:79 alpha:255];}
++ (Color*) darkTurquoise {return [Color colorWithRed:0 green:206 blue:209 alpha:255];}
++ (Color*) darkViolet {return [Color colorWithRed:148 green:0 blue:211 alpha:255];}
++ (Color*) deepPink {return [Color colorWithRed:255 green:20 blue:147 alpha:255];}
++ (Color*) deepSkyBlue {return [Color colorWithRed:0 green:191 blue:255 alpha:255];}
++ (Color*) dimGray {return [Color colorWithRed:105 green:105 blue:105 alpha:255];}
++ (Color*) dodgerBlue {return [Color colorWithRed:30 green:144 blue:255 alpha:255];}
++ (Color*) firebrick {return [Color colorWithRed:178 green:34 blue:34 alpha:255];}
++ (Color*) floralWhite {return [Color colorWithRed:255 green:250 blue:240 alpha:255];}
++ (Color*) forestGreen {return [Color colorWithRed:34 green:139 blue:34 alpha:255];}
++ (Color*) fuchsia {return [Color colorWithRed:255 green:0 blue:255 alpha:255];}
++ (Color*) gainsboro {return [Color colorWithRed:220 green:220 blue:220 alpha:255];}
++ (Color*) ghostWhite {return [Color colorWithRed:248 green:248 blue:255 alpha:255];}
++ (Color*) gold {return [Color colorWithRed:255 green:215 blue:0 alpha:255];}
++ (Color*) goldenrod {return [Color colorWithRed:218 green:165 blue:32 alpha:255];}
++ (Color*) gray {return [Color colorWithRed:128 green:128 blue:128 alpha:255];}
++ (Color*) green {return [Color colorWithRed:0 green:128 blue:0 alpha:255];}
++ (Color*) greenYellow {return [Color colorWithRed:173 green:255 blue:47 alpha:255];}
++ (Color*) honeydew {return [Color colorWithRed:240 green:255 blue:240 alpha:255];}
++ (Color*) hotPink {return [Color colorWithRed:255 green:105 blue:180 alpha:255];}
++ (Color*) indianRed {return [Color colorWithRed:205 green:92 blue:92 alpha:255];}
++ (Color*) indigo {return [Color colorWithRed:75 green:0 blue:130 alpha:255];}
++ (Color*) ivory {return [Color colorWithRed:255 green:255 blue:240 alpha:255];}
++ (Color*) khaki {return [Color colorWithRed:240 green:230 blue:140 alpha:255];}
++ (Color*) lavender {return [Color colorWithRed:230 green:230 blue:250 alpha:255];}
++ (Color*) lavenderBlush {return [Color colorWithRed:255 green:240 blue:245 alpha:255];}
++ (Color*) lawnGreen {return [Color colorWithRed:124 green:252 blue:0 alpha:255];}
++ (Color*) lemonChiffon {return [Color colorWithRed:255 green:250 blue:205 alpha:255];}
++ (Color*) lightBlue {return [Color colorWithRed:173 green:216 blue:230 alpha:255];}
++ (Color*) lightCoral {return [Color colorWithRed:240 green:128 blue:128 alpha:255];}
++ (Color*) lightCyan {return [Color colorWithRed:224 green:255 blue:255 alpha:255];}
++ (Color*) lightGoldenrodYellow {return [Color colorWithRed:250 green:250 blue:210 alpha:255];}
++ (Color*) lightGray {return [Color colorWithRed:211 green:211 blue:211 alpha:255];}
++ (Color*) lightGreen {return [Color colorWithRed:144 green:238 blue:144 alpha:255];}
++ (Color*) lightPink {return [Color colorWithRed:255 green:182 blue:193 alpha:255];}
++ (Color*) lightSalmon {return [Color colorWithRed:255 green:160 blue:122 alpha:255];}
++ (Color*) lightSeaGreen {return [Color colorWithRed:32 green:178 blue:170 alpha:255];}
++ (Color*) lightSkyBlue {return [Color colorWithRed:135 green:206 blue:250 alpha:255];}
++ (Color*) lightSlateGray {return [Color colorWithRed:119 green:136 blue:153 alpha:255];}
++ (Color*) lightSteelBlue {return [Color colorWithRed:176 green:196 blue:222 alpha:255];}
++ (Color*) lightYellow {return [Color colorWithRed:255 green:255 blue:224 alpha:255];}
++ (Color*) lime {return [Color colorWithRed:0 green:255 blue:0 alpha:255];}
++ (Color*) limeGreen {return [Color colorWithRed:50 green:205 blue:50 alpha:255];}
++ (Color*) linen {return [Color colorWithRed:250 green:240 blue:230 alpha:255];}
++ (Color*) magenta {return [Color colorWithRed:255 green:0 blue:255 alpha:255];}
++ (Color*) maroon {return [Color colorWithRed:128 green:0 blue:0 alpha:255];}
++ (Color*) mediumAquamarine {return [Color colorWithRed:102 green:205 blue:170 alpha:255];}
++ (Color*) mediumBlue {return [Color colorWithRed:0 green:0 blue:205 alpha:255];}
++ (Color*) mediumOrchid {return [Color colorWithRed:186 green:85 blue:211 alpha:255];}
++ (Color*) mediumPurple {return [Color colorWithRed:147 green:112 blue:219 alpha:255];}
++ (Color*) mediumSeaGreen {return [Color colorWithRed:60 green:179 blue:113 alpha:255];}
++ (Color*) mediumSlateBlue {return [Color colorWithRed:123 green:104 blue:238 alpha:255];}
++ (Color*) mediumSpringGreen {return [Color colorWithRed:0 green:250 blue:154 alpha:255];}
++ (Color*) mediumTurquoise {return [Color colorWithRed:72 green:209 blue:204 alpha:255];}
++ (Color*) mediumVioletRed {return [Color colorWithRed:199 green:21 blue:133 alpha:255];}
++ (Color*) midnightBlue {return [Color colorWithRed:25 green:25 blue:112 alpha:255];}
++ (Color*) mintCream {return [Color colorWithRed:245 green:255 blue:250 alpha:255];}
++ (Color*) mistyRose {return [Color colorWithRed:255 green:228 blue:225 alpha:255];}
++ (Color*) moccasin {return [Color colorWithRed:255 green:228 blue:181 alpha:255];}
++ (Color*) navajoWhite {return [Color colorWithRed:255 green:222 blue:173 alpha:255];}
++ (Color*) navy {return [Color colorWithRed:0 green:0 blue:128 alpha:255];}
++ (Color*) oldLace {return [Color colorWithRed:253 green:245 blue:230 alpha:255];}
++ (Color*) olive {return [Color colorWithRed:128 green:128 blue:0 alpha:255];}
++ (Color*) oliveDrab {return [Color colorWithRed:107 green:142 blue:35 alpha:255];}
++ (Color*) orange {return [Color colorWithRed:255 green:165 blue:0 alpha:255];}
++ (Color*) orangeRed {return [Color colorWithRed:255 green:69 blue:0 alpha:255];}
++ (Color*) orchid {return [Color colorWithRed:218 green:112 blue:214 alpha:255];}
++ (Color*) paleGoldenrod {return [Color colorWithRed:238 green:232 blue:170 alpha:255];}
++ (Color*) paleGreen {return [Color colorWithRed:152 green:251 blue:152 alpha:255];}
++ (Color*) paleTurquoise {return [Color colorWithRed:175 green:238 blue:238 alpha:255];}
++ (Color*) paleVioletRed {return [Color colorWithRed:219 green:112 blue:147 alpha:255];}
++ (Color*) papayaWhip {return [Color colorWithRed:255 green:239 blue:213 alpha:255];}
++ (Color*) peachPuff {return [Color colorWithRed:255 green:218 blue:185 alpha:255];}
++ (Color*) peru {return [Color colorWithRed:205 green:133 blue:63 alpha:255];}
++ (Color*) pink {return [Color colorWithRed:255 green:192 blue:203 alpha:255];}
++ (Color*) plum {return [Color colorWithRed:221 green:160 blue:221 alpha:255];}
++ (Color*) powderBlue {return [Color colorWithRed:176 green:224 blue:230 alpha:255];}
++ (Color*) purple {return [Color colorWithRed:128 green:0 blue:128 alpha:255];}
++ (Color*) red {return [Color colorWithRed:255 green:0 blue:0 alpha:255];}
++ (Color*) rosyBrown {return [Color colorWithRed:188 green:143 blue:143 alpha:255];}
++ (Color*) royalBlue {return [Color colorWithRed:65 green:105 blue:225 alpha:255];}
++ (Color*) saddleBrown {return [Color colorWithRed:139 green:69 blue:19 alpha:255];}
++ (Color*) salmon {return [Color colorWithRed:250 green:128 blue:114 alpha:255];}
++ (Color*) sandyBrown {return [Color colorWithRed:244 green:164 blue:96 alpha:255];}
++ (Color*) seaGreen {return [Color colorWithRed:46 green:139 blue:87 alpha:255];}
++ (Color*) seaShell {return [Color colorWithRed:255 green:245 blue:238 alpha:255];}
++ (Color*) sienna {return [Color colorWithRed:160 green:82 blue:45 alpha:255];}
++ (Color*) silver {return [Color colorWithRed:192 green:192 blue:192 alpha:255];}
++ (Color*) skyBlue {return [Color colorWithRed:135 green:206 blue:235 alpha:255];}
++ (Color*) slateBlue {return [Color colorWithRed:106 green:90 blue:205 alpha:255];}
++ (Color*) slateGray {return [Color colorWithRed:112 green:128 blue:144 alpha:255];}
++ (Color*) snow {return [Color colorWithRed:255 green:250 blue:250 alpha:255];}
++ (Color*) springGreen {return [Color colorWithRed:0 green:255 blue:127 alpha:255];}
++ (Color*) steelBlue {return [Color colorWithRed:70 green:130 blue:180 alpha:255];}
++ (Color*) tan {return [Color colorWithRed:210 green:180 blue:140 alpha:255];}
++ (Color*) teal {return [Color colorWithRed:0 green:128 blue:128 alpha:255];}
++ (Color*) thistle {return [Color colorWithRed:216 green:191 blue:216 alpha:255];}
++ (Color*) tomato {return [Color colorWithRed:255 green:99 blue:71 alpha:255];}
++ (Color*) transparent {return [Color colorWithRed:0 green:0 blue:0 alpha:0];}
++ (Color*) turquoise {return [Color colorWithRed:64 green:224 blue:208 alpha:255];}
++ (Color*) violet {return [Color colorWithRed:238 green:130 blue:238 alpha:255];}
++ (Color*) wheat {return [Color colorWithRed:245 green:222 blue:179 alpha:255];}
++ (Color*) white {return [Color colorWithRed:255 green:255 blue:255 alpha:255];}
++ (Color*) whiteSmoke {return [Color colorWithRed:245 green:245 blue:245 alpha:255];}
++ (Color*) yellow {return [Color colorWithRed:255 green:255 blue:0 alpha:255];}
++ (Color*) yellowGreen {return [Color colorWithRed:154 green:205 blue:50 alpha:255];}
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h
index c12b101..81cc899 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h
@@ -17,7 +17,7 @@
 	int height;
 }
 
-- (id) initWithWidth:(int)theWidth Height:(int)theHeight;
+- (id) initWithWidth:(int)theWidth height:(int)theHeight;
 
 @property (nonatomic) int width;
 @property (nonatomic) int height;
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m
index 61bf5ca..c7379fb 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m
@@ -11,7 +11,7 @@
 
 @implementation BitmapContent
 
-- (id) initWithWidth:(int)theWidth Height:(int)theHeight {
+- (id) initWithWidth:(int)theWidth height:(int)theHeight {
 	if (self = [super init]) {
 		width = theWidth;
 		height = theHeight;
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h
index b6a893a..020992d 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h
@@ -18,7 +18,7 @@
 - (Byte4*) getPixelData;
 - (void) setPixelData:(Byte4*)sourceData;
 
-- (Byte4) getPixelAtX:(int)x Y:(int)y;
-- (void) setPixelAtX:(int)x Y:(int)y Value:(Byte4)value;
+- (Byte4) getPixelAtX:(int)x y:(int)y;
+- (void) setPixelAtX:(int)x y:(int)y value:(Byte4)value;
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m
index 302c151..0d34f6c 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m
@@ -12,7 +12,7 @@
 @implementation ColorPixelBitmapContent
 
 - (id) initWithWidth:(int)theWidth Height:(int)theHeight {
-	if (self = [super initWithWidth:theWidth Height:theHeight Format:SurfaceFormatColor]) {
+	if (self = [super initWithWidth:theWidth height:theHeight format:SurfaceFormatColor]) {
 	}
 	return self;	
 }
@@ -26,11 +26,11 @@
 	[super setPixelData:sourceData];
 }
 
-- (Byte4) getPixelAtX:(int)x Y:(int)y {
+- (Byte4) getPixelAtX:(int)x y:(int)y {
 	return colorPixelData[x + y * width];
 }
 
-- (void) setPixelAtX:(int)x Y:(int)y Value:(Byte4)value {
+- (void) setPixelAtX:(int)x y:(int)y value:(Byte4)value {
 	colorPixelData[x + y * width] = value;
 }
 
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h
index 020dd91..582225e 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h
@@ -16,7 +16,7 @@
 	int bytesPerPixel;
 }
 
-- (id) initWithWidth:(int)theWidth Height:(int)theHeight Format:(SurfaceFormat)theFormat;
+- (id) initWithWidth:(int)theWidth height:(int)theHeight format:(SurfaceFormat)theFormat;
 
 - (Byte*) getPixelAtX:(int)x Y:(int)y;
 - (void) setPixelAtX:(int)x Y:(int)y Value:(Byte*)value;
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m
index f07347b..82f128b 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m
@@ -12,10 +12,10 @@
 
 @implementation PixelBitmapContent
 
-- (id) initWithWidth:(int)theWidth Height:(int)theHeight Format:(SurfaceFormat)theFormat {
-	if (self = [super initWithWidth:theWidth Height:theHeight]) {
+- (id) initWithWidth:(int)theWidth height:(int)theHeight format:(SurfaceFormat)theFormat {
+	if (self = [super initWithWidth:theWidth height:theHeight]) {
 		format = theFormat;
-		BOOL result = [VectorConverter tryGetSizeInBytesOfSurfaceFormat:format SizeInBytes:&bytesPerPixel];
+		BOOL result = [VectorConverter tryGetSizeInBytesOfSurfaceFormat:format sizeInBytes:&bytesPerPixel];
 		if (!result) {
 			[NSException raise:@"ArgumentException" format:@"The provided format is not supported"];
 		}
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h
index 082ac79..83cca08 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h
@@ -15,8 +15,8 @@
 
 }
 
-+ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat SizeInBytes:(int*)sizeInBytes;
++ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat sizeInBytes:(int*)sizeInBytes;
 
-+ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat VectorType:(Class*)type;
++ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat vectorType:(Class*)type;
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m
index 206b535..5360403 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m
@@ -13,7 +13,7 @@
 
 @implementation VectorConverter
 
-+ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat SizeInBytes:(int*)sizeInBytes {
++ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat sizeInBytes:(int*)sizeInBytes {
 	switch (surfaceFormat) {
 		case SurfaceFormatColor:
 			*sizeInBytes = sizeof(Byte4);
@@ -37,7 +37,7 @@
 	return NO;	
 }
 
-+ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat VectorType:(Class*)type {
++ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat vectorType:(Class*)type {
 	switch (surfaceFormat) {
 		case SurfaceFormatColor:
 			*type = [Vector4 class];
diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m
index 7d358a6..a9c7e5b 100644
--- a/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m
+++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m
@@ -39,7 +39,7 @@
 	CGContextRelease(textureContext); 
 	
 	// Create pixel bitmap content.
-	PixelBitmapContent *bitmap = [[PixelBitmapContent alloc] initWithWidth:(int)width Height:(int)height Format:SurfaceFormatColor];
+	PixelBitmapContent *bitmap = [[PixelBitmapContent alloc] initWithWidth:(int)width height:(int)height format:SurfaceFormatColor];
 	[bitmap setPixelData:imageData];
 	
 	// This bitmap is the only one in the mipmap chain.
diff --git a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m b/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m
index 8adbb82..b994eb6 100644
--- a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m
+++ b/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m
@@ -25,14 +25,14 @@
 	[bitmap tryGetFormat:&format];
 	
 	Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice 
-															 Width:bitmap.width 
-															Height:bitmap.height 
-														   MipMaps:generateMipmaps 
-															Format:format];
+															 width:bitmap.width 
+															height:bitmap.height 
+														   mipMaps:generateMipmaps 
+															format:format];
 	
 	for (int i=0;i<[mipmaps count];i++) {
 		bitmap = [mipmaps objectAtIndex:i];
-		[texture setDataToLevel:i SourceRectangle:nil From:[bitmap getPixelData]];
+		[texture setDataToLevel:i sourceRectangle:nil from:[bitmap getPixelData]];
 	}
 	
 	return texture;
diff --git a/Classes/Retronator/Xni/Framework/Game.m b/Classes/Retronator/Xni/Framework/Game.m
index 6d16b77..01dbc84 100644
--- a/Classes/Retronator/Xni/Framework/Game.m
+++ b/Classes/Retronator/Xni/Framework/Game.m
@@ -32,7 +32,7 @@
         targetElapsedTime = 1.0 / 60.0;
         inactiveSleepTime = 1.0 / 5.0;
 		maximumElapsedTime = 1.0 / 2.0;
-        
+		
         // Get the game host.
         gameHost = (GameHost*)[UIApplication sharedApplication];
     }
diff --git a/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h
new file mode 100644
index 0000000..3363518
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h
@@ -0,0 +1,72 @@
+//
+//  BasicEffect.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "Effect.h"
+
+@interface BasicEffect : Effect {
+    // Material
+    float alpha;
+    Vector3 *ambientColor;
+    Vector3 *diffuseColor;
+    Vector3 *emissiveColor;
+    Vector3 *specularColor;
+    float specularPower;
+    BOOL vertexColorEnabled;
+    
+    // Texturing
+    BOOL textureEnabled;
+    Texture2D *texture;
+    
+    // Lighting
+    BOOL lightingEnabled;
+    Vector3 *ambientLightColor;
+    DirectionalLight *directionalLight0;
+    DirectionalLight *directionalLight1;
+    DirectionalLight *directionalLight2;    
+    
+    // Fog
+    BOOL fogEnabled;
+    Vector3 *fogColor;
+    float fogStart;
+    float fogEnd;
+    
+    // Transformations
+    Matrix *projection;
+    Matrix *view;
+    Matrix *world;
+}
+
+@property (nonatomic) float alpha;
+@property (nonatomic, retain) Vector3 *ambientColor;
+@property (nonatomic, retain) Vector3 *diffuseColor;
+@property (nonatomic, retain) Vector3 *emissiveColor;
+@property (nonatomic, retain) Vector3 *specularColor;
+@property (nonatomic) float specularPower;
+@property (nonatomic) BOOL vertexColorEnabled;
+
+@property (nonatomic) BOOL textureEnabled;
+@property (nonatomic, retain) Texture2D *texture;
+
+@property (nonatomic) BOOL lightingEnabled;
+@property (nonatomic, retain) Vector3 *ambientLightColor;
+@property (nonatomic, readonly) DirectionalLight *directionalLight0;
+@property (nonatomic, readonly) DirectionalLight *directionalLight1;
+@property (nonatomic, readonly) DirectionalLight *directionalLight2;    
+
+@property (nonatomic) BOOL fogEnabled;
+@property (nonatomic, retain) Vector3 *fogColor;
+@property (nonatomic) float fogStart;
+@property (nonatomic) float fogEnd;
+
+@property (nonatomic, retain) Matrix *projection;
+@property (nonatomic, retain) Matrix *view;
+@property (nonatomic, retain) Matrix *world;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m
new file mode 100644
index 0000000..75dd534
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m
@@ -0,0 +1,196 @@
+//
+//  BasicEffect.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "BasicEffect.h"
+
+#import "Retronator.Xni.Framework.h"
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@interface BasicEffectPass : EffectPass {
+    BasicEffect *basicEffect;	
+}
+
+- (id) initWithBasicEffect:(BasicEffect*)theBasicEffect;
+
+@end
+
+@implementation BasicEffect
+
+-(id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice {
+    if (self = [super initWithGraphicsDevice:theGraphicsDevice]) {
+        // Create the main pass.
+        BasicEffectPass *mainPass = [[BasicEffectPass alloc] initWithBasicEffect:self];
+        NSArray *passes = [NSArray arrayWithObject:mainPass];
+        
+        // Create the basic technique.
+        EffectTechnique *basicTechnique = [[EffectTechnique alloc] initWithName:@"BasicEffect" passes:passes];
+        
+        techniques = [NSDictionary dictionaryWithObject:basicTechnique forKey:basicTechnique.name];
+        currentTechnique = basicTechnique;
+        
+        // Set defaults.
+        self.alpha = 1;
+        self.ambientColor = [Vector3 zero];
+        self.diffuseColor = [Vector3 zero];
+        self.emissiveColor = [Vector3 zero];
+        self.specularColor = [Vector3 zero];
+        self.specularPower = 0;
+        self.vertexColorEnabled = NO;
+        
+        self.textureEnabled = NO;
+        self.texture = nil;
+        
+        self.lightingEnabled = NO;
+        self.ambientLightColor = [Vector3 zero];
+        directionalLight0 = [[DirectionalLight alloc] init];
+        directionalLight1 = [[DirectionalLight alloc] init];
+        directionalLight2 = [[DirectionalLight alloc] init];
+        
+        self.fogEnabled = NO;
+        self.fogColor = [Vector3 zero];
+        self.fogStart = 0;
+        self.fogEnd = 1;
+        
+        self.projection = [Matrix identity];
+        self.view = [Matrix identity];
+        self.world = [Matrix identity];
+    }
+    return self;
+}
+
+@synthesize alpha;
+@synthesize ambientColor;
+@synthesize diffuseColor;
+@synthesize emissiveColor;
+@synthesize specularColor;
+@synthesize specularPower;
+@synthesize vertexColorEnabled;
+
+@synthesize textureEnabled;
+@synthesize texture;
+
+@synthesize lightingEnabled;
+@synthesize ambientLightColor;
+@synthesize directionalLight0;
+@synthesize directionalLight1;
+@synthesize directionalLight2;    
+
+@synthesize fogEnabled;
+@synthesize fogColor;
+@synthesize fogStart;
+@synthesize fogEnd;
+
+@synthesize projection;
+@synthesize view;
+@synthesize world;
+
+- (void) dealloc
+{
+    [directionalLight0 release];
+    [directionalLight1 release];
+    [directionalLight2 release];
+    [super dealloc];
+}
+
+@end
+
+
+@interface BasicEffectPass()
+
+- (void) activateLight:(DirectionalLight*) light name:(uint)name;
+
+@end
+
+@implementation BasicEffectPass
+
+- (id) initWithBasicEffect:(BasicEffect *)theBasicEffect {
+    if (self = [super initWithName:@"BasicEffectPass"]) {
+        basicEffect = theBasicEffect;
+    }
+    return self;
+}
+
+- (void) apply {    
+    // Set material.
+    Vector4Struct data;
+    Vector4Set(&data, basicEffect.ambientColor.x, basicEffect.ambientColor.y, basicEffect.ambientColor.z, basicEffect.alpha);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float*)&data);
+    
+    Vector4Set(&data, basicEffect.diffuseColor.x, basicEffect.diffuseColor.y, basicEffect.diffuseColor.z, basicEffect.alpha);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*)&data);
+    
+    Vector4Set(&data, basicEffect.specularColor.x, basicEffect.specularColor.y, basicEffect.specularColor.z, 1);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*)&data);
+    glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, basicEffect.specularPower);
+    
+    Vector4Set(&data, basicEffect.emissiveColor.x, basicEffect.emissiveColor.y, basicEffect.emissiveColor.z, 1);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (float*)&data);
+    
+    if (basicEffect.vertexColorEnabled) {
+        glEnable(GL_COLOR_MATERIAL);
+    } else {
+        glDisable(GL_COLOR_MATERIAL);
+    }
+    
+    // Set texturing.
+    if (basicEffect.textureEnabled) {
+        glEnable(GL_TEXTURE_2D);
+        glBindTexture(GL_TEXTURE_2D, basicEffect.texture.textureId);
+    } else {
+        glDisable(GL_TEXTURE_2D);
+    }
+    
+    // Set the projection matrix.
+    glMatrixMode(GL_PROJECTION);
+    glLoadMatrixf((float*)basicEffect.projection.data);
+    
+    // Set the model-view matrix.
+    glMatrixMode(GL_MODELVIEW);
+    // Multiply in reverse order, because our matrices assume vector transformation b = a * M,
+    // while openGL will tranform b = M * a. So v_projectionspace = M_modelview * v_modelspace,
+    // and our model-view matrix therefore should be view * world.
+    glLoadMatrixf((float*)basicEffect.view.data);
+    
+    // Set lighting now that we're in view coordinates.
+    if (basicEffect.lightingEnabled) {
+        glEnable(GL_LIGHTING);
+    } else {
+        glDisable(GL_LIGHTING);
+    }
+    Vector4Set(&data, basicEffect.ambientLightColor.x, basicEffect.ambientLightColor.y, basicEffect.ambientLightColor.z, 1);
+    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float*)&data);
+    [self activateLight:basicEffect.directionalLight0 name:GL_LIGHT0];
+    [self activateLight:basicEffect.directionalLight1 name:GL_LIGHT1];
+    [self activateLight:basicEffect.directionalLight2 name:GL_LIGHT2];
+    
+    // Finally add the world component of the model-view matrix.
+    glMultMatrixf((float*)basicEffect.world.data);  
+}
+
+- (void) activateLight:(DirectionalLight *)light name:(uint)lightName {
+    if (light.enabled) {
+        glEnable(lightName);
+    } else {
+        glDisable(lightName);
+        return;
+    }
+    
+    Vector4Struct data;
+    Vector4Set(&data, light.ambientColor.x, light.ambientColor.y, light.ambientColor.z, 1);    
+    glLightfv(lightName, GL_AMBIENT, (float*)&data);
+    Vector4Set(&data, light.diffuseColor.x, light.diffuseColor.y, light.diffuseColor.z, 1);    
+    glLightfv(lightName, GL_DIFFUSE, (float*)&data);
+    Vector4Set(&data, light.specularColor.x, light.specularColor.y, light.specularColor.z, 1);
+    glLightfv(lightName, GL_SPECULAR, (float*)&data);    
+    Vector4Set(&data, light.direction.x, light.direction.y, light.direction.z, 0);
+    glLightfv(lightName, GL_POSITION, (float*)&data);    
+}
+
+
+
+@end
\ No newline at end of file
diff --git a/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h
new file mode 100644
index 0000000..f076ed8
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h
@@ -0,0 +1,27 @@
+//
+//  DirectionalLight.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "Retronator.Xni.Framework.classes.h"
+
+@interface DirectionalLight : NSObject {
+    Vector3 *ambientColor;
+    Vector3 *diffuseColor;
+    Vector3 *direction;
+    BOOL enabled;
+    Vector3 *specularColor;
+}
+
+@property (nonatomic, retain) Vector3 *ambientColor;
+@property (nonatomic, retain) Vector3 *diffuseColor;
+@property (nonatomic, retain) Vector3 *direction;
+@property (nonatomic) BOOL enabled;
+@property (nonatomic, retain) Vector3 *specularColor;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m
new file mode 100644
index 0000000..24cb2ca
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m
@@ -0,0 +1,33 @@
+//
+//  DirectionalLight.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "DirectionalLight.h"
+
+#import "Retronator.Xni.Framework.h"
+
+@implementation DirectionalLight
+
+- (id) init {
+    if (self = [super init]) {
+        self.enabled = NO;
+        self.ambientColor = [Vector3 zero];
+        self.diffuseColor = [Vector3 zero];
+        self.specularColor = [Vector3 zero];
+        self.direction = [Vector3 zero];
+    }
+    return self;
+}
+
+@synthesize ambientColor;
+@synthesize diffuseColor;
+@synthesize direction;
+@synthesize enabled;
+@synthesize specularColor;
+
+@end
+
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Effect.h b/Classes/Retronator/Xni/Framework/Graphics/Effect.h
index fd2836e..74ca31b 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Effect.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Effect.h
@@ -8,9 +8,14 @@
 
 #import <Foundation/Foundation.h>
 
+#import "GraphicsResource.h"
 
-@interface Effect : NSObject {
-
+@interface Effect : GraphicsResource {
+    EffectTechnique *currentTechnique;
+    NSDictionary *techniques;
 }
 
-@end
+@property (nonatomic, retain) EffectTechnique *currentTechnique;
+@property (nonatomic, readonly) NSDictionary *techniques;
+
+@end
\ No newline at end of file
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Effect.m b/Classes/Retronator/Xni/Framework/Graphics/Effect.m
index 9127576..0f4cdb0 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Effect.m
+++ b/Classes/Retronator/Xni/Framework/Graphics/Effect.m
@@ -11,4 +11,7 @@
 
 @implementation Effect
 
+@synthesize currentTechnique;
+@synthesize techniques;
+
 @end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectPass.h b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.h
new file mode 100644
index 0000000..47571e8
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.h
@@ -0,0 +1,22 @@
+//
+//  EffectPass.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface EffectPass : NSObject {
+    NSString *name;
+}
+
+- (id) initWithName:(NSString*)theName;
+
+@property (nonatomic, readonly) NSString *name;
+
+- (void) apply;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectPass.m b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.m
new file mode 100644
index 0000000..6a6dd00
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.m
@@ -0,0 +1,32 @@
+//
+//  EffectPass.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "EffectPass.h"
+
+
+@implementation EffectPass
+
+-(id) initWithName:(NSString *)theName {
+    if (self = [super init]) {
+        name = [theName retain];
+    }
+    return self;
+}
+
+@synthesize name;
+
+- (void) apply {}
+
+- (void) dealloc
+{
+    [name release];
+    [super dealloc];
+}
+
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h
new file mode 100644
index 0000000..3feb2a9
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h
@@ -0,0 +1,21 @@
+//
+//  EffectTechnique.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EffectTechnique : NSObject {
+    NSArray *passes;
+    NSString *name;
+}
+
+- (id) initWithName:(NSString*)theName passes:(NSArray*)thePasses;
+
+@property (nonatomic, readonly) NSString *name;
+@property (nonatomic, readonly) NSArray *passes;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m
new file mode 100644
index 0000000..c102d57
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m
@@ -0,0 +1,31 @@
+//
+//  EffectTechnique.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "EffectTechnique.h"
+
+@implementation EffectTechnique
+
+-(id) initWithName:(NSString *)theName passes:(NSArray *)thePasses {
+    if (self = [super init]) {
+        name = [theName retain];
+        passes = [thePasses retain];
+    }
+    return self;
+}
+
+@synthesize name;
+@synthesize passes;
+
+- (void) dealloc
+{
+    [name release];
+    [passes release];
+    [super dealloc];
+}
+
+@end
\ No newline at end of file
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Enums.h b/Classes/Retronator/Xni/Framework/Graphics/Enums.h
index ba4b600..61f899d 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Enums.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Enums.h
@@ -2,17 +2,17 @@
 #import <OpenGLES/ES2/gl.h>
 
 typedef enum {
-	BlendZero,
-	BlendOne,
-	BlendSourceColor,
-	BlendInverseSourceColor,
-	BlendSourceAlpha,
-	BlendInverseSourceAlpha,
-	BlendDestinationAlpha,
-	BlendInverseDestinationAlpha,
-	BlendDestinationColor,
-	BlendInverseDestinationColor,
-	BlendSourceAlphaSaturation,
+	BlendZero = GL_ZERO,
+	BlendOne = GL_ONE,
+	BlendSourceColor = GL_SRC_COLOR,
+	BlendInverseSourceColor = GL_ONE_MINUS_SRC_COLOR,
+	BlendSourceAlpha = GL_SRC_ALPHA,
+	BlendInverseSourceAlpha = GL_ONE_MINUS_SRC_ALPHA,
+	BlendDestinationAlpha = GL_DST_ALPHA,
+	BlendInverseDestinationAlpha = GL_ONE_MINUS_DST_ALPHA,
+	BlendDestinationColor = GL_DST_COLOR,
+	BlendInverseDestinationColor = GL_ONE_MINUS_DST_COLOR,
+	BlendSourceAlphaSaturation = GL_SRC_ALPHA_SATURATE,
 	BlendBlendFactor,
 	BlendInverseBlendFactor
 } Blend;
diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h
index df7b05c..81a8e3d 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h
@@ -24,12 +24,36 @@
 	
 	// The OpenGL names for the buffers used to render to this view
 	GLuint defaultFramebuffer, colorRenderbuffer, depthRenderbuffer;
+	
+	// Device state
+	Color *blendFactor;
+	BlendState *blendState;
+	DepthStencilState *depthStencilState;
+	GraphicsDeviceStatus graphicsDeviceStatus;
+	IndexBuffer *indices;
+	RasterizerState *rasterizerState;
+	int referenceStencil;
+	SamplerStateCollection *samplerStates;
+	TextureCollection *textures;
+	
+	NSMutableArray *vertices;
 }
 
-@property (nonatomic, readonly) GraphicsProfile graphicsProfile;
-
 - (id) initWithGame:(Game*) theGame;
 
+@property (nonatomic, retain) Color *blendFactor;
+@property (nonatomic, retain) BlendState *blendState;
+@property (nonatomic, retain) DepthStencilState *depthStencilState;
+@property (nonatomic, readonly) GraphicsDeviceStatus graphicsDeviceStatus;
+@property (nonatomic, readonly) GraphicsProfile graphicsProfile;
+@property (nonatomic, retain) IndexBuffer *indices;
+@property (nonatomic, retain) RasterizerState *rasterizerState;
+@property (nonatomic) int referenceStencil;
+@property (nonatomic, readonly) SamplerStateCollection *samplerStates;
+@property (nonatomic, readonly) TextureCollection *textures;
+
++ (int) getNumberOfVerticesForPrimitiveType:(PrimitiveType)primitiveType primitiveCount:(int)primitiveCount;
+
 // Presentation
 - (void) reset;
 - (void) present;
@@ -38,6 +62,31 @@
 - (void) clearWithColor:(Color*)color;
 - (void) clearWithOptions:(ClearOptions)options color:(Color*)color depth:(float)depth stencil:(int)stencil;
 
+// Vertex buffers
+- (NSArray*) getVertexBuffers;
+- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer;
+- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer vertexOffset:(int)vertexOffset;
+- (void) setVertexBuffers:(VertexBufferBinding*)vertexBuffer, ... NS_REQUIRES_NIL_TERMINATION;
+
+// Drawing
+- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType startingAt:(int)startVertex count:(int)primitiveCount;
+
+- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType offsetVerticesBy:(int)baseVertex 
+                          startingAt:(int)startIndex count:(int)primitiveCount;
+
+- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData
+                       startingAt:(int)vertexOffset count:(int)primitiveCount;
+
+- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType
+						 vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration
+                       startingAt:(int)vertexOffset count:(int)primitiveCount;
+
+- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType 
+								vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration 
+                        offsetVerticesBy:(int)vertexOffset indices:(void*)indexData dataType:(DataType)dataType
+                              startingAt:(int)indexOffset count:(int)primitiveCount;
+
+
 // Low level methods
 - (uint) createTexture;
 
diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m
index b7763ba..be84233 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m
+++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m
@@ -7,6 +7,7 @@
 //
 
 #import "GraphicsDevice.h"
+#import <OpenGLES/ES1/gl.h>
 
 #import "Retronator.Xni.Framework.h"
 #import "Retronator.Xni.Framework.Graphics.h"
@@ -46,15 +47,82 @@
         glGenRenderbuffersOES(1, &depthRenderbuffer);
         glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
         glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
-        
+		
         // Do the initial reset.
         [self reset];
+		
+		// Initialize defaults.
+		self.blendFactor = [Color white];
+		self.blendState = [BlendState opaque];
+		self.depthStencilState = [DepthStencilState defaultDepth];
+		graphicsDeviceStatus = GraphicsDeviceStatusNormal;
+		self.indices = nil;
+		self.rasterizerState = [RasterizerState cullClockwise];
+		self.referenceStencil = 0;
+		samplerStates = [[SamplerStateCollection alloc] init];
+		textures = [[TextureCollection alloc] init];
+		[samplerStates insertObject:[SamplerState linearClamp] atIndex:0];
 	}
 	
 	return self;
 }
 
+#define FLAG_BLOCK(variable, parameter) if (variable) { glEnable(parameter); } else { glDisable(parameter);}
+
+@synthesize blendFactor;
+@synthesize blendState;
+- (void) setBlendState:(BlendState*)value {
+	if (value != blendState) {
+		[value retain];
+		[blendState release];
+		blendState = value;
+		
+		// Apply the blend state.
+		glBlendFunc(blendState.colorSourceBlend, blendState.colorDestinationBlend);
+	}
+}
+
+@synthesize depthStencilState;
+- (void) depthStencilState:(DepthStencilState*)value {
+	if (value != depthStencilState) {
+		[value retain];
+		[depthStencilState release];
+		depthStencilState = value;
+	}
+}
+
+@synthesize graphicsDeviceStatus;
 @synthesize graphicsProfile;
+@synthesize indices;
+@synthesize rasterizerState;
+- (void) setRasterizerState:(RasterizerState*)value {
+	if (value != rasterizerState) {
+		[value retain];
+		[rasterizerState release];
+		rasterizerState = value;
+	}
+}
+
+@synthesize referenceStencil;
+@synthesize samplerStates;
+@synthesize textures;
+
++ (int) getNumberOfVerticesForPrimitiveType:(PrimitiveType)primitiveType primitiveCount:(int)primitiveCount {
+    switch (primitiveType) {
+        case PrimitiveTypeLineStrip:
+			return primitiveCount + 1;
+        case PrimitiveTypeLineList:
+            return 2 * primitiveCount;
+        case PrimitiveTypeTriangleStrip:
+			return primitiveCount + 2;
+        case PrimitiveTypeTriangleList:
+            return 3 * primitiveCount;
+        default:
+            [NSException raise:@"NotImplementedException" 
+                        format:@"The primitive type %i is not yet implemented.", primitiveType];
+            return 0;
+    }
+}
 
 // Presentation
 - (void) reset {
@@ -97,6 +165,36 @@
     glClear(options);    
 }
 
+// Vertex buffers
+- (NSArray*) getVertexBuffers {
+	return [[NSArray arrayWithArray:vertices] autorelease];
+}
+
+- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer {
+	VertexBufferBinding *binding = [[VertexBufferBinding alloc] initWithVertexBuffer:vertexBuffer];
+	[vertices insertObject:binding atIndex:0];
+	[binding release];
+}
+
+- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer vertexOffset:(int)vertexOffset {
+	VertexBufferBinding *binding = [[VertexBufferBinding alloc] initWithVertexBuffer:vertexBuffer vertexOffset:vertexOffset];
+	[vertices insertObject:binding atIndex:0];
+	[binding release];
+}
+
+- (void) setVertexBuffers:(VertexBufferBinding*)vertexBuffer, ... {
+    if (vertexBuffer != nil) {
+		va_list args;
+		va_start(args, vertexBuffer);
+		VertexBufferBinding *binding = vertexBuffer;
+		for (int i = 0; binding; i++) {
+			[vertices insertObject:binding atIndex:i];
+			binding = va_arg(args, VertexBufferBinding*);
+		}
+		va_end(args);
+    }
+}
+
 // Low level methods
 - (uint) createTexture {
     GLuint textureId;
@@ -129,6 +227,23 @@
 
 - (EAGLContext*) createContext { return nil; }
 
+- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType startingAt:(int)startVertex count:(int)primitiveCount {}
+
+- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType offsetVerticesBy:(int)baseVertex 
+                          startingAt:(int)startIndex count:(int)primitiveCount {}
+
+- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData
+                       startingAt:(int)vertexOffset count:(int)primitiveCount {}
+
+- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType
+						 vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration
+                       startingAt:(int)vertexOffset count:(int)primitiveCount {}
+
+- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType 
+								vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration 
+                        offsetVerticesBy:(int)vertexOffset indices:(void*)indexData dataType:(DataType)dataType
+                              startingAt:(int)indexOffset count:(int)primitiveCount {}
+
 // Private methods
 
 + (void) getFormat:(GLenum*)format AndType:(GLenum*)type ForSurfaceFormat:(SurfaceFormat)surfaceFormat {
@@ -158,5 +273,16 @@
 	}
 }
 
+- (void) dealloc
+{
+	[blendState release];
+	[depthStencilState release];
+	[rasterizerState release];
+	[samplerStates release];
+	[textures release];
+	[super dealloc];
+}
+
+
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h
new file mode 100644
index 0000000..162d70b
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h
@@ -0,0 +1,19 @@
+//
+//  IndexBuffer.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "GraphicsResource.h"
+
+@interface IndexBuffer : GraphicsResource {
+	uint bufferID;
+}
+
+@property (nonatomic, readonly) uint bufferId;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m
new file mode 100644
index 0000000..c926a76
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m
@@ -0,0 +1,16 @@
+//
+//  IndexBuffer.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "IndexBuffer.h"
+
+
+@implementation IndexBuffer
+
+@synthesize bufferId;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h
index 2f36245..4c76fcc 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h
@@ -12,7 +12,6 @@
 
 
 @interface ReachGraphicsDevice : GraphicsDevice {
-
 }
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m
index 783f98d..4d05f64 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m
+++ b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m
@@ -8,10 +8,121 @@
 
 #import "ReachGraphicsDevice.h"
 
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@interface ReachGraphicsDevice()
+
+- (void) enableVertexBuffers;
+- (void) disableVertexBuffers;
+	
+- (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration forUserData:(void*)data;
+
+- (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration onStream:(int)stream useBuffers:(BOOL)useBuffers pointer:(void*)pointer;
+- (void) disableDeclaration:(VertexDeclaration*)vertexDeclaration;
+
+@end
+
+
 @implementation ReachGraphicsDevice
 
 - (EAGLContext*) createContext { 
 	return [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; 
 }
 
+- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData
+                       startingAt:(int)vertexOffset count:(int)primitiveCount {
+	[self drawUserPrimitivesOfType:primitiveType vertices:vertexData.array ofType:vertexData.vertexDeclaration
+						startingAt:vertexOffset count:primitiveCount];
+}
+
+- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType 
+						 vertices:(void *)vertexData ofType:(VertexDeclaration *)vertexDeclaration 
+					   startingAt:(int)vertexOffset count:(int)primitiveCount {
+ 
+	[self enableDeclaration:vertexDeclaration forUserData:(vertexData + vertexOffset * vertexDeclaration.vertexStride)];
+    
+    int count = [GraphicsDevice getNumberOfVerticesForPrimitiveType:primitiveType primitiveCount:primitiveCount]; 
+    glDrawArrays(primitiveType, 0, count);
+    
+    [self disableDeclaration:vertexDeclaration]; 
+}
+
+// Private methods
+
+- (void) enableVertexBuffers {
+	// We need to enable the declarations set on the vertex buffers.
+	for (int i=0;i<[vertices count];i++) {
+		VertexBufferBinding *binding = [vertices objectAtIndex:i];
+		[self enableDeclaration:binding.vertexBuffer.vertexDeclaration
+					   onStream:i useBuffers:YES pointer:(void*)binding.vertexOffset];
+	}
+}
+
+- (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration forUserData:(void*)data {
+	[self enableDeclaration:vertexDeclaration onStream:0 useBuffers:NO pointer:data];
+}
+
+- (void) enableDeclaration:(VertexDeclaration *)vertexDeclaration onStream:(int)stream useBuffers:(BOOL)useBuffers pointer:(void*)pointer {	
+    NSArray *vertexElements = vertexDeclaration.vertexElements;
+    
+    int stride = vertexDeclaration.vertexStride;
+    
+    for (VertexElement *vertexElement in vertexElements) {       
+        if (useBuffers) {
+            // Bind the buffer the vertex element is using.
+			VertexBufferBinding* binding = [vertices objectAtIndex:stream];
+            glBindBuffer(GL_ARRAY_BUFFER, binding.vertexBuffer.bufferId);
+        }
+        
+        // Enable the state that the vertex element represents.
+        glEnableClientState(vertexElement.vertexElementUsage);
+        
+        // Create the pointer to the vertex element data.
+        switch (vertexElement.vertexElementUsage) {
+            case VertexElementUsagePosition:
+                glVertexPointer([vertexElement getValueDimensions], [vertexElement getValueDataType], 
+                                stride, pointer + vertexElement.offset);
+                break;
+            case VertexElementUsageNormal:
+                glNormalPointer([vertexElement getValueDataType], 
+                                stride, pointer + vertexElement.offset);
+                break;
+            case VertexElementUsageTextureCoordinate:
+                glTexCoordPointer([vertexElement getValueDimensions], [vertexElement getValueDataType], 
+                                  stride, pointer + vertexElement.offset);
+                break;
+            case VertexElementUsageColor:
+                glColorPointer([vertexElement getValueDimensions], [vertexElement getValueDataType], 
+                               stride, pointer + vertexElement.offset);
+                break;                
+            case VertexElementUsagePointSize:
+                glPointSizePointerOES([vertexElement getValueDataType], 
+                                      stride, pointer + vertexElement.offset);
+                break;
+            default:
+                [NSException raise:@"NotImplementedException" 
+                            format:@"The vertex element usage %i is not yet implemented.", vertexElement.vertexElementUsage];
+                break;
+        }
+    }
+}
+
+- (void) disableVertexBuffers {
+	// We need to disable the declarations set on the vertex buffers.
+	for (int i=0;i<[vertices count];i++) {
+		VertexBufferBinding *binding = [vertices objectAtIndex:i];
+		[self disableDeclaration:binding.vertexBuffer.vertexDeclaration];
+	}
+	
+    glBindBuffer(GL_ARRAY_BUFFER, 0);
+}
+
+- (void) disableDeclaration:(VertexDeclaration*)vertexDeclaration {
+    NSArray *vertexElements = vertexDeclaration.vertexElements;
+    for (VertexElement *vertexElement in vertexElements) {
+        // Enable the state that the vertex element represents.
+        glDisableClientState(vertexElement.vertexElementUsage);
+    }
+}
+
 @end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h
index bba1c99..8fd121e 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h
@@ -1,7 +1,15 @@
 #import "Enums.h"
 
-@class GraphicsResource, Texture, Texture2D, Effect;
-@class BlendState, DepthStencilState, RasterizerState, SamplerState;
+@class GraphicsResource, Texture, Texture2D, Effect, EffectTechnique, EffectPass, BasicEffect, DirectionalLight;
+
+#import "VertexStructs.h"
+@class VertexElement, VertexPositionColor, VertexPositionTexture, VertexDeclaration;
+@class VertexArray, VertexPositionColorArray, VertexPositionTextureArray; 
+@class VertexBuffer, VertexBufferBinding, IndexBuffer;
+
+@class BlendState, DepthStencilState, RasterizerState, SamplerState, SamplerStateCollection, TextureCollection;
 
 @protocol IGraphicsDeviceService;
 @class GraphicsDevice, ReachGraphicsDevice, HiDefGraphicsDevice;
+
+@class SpriteBatch;
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h
index 3551b6c..23036c2 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h
@@ -3,10 +3,31 @@
 #import "Texture.h"
 #import "Texture2D.h"
 #import "Effect.h"
+#import "EffectTechnique.h"
+#import "EffectPass.h"
+#import "BasicEffect.h"
+#import "DirectionalLight.h"
+
+#import "VertexStructs.h"
+#import "VertexElement.h"
+#import "VertexPositionColor.h"
+#import "VertexPositionTexture.h"
+#import "VertexDeclaration.h"
+
+#import "VertexArray.h"
+#import "VertexPositionColorArray.h"
+#import "VertexPositionTextureArray.h"
+
+#import "VertexBuffer.h"
+#import "VertexBufferBinding.h"
+#import "IndexBuffer.h"
+
 #import "BlendState.h"
 #import "DepthStencilState.h"
 #import "RasterizerState.h"
 #import "SamplerState.h"
+#import "SamplerStateCollection.h"
+#import "TextureCollection.h"
 
 #import "IGraphicsDeviceService.h"
 #import "GraphicsDevice.h"
diff --git a/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h
new file mode 100644
index 0000000..b6ace11
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h
@@ -0,0 +1,22 @@
+//
+//  SamplerStateCollection.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "Retronator.Xni.Framework.Graphics.classes.h"
+
+@interface SamplerStateCollection : NSObject {
+	NSMutableArray *collection;
+}
+ 
+- (int) count;
+- (SamplerState*)objectAtIndex:(NSUInteger)index;
+- (void)addObject:(SamplerState*)anObject;
+- (void)insertObject:(SamplerState*)anObject atIndex:(NSUInteger)index;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m
new file mode 100644
index 0000000..f79e45d
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m
@@ -0,0 +1,46 @@
+//
+//  SamplerStateCollection.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "SamplerStateCollection.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation SamplerStateCollection
+
+- (id) init
+{
+	self = [super init];
+	if (self != nil) {
+		collection = [[NSMutableArray alloc] init];
+	}
+	return self;
+}
+
+- (int) count {
+	return [collection count];
+}
+
+- (SamplerState*)objectAtIndex:(NSUInteger)index {
+	return (SamplerState*)[collection objectAtIndex:index];
+}
+
+- (void)addObject:(SamplerState*)anObject {
+	[collection addObject:anObject];
+}
+
+- (void)insertObject:(SamplerState*)anObject atIndex:(NSUInteger)index {
+	[collection insertObject:anObject atIndex:index];
+}
+
+- (void) dealloc
+{
+	[collection dealloc];
+	[super dealloc];
+}
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture.h b/Classes/Retronator/Xni/Framework/Graphics/Texture.h
index 689ab15..24588bd 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Texture.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Texture.h
@@ -16,7 +16,7 @@
 	int levelCount;
 }
 
-- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice SurfaceFormat:(SurfaceFormat)theFormat LevelCount:(int)theLevelCount;
+- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice surfaceFormat:(SurfaceFormat)theFormat levelCount:(int)theLevelCount;
 
 @property (nonatomic, readonly) uint textureId;
 @property (nonatomic) SurfaceFormat format;
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture.m b/Classes/Retronator/Xni/Framework/Graphics/Texture.m
index ea8d677..046fb68 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Texture.m
+++ b/Classes/Retronator/Xni/Framework/Graphics/Texture.m
@@ -11,7 +11,7 @@
 
 @implementation Texture
 
-- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice SurfaceFormat:(SurfaceFormat)theFormat LevelCount:(int)theLevelCount {
+- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice surfaceFormat:(SurfaceFormat)theFormat levelCount:(int)theLevelCount {
 	if (self = [super initWithGraphicsDevice:theGraphicsDevice]) {
 		format = theFormat;
 		
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h
index f5bed8e..0d99d82 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h
@@ -15,24 +15,24 @@
 	int width;
 }
 
-- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice Width:(int)theWidth Height:(int)theHeight;
-- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice Width:(int)theWidth Height:(int)theHeight MipMaps:(BOOL)generateMipMaps Format:(SurfaceFormat)theFormat;
+- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight;
+- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight mipMaps:(BOOL)generateMipMaps format:(SurfaceFormat)theFormat;
 
 @property (nonatomic, readonly) Rectangle *bounds;
 @property (nonatomic, readonly) int height;
 @property (nonatomic, readonly) int width;
 
-+ (Texture2D*) fromData:(NSData*)textureData GraphicsDevice:(GraphicsDevice*)graphicsDevice;
-//+ (Texture2D*) fromData:(NSData*)textureData GraphicsDevice:(GraphicsDevice*)graphicsDevice Width:(int)width Height:(int)height Zoom:(BOOL)zoom;
++ (Texture2D*) fromData:(NSData*)textureData graphicsDevice:(GraphicsDevice*)graphicsDevice;
+//+ (Texture2D*) fromData:(NSData*)textureData graphicsDevice:(GraphicsDevice*)graphicsDevice width:(int)width height:(int)height zoom:(BOOL)zoom;
 
 // - (void) getDataTo:(void *)data;
-// - (void) getDataTo:(void *)data StartIndex:(int)startIndex ElementCount:(int)elementCount;
-// - (void) getDataFromLevel:(int)level SourceRectangle:(Rectangle*)rect To:(void *)data StartIndex:(int)startIndex ElementCount:(int)elementCount;
+// - (void) getDataTo:(void *)data startIndex:(int)startIndex elementCount:(int)elementCount;
+// - (void) getDataFromLevel:(int)level sourceRectangle:(Rectangle*)rect to:(void *)data StartIndex:(int)startIndex elementCount:(int)elementCount;
 
 - (void) setDataFrom:(void*)data;
-- (void) setDataToLevel:(int)level SourceRectangle:(Rectangle*)rect From:(void *)data;
+- (void) setDataToLevel:(int)level sourceRectangle:(Rectangle*)rect from:(void *)data;
 
-// - (void) saveAsJpeg:(NSData*)textureData Width:(int)width Height:(int)height;
-// - (void) saveAsPng:(NSData*)textureData Width:(int)width Height:(int)height;
+// - (void) saveAsJpeg:(NSData*)textureData width:(int)width height:(int)height;
+// - (void) saveAsPng:(NSData*)textureData width:(int)width height:(int)height;
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m
index 89771bd..6bea994 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m
+++ b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m
@@ -15,15 +15,15 @@
 
 @implementation Texture2D
 
-- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice Width:(int)theWidth Height:(int)theHeight {
-	return [self initWithGraphicsDevice:theGraphicsDevice Width:theWidth Height:theHeight MipMaps:NO Format:SurfaceFormatColor];
+- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight {
+	return [self initWithGraphicsDevice:theGraphicsDevice width:theWidth height:theHeight mipMaps:NO format:SurfaceFormatColor];
 }
 
 - (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice 
-						Width:(int)theWidth 
-					   Height:(int)theHeight 
-					  MipMaps:(BOOL)generateMipMaps 
-					   Format:(SurfaceFormat)theFormat {
+						width:(int)theWidth 
+					   height:(int)theHeight 
+					  mipMaps:(BOOL)generateMipMaps 
+					   format:(SurfaceFormat)theFormat {
 	int theLevelCount = 1;
 	if (generateMipMaps) {
 		int side = MIN(theWidth, theHeight);
@@ -32,7 +32,7 @@
 			theLevelCount++;
 		}
 	}
-	if (self = [super initWithGraphicsDevice:theGraphicsDevice SurfaceFormat:theFormat LevelCount:theLevelCount]) {
+	if (self = [super initWithGraphicsDevice:theGraphicsDevice surfaceFormat:theFormat levelCount:theLevelCount]) {
 		width = theWidth;
 		height = theHeight;
 		textureId = [graphicsDevice createTexture];
@@ -41,14 +41,14 @@
 }
 
 - (Rectangle*) bounds {
-	return [Rectangle rectangleWithX:0 Y:0 Width:width Height:height];
+	return [Rectangle rectangleWithX:0 y:0 width:width height:height];
 }
 
 @synthesize width;
 @synthesize height;
 
 
-+ (Texture2D*) fromData:(NSData*)textureData GraphicsDevice:(GraphicsDevice*)graphicsDevice {
++ (Texture2D*) fromData:(NSData*)textureData graphicsDevice:(GraphicsDevice*)graphicsDevice {
     if (graphicsDevice == nil) {
         [NSException raise:@"ArgumentNullException" format:@"The graphics device cannot be null."];
     }
@@ -71,7 +71,7 @@
     CGContextTranslateCTM(textureContext, 0, 0);
     CGContextDrawImage(textureContext, CGRectMake(0, 0, width, height), image.CGImage);
     
-    Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice Width:(int)width Height:(int)height];
+    Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice width:(int)width height:(int)height];
     [texture setDataFrom:imageData];
     
     CGContextRelease(textureContext);  
@@ -86,7 +86,7 @@
 }
 
 
-- (void) setDataToLevel:(int)level SourceRectangle:(Rectangle*)rect From:(void *)data {
+- (void) setDataToLevel:(int)level sourceRectangle:(Rectangle*)rect from:(void *)data {
 	[graphicsDevice setData:data toTexture2D:self SourceRectangle:rect level:level];
 }
 
diff --git a/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h
new file mode 100644
index 0000000..f360e14
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h
@@ -0,0 +1,22 @@
+//
+//  TextureCollection.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "Retronator.Xni.Framework.Graphics.classes.h"
+
+@interface TextureCollection : NSObject {
+	NSMutableArray *collection;
+}
+
+- (int) count;
+- (Texture*)objectAtIndex:(NSUInteger)index;
+- (void)addObject:(Texture*)anObject;
+- (void)insertObject:(Texture*)anObject atIndex:(NSUInteger)index;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m
new file mode 100644
index 0000000..d022263
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m
@@ -0,0 +1,46 @@
+//
+//  TextureCollection.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "TextureCollection.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation TextureCollection
+
+- (id) init
+{
+	self = [super init];
+	if (self != nil) {
+		collection = [[NSMutableArray alloc] init];
+	}
+	return self;
+}
+
+- (int) count {
+	return [collection count];
+}
+
+- (Texture*)objectAtIndex:(NSUInteger)index {
+	return (Texture*)[collection objectAtIndex:index];
+}
+
+- (void)addObject:(Texture*)anObject {
+	[collection addObject:anObject];
+}
+
+- (void)insertObject:(Texture*)anObject atIndex:(NSUInteger)index {
+	[collection insertObject:anObject atIndex:index];
+}
+
+- (void) dealloc
+{
+	[collection dealloc];
+	[super dealloc];
+}
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/Vector4.h b/Classes/Retronator/Xni/Framework/Graphics/Vector4.h
index fee59b1..7295bcb 100644
--- a/Classes/Retronator/Xni/Framework/Graphics/Vector4.h
+++ b/Classes/Retronator/Xni/Framework/Graphics/Vector4.h
@@ -14,11 +14,11 @@
     Vector4Struct data;
 }
 
-- (id) initWithX:(float)x Y:(float)y Z:(float)z W:(float)w;
+- (id) initWithX:(float)x y:(float)y z:(float)z w:(float)w;
 - (id) initWithStruct: (Vector4Struct*)vectorData;
 - (id) initWithVector: (Vector4*)vector;
 
-+ (Vector4*) vectorWithX:(float)x Y:(float)y Z:(float)z W:(float)w;
++ (Vector4*) vectorWithX:(float)x y:(float)y z:(float)z w:(float)w;
 + (Vector4*) vectorWithStruct: (Vector4Struct*)vectorData;
 + (Vector4*) vectorWithVector: (Vector4*)vector;
 
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h
new file mode 100644
index 0000000..11c8e5c
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h
@@ -0,0 +1,28 @@
+//
+//  VertexArray.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "System.classes.h"
+
+#import "Retronator.Xni.Framework.Graphics.classes.h"
+
+@interface VertexArray : NSObject {
+    AdaptiveArray *array;
+}
+
+- (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity;
+
+@property (nonatomic, readonly) void *array;
+@property (nonatomic, readonly) int count;
+@property (nonatomic, readonly) int sizeInBytes;
+@property (nonatomic, readonly) VertexDeclaration *vertexDeclaration;
+
+- (void) clear;
+- (void) addVertex:(void*)vertex;
+
+@end
\ No newline at end of file
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m
new file mode 100644
index 0000000..3e64649
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m
@@ -0,0 +1,50 @@
+//
+//  VertexArray.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexArray.h"
+#import "System.h"
+
+@implementation VertexArray
+
+- (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity {
+    if (self = [super init]) {
+        array = [[AdaptiveArray alloc] initWithItemSize:itemSize initialCapacity:initialCapacity];
+    }
+    return self;
+}
+
+- (void *) array {
+    return array.array;
+}
+
+- (int) count {
+    return array.count;
+}
+
+- (int) sizeInBytes {
+	return array.count * array.itemSize;
+}
+
+- (VertexDeclaration *) vertexDeclaration { return nil; }
+
+- (void) clear {
+    [array clear];
+}
+
+- (void) addVertex:(void *)vertex {
+	[array addItem:vertex];
+}
+
+- (void) dealloc
+{
+    [array release];
+    [super dealloc];
+}
+
+@end
+
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h
new file mode 100644
index 0000000..1a5b123
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h
@@ -0,0 +1,21 @@
+//
+//  VertexBuffer.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "GraphicsResource.h"
+
+@interface VertexBuffer : GraphicsResource {
+    uint bufferId;
+	VertexDeclaration *vertexDeclaration;
+}
+
+@property (nonatomic, readonly) uint bufferId;
+@property (nonatomic, readonly) VertexDeclaration *vertexDeclaration;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m
new file mode 100644
index 0000000..b7a514d
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m
@@ -0,0 +1,17 @@
+//
+//  VertexBuffer.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexBuffer.h"
+
+
+@implementation VertexBuffer
+
+@synthesize bufferId;
+@synthesize vertexDeclaration;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h
new file mode 100644
index 0000000..67259d5
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h
@@ -0,0 +1,27 @@
+//
+//  VertexBufferBinding.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "Retronator.Xni.Framework.Graphics.classes.h"
+
+@interface VertexBufferBinding : NSObject {
+	int instanceFrequency;
+	VertexBuffer *vertexBuffer;
+	int vertexOffset;
+}
+
+- (id) initWithVertexBuffer:(VertexBuffer*)theVertexBuffer;
+- (id) initWithVertexBuffer:(VertexBuffer*)theVertexBuffer vertexOffset:(int)theVertexOffset;
+- (id) initWithVertexBuffer:(VertexBuffer*)theVertexBuffer vertexOffset:(int)theVertexOffset instanceFrequency:(int)theInstanceFrequency;
+
+@property (nonatomic, readonly) int instanceFrequency;
+@property (nonatomic, readonly) VertexBuffer *vertexBuffer;
+@property (nonatomic, readonly) int vertexOffset;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m
new file mode 100644
index 0000000..9c91bae
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m
@@ -0,0 +1,43 @@
+//
+//  VertexBufferBinding.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexBufferBinding.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexBufferBinding
+
+- (id) initWithVertexBuffer:(VertexBuffer *)theVertexBuffer {
+	return [self initWithVertexBuffer:theVertexBuffer vertexOffset:0 instanceFrequency:0];
+}
+
+- (id) initWithVertexBuffer:(VertexBuffer *)theVertexBuffer vertexOffset:(int)theVertexOffset {
+	return [self initWithVertexBuffer:theVertexBuffer vertexOffset:theVertexOffset instanceFrequency:0];
+}
+
+- (id) initWithVertexBuffer:(VertexBuffer *)theVertexBuffer vertexOffset:(int)theVertexOffset instanceFrequency:(int)theInstanceFrequency {
+	if (self = [super init]) {
+		vertexBuffer = [theVertexBuffer retain];
+		vertexOffset = theVertexOffset;
+		instanceFrequency = theInstanceFrequency;
+	}
+	return self;
+}
+
+@synthesize instanceFrequency;
+@synthesize vertexBuffer;
+@synthesize vertexOffset;
+
+- (void) dealloc
+{
+	[vertexBuffer release];
+	[super dealloc];
+}
+
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h
new file mode 100644
index 0000000..bb745d5
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h
@@ -0,0 +1,23 @@
+//
+//  VertexDeclaration.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "GraphicsResource.h"
+
+@interface VertexDeclaration : GraphicsResource {
+	NSArray *vertexElements;
+	int vertexStride;
+}
+
+- (id) initWithElements:(NSArray*)theVertexElements;
+
+@property (nonatomic, readonly) NSArray *vertexElements;
+@property (nonatomic, readonly) int vertexStride;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m
new file mode 100644
index 0000000..1943b83
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m
@@ -0,0 +1,37 @@
+//
+//  VertexDeclaration.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexDeclaration.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexDeclaration
+
+- (id) initWithElements:(NSArray *)theVertexElements {
+    if (self = [super init]) {
+        vertexElements = [theVertexElements retain];
+		
+	    vertexStride = 0;
+		for (VertexElement* vertexElement in vertexElements) {
+			vertexStride += [vertexElement getSize];
+		}	
+    }
+    return self;
+}
+
+@synthesize vertexElements;
+@synthesize vertexStride;
+
+- (void) dealloc
+{
+    [vertexElements release];
+    [super dealloc];
+}
+
+@end
+
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h
new file mode 100644
index 0000000..39a5ec7
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h
@@ -0,0 +1,39 @@
+//
+//  VertexElement.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "Retronator.Xni.Framework.Graphics.classes.h"
+
+@interface VertexElement : NSObject {
+    int offset;
+    int usageIndex;
+    VertexElementFormat vertexElementFormat;
+    VertexElementUsage vertexElementUsage;
+}
+
+- (id) initWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat 
+                usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex;
+
++ (VertexElement*) vertexElementWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat 
+                usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex;
+
+@property (nonatomic) int offset;
+@property (nonatomic) int usageIndex;
+@property (nonatomic) VertexElementFormat vertexElementFormat;
+@property (nonatomic) VertexElementUsage vertexElementUsage;
+
++ (int) getSizeForFormat:(VertexElementFormat)format;
++ (int) getValueDimensionsForFormat:(VertexElementFormat)format;
++ (DataType) getValueDataTypeForFormat:(VertexElementFormat)format;
+
+- (int) getSize;
+- (int) getValueDimensions;
+- (DataType) getValueDataType;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m
new file mode 100644
index 0000000..18ba7a0
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m
@@ -0,0 +1,102 @@
+//
+//  VertexElement.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexElement.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexElement
+
+- (id) initWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat 
+                usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex {
+    if (self = [super init]) {
+        offset = theOffset;
+        vertexElementFormat = elementFormat;
+        vertexElementUsage = elementUsage;
+        usageIndex = theUsageIndex;
+    }
+    return self;
+}
+
++ (VertexElement*) vertexElementWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat 
+									 usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex {
+	return [[[VertexElement alloc] initWithOffset:theOffset format:elementFormat
+											usage:elementUsage usageIndex:theUsageIndex] autorelease];
+}
+
+@synthesize offset;
+@synthesize usageIndex;
+@synthesize vertexElementFormat;
+@synthesize vertexElementUsage;
+
++ (int) getSizeForFormat:(VertexElementFormat)format {
+    switch (format) {
+        case VertexElementFormatSingle:
+            return sizeof(float);
+        case VertexElementFormatVector2:
+            return sizeof(Vector2Struct);
+        case VertexElementFormatVector3:
+            return sizeof(Vector3Struct);
+		case VertexElementFormatVector4:
+			return sizeof(Vector4Struct);
+        case VertexElementFormatColor:
+            return sizeof(uint);        
+        default:
+            [NSException raise:@"NotImplementedException" format:@"The vertex element format %i is not yet implemented.", format];
+            return 0;
+    }
+}
+
++ (int) getValueDimensionsForFormat:(VertexElementFormat)format {
+    switch (format) {
+        case VertexElementFormatSingle:
+            return 1;
+        case VertexElementFormatVector2:
+            return 2;
+        case VertexElementFormatVector3:
+            return 3;
+		case VertexElementFormatVector4:
+			return 4;
+        case VertexElementFormatColor:
+            return 4;        
+        default:
+            [NSException raise:@"NotImplementedException" format:@"The vertex element format %i is not yet implemented.", format];
+            return 0;
+    }    
+}
+
++ (DataType) getValueDataTypeForFormat:(VertexElementFormat)format {
+    switch (format) {
+        case VertexElementFormatSingle:
+            return DataTypeFloat;
+        case VertexElementFormatVector2:
+            return DataTypeFloat;
+        case VertexElementFormatVector3:
+            return DataTypeFloat;
+		case VertexElementFormatVector4:
+			return DataTypeFloat;
+        case VertexElementFormatColor:
+            return DataTypeUnsignedByte;        
+        default:
+            [NSException raise:@"NotImplementedException" format:@"The vertex element format %i is not yet implemented.", format];
+            return 0;
+    }    
+}
+
+- (int) getSize {
+    return [VertexElement getSizeForFormat:vertexElementFormat];
+}
+
+- (int) getValueDimensions {
+    return [VertexElement getValueDimensionsForFormat:vertexElementFormat];
+}
+
+- (DataType) getValueDataType {
+    return [VertexElement getValueDataTypeForFormat:vertexElementFormat];
+}
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h
new file mode 100644
index 0000000..b9c1044
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h
@@ -0,0 +1,19 @@
+//
+//  VertexPositionColor.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "VertexElement.h"
+
+@interface VertexPositionColor : VertexElement {
+
+}
+
++ (VertexDeclaration*) vertexDeclaration;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m
new file mode 100644
index 0000000..275af20
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m
@@ -0,0 +1,35 @@
+//
+//  VertexPositionColor.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexPositionColor.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexPositionColor
+
+VertexDeclaration *vertexDeclaration;
+
++ (void) initialize {
+    NSArray *vertexElements = [NSArray arrayWithObjects:
+								   [VertexElement vertexElementWithOffset:offsetof(VertexPositionColorStruct, position) 
+																   format:VertexElementFormatVector3 
+																	usage:VertexElementUsagePosition 
+															   usageIndex:0], 
+								   [VertexElement vertexElementWithOffset:offsetof(VertexPositionColorStruct, color) 
+																   format:VertexElementFormatColor 
+																	usage:VertexElementUsageColor
+															   usageIndex:0], nil]; 
+	
+	vertexDeclaration = [[VertexDeclaration alloc] initWithElements:vertexElements];
+}
+
++ (VertexDeclaration *) vertexDeclaration {
+	return vertexDeclaration;
+}
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h
new file mode 100644
index 0000000..83ab8e5
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h
@@ -0,0 +1,21 @@
+//
+//  VertexPositionColorArray.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "VertexArray.h"
+
+@interface VertexPositionColorArray : VertexArray {
+
+}
+
+- (id) initWithInitialCapacity:(int)initialCapacity;
+
+- (void) addVertex:(VertexPositionColorStruct*)vertex;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m
new file mode 100644
index 0000000..dbd774c
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m
@@ -0,0 +1,29 @@
+//
+//  VertexPositionColorArray.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexPositionColorArray.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexPositionColorArray
+
+- (id) initWithInitialCapacity:(int)initialCapacity {
+	if (self = [super initWithItemSize:sizeof(VertexPositionColorStruct) initialCapacity:initialCapacity]) {
+	}
+	return self;
+}
+
+- (VertexDeclaration *) vertexDeclaration { 
+	return [VertexPositionColor vertexDeclaration];
+}
+
+- (void) addVertex:(VertexPositionColorStruct*)vertex {
+	[super addVertex:vertex];
+}
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h
new file mode 100644
index 0000000..7d82137
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h
@@ -0,0 +1,19 @@
+//
+//  VertexPositionTexture.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "VertexElement.h"
+
+@interface VertexPositionTexture : VertexElement {
+
+}
+
++ (VertexDeclaration*) vertexDeclaration;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m
new file mode 100644
index 0000000..ea1001e
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m
@@ -0,0 +1,35 @@
+//
+//  VertexPositionTexture.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexPositionTexture.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexPositionTexture
+
+VertexDeclaration *vertexDeclaration;
+
++ (void) initialize {
+    NSArray *vertexElements = [NSArray arrayWithObjects:
+							   [VertexElement vertexElementWithOffset:offsetof(VertexPositionTextureStruct, position) 
+															   format:VertexElementFormatVector3 
+																usage:VertexElementUsagePosition 
+														   usageIndex:0], 
+							   [VertexElement vertexElementWithOffset:offsetof(VertexPositionTextureStruct, texture) 
+															   format:VertexElementFormatVector2 
+																usage:VertexElementUsageTextureCoordinate
+														   usageIndex:0], nil]; 
+	
+	vertexDeclaration = [[VertexDeclaration alloc] initWithElements:vertexElements];
+}
+
++ (VertexDeclaration *) vertexDeclaration {
+	return vertexDeclaration;
+}
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.h
new file mode 100644
index 0000000..b519b9b
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.h
@@ -0,0 +1,21 @@
+//
+//  VertexPositionTextureArray.h
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "VertexArray.h"
+
+@interface VertexPositionTextureArray : VertexArray {
+
+}
+
+- (id) initWithInitialCapacity:(int)initialCapacity;
+
+- (void) addVertex:(VertexPositionTextureStruct*)vertex;
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m
new file mode 100644
index 0000000..befd3b2
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m
@@ -0,0 +1,29 @@
+//
+//  VertexPositionTextureArray.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "VertexPositionTextureArray.h"
+
+#import "Retronator.Xni.Framework.Graphics.h"
+
+@implementation VertexPositionTextureArray
+
+- (id) initWithInitialCapacity:(int)initialCapacity {
+	if (self = [super initWithItemSize:sizeof(VertexPositionTextureStruct) initialCapacity:initialCapacity]) {
+	}
+	return self;
+}
+
+- (VertexDeclaration *) vertexDeclaration { 
+	return [VertexPositionTexture vertexDeclaration];
+}
+
+- (void) addVertex:(VertexPositionTextureStruct*)vertex {
+	[super addVertex:vertex];
+}
+
+@end
diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h b/Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h
new file mode 100644
index 0000000..5363c8f
--- /dev/null
+++ b/Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h
@@ -0,0 +1,29 @@
+#import "Retronator.Xni.Framework.classes.h"
+
+typedef struct {
+    Vector3Struct position;
+    uint color;
+} VertexPositionColorStruct;
+
+typedef struct {
+    Vector3Struct position;
+    Vector2Struct texture;
+} VertexPositionTextureStruct;
+
+typedef struct {
+    Vector3Struct position;
+    Vector3Struct normal;
+    Vector2Struct texture;
+} VertexPositionNormalTextureStruct;
+
+typedef struct {
+    Vector3Struct position;
+    uint color;
+    float size;
+} VertexPositionColorSizeStruct;
+
+typedef struct {
+    Vector3Struct position;
+    uint color;
+    Vector2Struct texture;
+} VertexPositionColorTextureStruct;
\ No newline at end of file
diff --git a/Classes/Retronator/Xni/Framework/Matrix.h b/Classes/Retronator/Xni/Framework/Matrix.h
index 6c04fb8..bed8a1b 100644
--- a/Classes/Retronator/Xni/Framework/Matrix.h
+++ b/Classes/Retronator/Xni/Framework/Matrix.h
@@ -17,7 +17,7 @@
 - (id) initWithStruct: (MatrixStruct*)matrixData;
 - (id) initWithMatrix: (Matrix*)matrix;
 
-+ (Matrix*) matrixWithData: (MatrixStruct*)matrixData;
++ (Matrix*) matrixWithStruct: (MatrixStruct*)matrixData;
 + (Matrix*) matrixWithMatrix: (Matrix*)matrix;
 
 + (Matrix*) translation:(Vector3*)position;
diff --git a/Classes/Retronator/Xni/Framework/Matrix.m b/Classes/Retronator/Xni/Framework/Matrix.m
index fbd2c46..b508c1b 100644
--- a/Classes/Retronator/Xni/Framework/Matrix.m
+++ b/Classes/Retronator/Xni/Framework/Matrix.m
@@ -8,7 +8,198 @@
 
 #import "Matrix.h"
 
+#import "Retronator.Xni.Framework.h"
 
 @implementation Matrix
 
+- (id) initWithStruct: (MatrixStruct*)matrixStruct {
+    if (self = [super init]) {
+        data = *matrixStruct;
+    }
+    return self;
+}
+
+- (id) initWithMatrix: (Matrix*)matrix {
+    return [self initWithStruct:matrix.data];  
+}
+
++ (Matrix*) matrixWithStruct: (MatrixStruct*)matrixStruct {
+    return [[[Matrix alloc] initWithStruct:matrixStruct] autorelease];
+}
+
++ (Matrix*) matrixWithMatrix: (Matrix*)matrix {
+    return [[[Matrix alloc] initWithMatrix:matrix] autorelease];
+}
+
++ (Matrix*) translation:(Vector3*)position {
+    Matrix *matrix = [Matrix identity];
+    matrix.translation = position;
+    return matrix;
+}
+
++ (Matrix*) scale:(Vector3 *)scale {
+    Matrix *matrix = [Matrix identity];
+    matrix.data->m11= scale.x;
+    matrix.data->m22= scale.y;
+    matrix.data->m33= scale.z;
+    return matrix;    
+}
+
++ (Matrix*) rotationAround:(Vector3 *)axis for:(float)angle {
+    Vector3 *normalizedAxis = [[Vector3 vectorWithVector:axis] normalize];
+    
+    float c = cosf(angle);
+    float s = sinf(angle);
+    float x = normalizedAxis.x;
+    float y = normalizedAxis.y;
+    float z = normalizedAxis.z;
+    
+    Matrix *matrix = [Matrix zero];
+    matrix.data->m11 = (x * x) * (1 - c) + c;
+    matrix.data->m12 = (y * x) * (1 - c) + (z * s);
+    matrix.data->m13 = (x * z) * (1 - c) - (y * s);
+    matrix.data->m21 = (x * y) * (1 - c) - (z * s);
+    matrix.data->m22 = (y * y) * (1 - c) + c;
+    matrix.data->m23 = (y * z) * (1 - c) + (x * s);
+    matrix.data->m31 = (x * z) * (1 - c) + (y * s);
+    matrix.data->m32 = (y * z) * (1 - c) - (x * s);
+    matrix.data->m33 = (z * z) * (1 - c) + c;   
+    matrix.data->m44 = 1;
+    return matrix;
+}
+
++ (Matrix*) rotationWithQuaternion:(Quaternion *)quaternion {
+    Quaternion *normalizedQuaternion = [[Quaternion quaternionWithQuaternion:quaternion] normalize];
+    
+    float x = normalizedQuaternion.x;
+    float y = normalizedQuaternion.y;
+    float z = normalizedQuaternion.z;
+    float w = normalizedQuaternion.w;
+    
+    Matrix *matrix = [Matrix zero];
+    matrix.data->m11 = 1 - 2 * ( y * y + z * z );
+    matrix.data->m12 = 2 * ( x * y - z * w );
+    matrix.data->m13 = 2 * ( x * z + y * w );
+    matrix.data->m21 = 2 * ( x * y + z * w );
+    matrix.data->m22 = 1 - 2 * ( x * x + z * z );
+    matrix.data->m23 = 2 * ( y * z - x * w );
+    matrix.data->m31 = 2 * ( x * z - y * w );
+    matrix.data->m32 = 2 * ( y * z + x * w );
+    matrix.data->m33 = 1 - 2 * ( x * x + y * y );
+    matrix.data->m44 = 1;
+    return matrix;
+}
+
++ (Matrix*) lookAt:(Vector3*)target from:(Vector3*)position up:(Vector3*)up {
+    Vector3 *z = [[Vector3 subtract:position by:target] normalize];
+    Vector3 *x = [[Vector3 crossProductOf:up with:z] normalize];
+    Vector3 *y = [Vector3 crossProductOf:z with:x];
+    Matrix *matrix = [Matrix zero];    
+    // First column
+    matrix.data->m11 = x.x;
+    matrix.data->m21 = x.y;
+    matrix.data->m31 = x.z;
+    // Second column
+    matrix.data->m12 = y.x;
+    matrix.data->m22 = y.y;
+    matrix.data->m32 = y.z;
+    // Third column
+    matrix.data->m13 = z.x;
+    matrix.data->m23 = z.y;
+    matrix.data->m33 = z.z;
+    // Translation
+    matrix.data->m41 = -[Vector3 dotProductOf:x with:position];
+    matrix.data->m42 = -[Vector3 dotProductOf:y with:position];
+    matrix.data->m43 = -[Vector3 dotProductOf:z with:position];
+    matrix.data->m44 = 1;
+    return matrix;
+}
+
++ (Matrix*) perspectiveWithWidth:(float)width height:(float)height nearPlane:(float)nearPlane farPlane:(float)farPlane {
+    Matrix *matrix = [Matrix zero];
+    matrix.data->m11 = (2 * nearPlane) / width;
+    matrix.data->m22 = (2 * nearPlane) / height;
+    matrix.data->m33 = farPlane / (nearPlane - farPlane);
+    matrix.data->m34 = -1;
+    matrix.data->m43 = nearPlane * farPlane / (nearPlane - farPlane);
+    return matrix;    
+}
+
++ (Matrix*) perspectiveWithFieldOfView:(float)fieldOfView aspectRatio:(float)aspectRatio nearPlane:(float)nearPlane farPlane:(float)farPlane{
+    float width = 2 * nearPlane * tanf(fieldOfView * 0.5f);
+    float height = width / aspectRatio;
+    return [Matrix perspectiveWithWidth:width height:height nearPlane:nearPlane farPlane:farPlane];
+}
+
++ (Matrix*) worldAt:(Vector3 *)position forward:(Vector3 *)forward up:(Vector3 *)up {
+    Vector3 *z = [[Vector3 negate:forward] normalize];
+    Vector3 *x = [[Vector3 crossProductOf:up with:z] normalize];
+    Vector3 *y = [Vector3 crossProductOf:z with:x];
+    Matrix *matrix = [Matrix identity];
+    matrix.right = x;
+    matrix.up = y;
+    matrix.backward = z;
+    matrix.translation = position;
+    return matrix;
+}
+
+// PROPERTIES
+
+- (MatrixStruct*) data {return &data;}
+
+// Main rows
+
+- (Vector3 *) right {return [Vector3 vectorWithX:data.m11 y:data.m12 z:data.m13];}
+- (void) setRight:(Vector3 *)value {data.m11 = value.x; data.m12 = value.y; data.m13 = value.z;}
+
+- (Vector3 *) up {return [Vector3 vectorWithX:data.m21 y:data.m22 z:data.m23];}
+- (void) setUp:(Vector3 *)value {data.m21 = value.x; data.m22 = value.y; data.m23 = value.z;}
+
+- (Vector3 *) backward {return [Vector3 vectorWithX:data.m31 y:data.m32 z:data.m33];}
+- (void) setBackward:(Vector3 *)value {data.m31 = value.x; data.m32 = value.y; data.m33 = value.z;}
+
+- (Vector3 *) translation {return [Vector3 vectorWithX:data.m41 y:data.m42 z:data.m43];}
+- (void) setTranslation:(Vector3 *)value {data.m41 = value.x; data.m42 = value.y; data.m43 = value.z;}
+
+// Negative rows
+
+- (Vector3 *) left {return [Vector3 vectorWithX:-data.m11 y:-data.m12 z:-data.m13];}
+- (void) setLeft:(Vector3 *)value {data.m11 = -value.x; data.m12 = -value.y; data.m13 = -value.z;}
+
+- (Vector3 *) down {return [Vector3 vectorWithX:-data.m21 y:-data.m22 z:-data.m23];}
+- (void) setDown:(Vector3 *)value {data.m21 = -value.x; data.m22 = -value.y; data.m23 = -value.z;}
+
+- (Vector3 *) forward {return [Vector3 vectorWithX:-data.m31 y:-data.m32 z:-data.m33];}
+- (void) setForward:(Vector3 *)value {data.m31 = -value.x; data.m32 = -value.y; data.m33 = -value.z;}
+
+// METHODS
+
+- (Matrix*) transpose {
+    MatrixTranspose(self.data);
+    return self;
+}
+
+- (Matrix*) inverse {
+    MatrixInverse(self.data);
+    return self;
+}
+
+- (Matrix*) multiplyWith:(Matrix*)value {
+    MatrixStruct result;
+    MatrixMultiply(self.data, value.data, &result);
+    data = result;
+    return self;
+}
+
+// CONSTANTS
+
++ (id) zero {
+    MatrixStruct MatrixStruct = MatrixMake(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+    return [Matrix matrixWithStruct:&MatrixStruct];
+}
++ (id) identity {
+    MatrixStruct MatrixStruct = MatrixMake(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+    return [Matrix matrixWithStruct:&MatrixStruct];
+}
+
 @end
diff --git a/Classes/Retronator/Xni/Framework/Quaternion.h b/Classes/Retronator/Xni/Framework/Quaternion.h
index 9614b5d..0f767ff 100644
--- a/Classes/Retronator/Xni/Framework/Quaternion.h
+++ b/Classes/Retronator/Xni/Framework/Quaternion.h
@@ -14,7 +14,7 @@
     Vector4Struct data;
 }
 
-- (id) initWithX:(float)x Y:(float)y Z:(float)z W:(float)w;
+- (id) initWithX:(float)x y:(float)y z:(float)z w:(float)w;
 - (id) initWithVectorPart:(Vector3*)vector scalarPart:(float)scalar;
 - (id) initWithStruct: (Vector4Struct*)quaternionData;
 - (id) initWithQuaternion: (Quaternion*)quaternion;
diff --git a/Classes/Retronator/Xni/Framework/Rectangle.h b/Classes/Retronator/Xni/Framework/Rectangle.h
index b826045..3f37d6a 100644
--- a/Classes/Retronator/Xni/Framework/Rectangle.h
+++ b/Classes/Retronator/Xni/Framework/Rectangle.h
@@ -15,11 +15,11 @@
 	RectangleStruct data;
 }
 
-- (id) initWithX:(int)x Y:(int)y Width:(int)width Height:(int)height;
+- (id) initWithX:(int)x y:(int)y width:(int)width height:(int)height;
 - (id) initWithStruct:(RectangleStruct*) rectangleStruct;
 - (id) initWithRectangle:(Rectangle*) rectangle;
 
-+ (Rectangle*) rectangleWithX:(int)x Y:(int)y Width:(int)width Height:(int)height;
++ (Rectangle*) rectangleWithX:(int)x y:(int)y width:(int)width height:(int)height;
 + (Rectangle*) rectangleWithStruct:(RectangleStruct*) rectangleStruct;
 + (Rectangle*) rectangleWithRectangle:(Rectangle*) rectangle;
 + (Rectangle*) rectangleWithCGRect:(CGRect) cgRect;
diff --git a/Classes/Retronator/Xni/Framework/Rectangle.m b/Classes/Retronator/Xni/Framework/Rectangle.m
index f4f425b..c75f1c4 100644
--- a/Classes/Retronator/Xni/Framework/Rectangle.m
+++ b/Classes/Retronator/Xni/Framework/Rectangle.m
@@ -13,7 +13,7 @@
 
 // CONSTRUCTORS
 
-- (id) initWithX:(int)x Y:(int)y Width:(int)width Height:(int)height {
+- (id) initWithX:(int)x y:(int)y width:(int)width height:(int)height {
 	if (self = [super init]) {
 		data = RectangleMake(x, y, width, height);
 	}
@@ -31,8 +31,8 @@
 	return [self initWithStruct:rectangle.data];
 }
 
-+ (Rectangle*) rectangleWithX:(int)x Y:(int)y Width:(int)width Height:(int)height {
-	return [[[Rectangle alloc] initWithX:x Y:y Width:width Height:height] autorelease];
++ (Rectangle*) rectangleWithX:(int)x y:(int)y width:(int)width height:(int)height {
+	return [[[Rectangle alloc] initWithX:x y:y width:width height:height] autorelease];
 }
 
 + (Rectangle*) rectangleWithStruct:(RectangleStruct*) rectangleStruct {
@@ -44,8 +44,8 @@
 }
 
 + (Rectangle*) rectangleWithCGRect:(CGRect) cgRect {
-	return [Rectangle rectangleWithX:cgRect.origin.x Y:cgRect.origin.y
-							   Width:cgRect.size.width Height:cgRect.size.height];
+	return [Rectangle rectangleWithX:cgRect.origin.x y:cgRect.origin.y
+							   width:cgRect.size.width height:cgRect.size.height];
 }
 
 // PROPERTIES
@@ -84,6 +84,6 @@
 
 // CONSTANTS
 
-+ (Rectangle*) empty {return [Rectangle rectangleWithX:0 Y:0 Width:0 Height:0];}
++ (Rectangle*) empty {return [Rectangle rectangleWithX:0 y:0 width:0 height:0];}
 
 @end
diff --git a/Classes/Retronator/Xni/Framework/Vector2.h b/Classes/Retronator/Xni/Framework/Vector2.h
index 3955dbc..b814ef7 100644
--- a/Classes/Retronator/Xni/Framework/Vector2.h
+++ b/Classes/Retronator/Xni/Framework/Vector2.h
@@ -14,11 +14,11 @@
     Vector2Struct data;
 }
 
-- (id) initWithX:(float)x Y:(float)y;
+- (id) initWithX:(float)x y:(float)y;
 - (id) initWithStruct: (Vector2Struct*)vectorData;
 - (id) initWithVector: (Vector2*)vector;
 
-+ (Vector2*) vectorWithX:(float)x Y:(float)y;
++ (Vector2*) vectorWithX:(float)x y:(float)y;
 + (Vector2*) vectorWithStruct: (Vector2Struct*)vectorData;
 + (Vector2*) vectorWithVector: (Vector2*)vector;
 
diff --git a/Classes/Retronator/Xni/Framework/Vector3.h b/Classes/Retronator/Xni/Framework/Vector3.h
index 40da667..991008d 100644
--- a/Classes/Retronator/Xni/Framework/Vector3.h
+++ b/Classes/Retronator/Xni/Framework/Vector3.h
@@ -14,11 +14,11 @@
     Vector3Struct data;
 }
 
-- (id) initWithX:(float)x Y:(float)y Z:(float)z;
+- (id) initWithX:(float)x y:(float)y z:(float)z;
 - (id) initWithStruct: (Vector3Struct*)vectorData;
 - (id) initWithVector: (Vector3*)vector;
 
-+ (Vector3*) vectorWithX:(float)x Y:(float)y Z:(float)z;
++ (Vector3*) vectorWithX:(float)x y:(float)y z:(float)z;
 + (Vector3*) vectorWithStruct: (Vector3Struct*)vectorData;
 + (Vector3*) vectorWithVector: (Vector3*)vector;
 
diff --git a/Classes/Retronator/Xni/Framework/Vector3.m b/Classes/Retronator/Xni/Framework/Vector3.m
index 7721460..3f95644 100644
--- a/Classes/Retronator/Xni/Framework/Vector3.m
+++ b/Classes/Retronator/Xni/Framework/Vector3.m
@@ -8,7 +8,167 @@
 
 #import "Vector3.h"
 
+#import "Retronator.Xni.Framework.h"
 
 @implementation Vector3
 
+// CONSTRUCTORS
+
+- (id) initWithX:(float)x y:(float)y z:(float)z {
+    if (self = [super init]) {
+        data = Vector3Make(x, y, z);
+    }
+    return self;
+}
+
+- (id) initWithStruct: (Vector3Struct*)vectorData {
+    if (self = [super init]) {
+        data = *vectorData;
+    }
+    return self;
+}
+
+- (id) initWithVector: (Vector3*)vector {
+    return [self initWithStruct:vector.data];  
+}
+
++ (Vector3*) vectorWithX:(float)x y:(float)y z:(float)z {
+    return [[[Vector3 alloc] initWithX:x y:y z:z] autorelease];
+}
+
++ (Vector3*) vectorWithStruct: (Vector3Struct*)vectorData {
+    return [[[Vector3 alloc] initWithStruct:vectorData] autorelease];
+}
+
++ (Vector3*) vectorWithVector: (Vector3*)vector {
+    return [[[Vector3 alloc] initWithVector:vector] autorelease];
+}
+
+// PROPERTIES
+
+- (float) x {return data.x;}
+- (void) setX:(float)value {data.x = value;}
+
+- (float) y {return data.y;}
+- (void) setY:(float)value {data.y = value;}
+
+- (float) z {return data.z;}
+- (void) setZ:(float)value {data.z = value;}
+
+- (Vector3Struct*) data {return &data;}
+
+// METHODS
+
++ (Vector3*) normalize:(Vector3*)value {
+    Vector3Struct resultData = *value.data;
+    Vector3Normalize(&resultData);
+    return [Vector3 vectorWithStruct:&resultData];
+}
+
++ (Vector3*) negate:(Vector3*)value {
+    Vector3Struct resultData = *value.data;
+    Vector3Negate(&resultData);
+    return [Vector3 vectorWithStruct:&resultData];    
+}
+
++ (Vector3*) add:(Vector3*)value1 to:(Vector3*)value2 {
+    Vector3Struct resultData;
+    Vector3Add(value1.data, value2.data, &resultData);
+    return [Vector3 vectorWithStruct:&resultData];
+}
+
++ (Vector3*) subtract:(Vector3*)value1 by:(Vector3*)value2 {
+    Vector3Struct resultData;
+    Vector3Subtract(value1.data, value2.data, &resultData);
+    return [Vector3 vectorWithStruct:&resultData];    
+}
+
++ (Vector3*) multiply:(Vector3*)value by:(float)scalar {
+    Vector3Struct resultData;
+    Vector3Multiply(value.data, scalar, &resultData);
+    return [Vector3 vectorWithStruct:&resultData];    
+}
+
++ (Vector3*) crossProductOf:(Vector3*)value1 with:(Vector3*)value2 {
+    Vector3Struct resultData;
+    Vector3CrossProduct(value1.data, value2.data, &resultData);
+    return [Vector3 vectorWithStruct:&resultData];  
+}
+
++ (float) dotProductOf:(Vector3*)value1 with:(Vector3*)value2 {
+    return Vector3DotProduct(value1.data, value2.data);
+}
+
++ (Vector3*) transform:(Vector3*)value with:(Matrix*)matrix {
+    Vector3Struct resultData;
+    Vector3Transform(value.data, matrix.data, &resultData);
+    return [Vector3 vectorWithStruct:&resultData];
+}
+
++ (Vector3*) transformNormal:(Vector3*)value with:(Matrix*)matrix {
+    Vector3Struct resultData;
+    Vector3TransformNormal(value.data, matrix.data, &resultData);
+    return [Vector3 vectorWithStruct:&resultData];
+}
+
+- (float) length {
+    return Vector3Length(self.data);
+}
+
+- (float) lengthSquared {
+    return Vector3LengthSquared(self.data);
+}
+
+- (Vector3*) normalize {
+    Vector3Normalize(&data);
+    return self;
+}
+- (Vector3*) negate {
+    Vector3Negate(&data);
+    return self;
+}
+
+- (Vector3*) add:(Vector3*)value {
+    Vector3Add(self.data, value.data, self.data);
+    return self;
+}
+
+- (Vector3*) subtract:(Vector3*)value {
+    Vector3Subtract(self.data, value.data, self.data);
+    return self;
+}
+
+- (Vector3*) multiplyBy:(float)scalar {
+    Vector3Multiply(self.data, scalar, self.data);
+    return self;
+}
+
+- (Vector3*) transformWith:(Matrix*)matrix {
+    Vector3Transform(self.data, matrix.data, self.data);
+    return self;
+}
+
+- (Vector3*) transformNormalWith:(Matrix*)matrix {
+    Vector3TransformNormal(self.data, matrix.data, self.data);
+    return self;
+}
+
+- (NSString *) description {
+    return [NSString stringWithFormat:@"Vector(%f, %f, %f)", data.x, data.y, data.z];
+}
+
+// Constants
+
++ (Vector3*) zero {return [Vector3 vectorWithX:0 y:0 z:0];}
++ (Vector3*) one {return [Vector3 vectorWithX:1 y:1 z:1];}
++ (Vector3*) unitX {return [Vector3 vectorWithX:1 y:0 z:0];}
++ (Vector3*) unitY {return [Vector3 vectorWithX:0 y:1 z:0];}
++ (Vector3*) unitZ {return [Vector3 vectorWithX:0 y:0 z:1];}
++ (Vector3*) up {return [Vector3 vectorWithX:0 y:1 z:0];}
++ (Vector3*) down {return [Vector3 vectorWithX:0 y:-1 z:0];}
++ (Vector3*) left {return [Vector3 vectorWithX:-1 y:0 z:0];}
++ (Vector3*) right {return [Vector3 vectorWithX:1 y:0 z:0];}
++ (Vector3*) forward {return [Vector3 vectorWithX:0 y:0 z:-1];}
++ (Vector3*) backward {return [Vector3 vectorWithX:0 y:0 z:1];}
+
 @end
diff --git a/Classes/System/AdaptiveArray.m b/Classes/System/AdaptiveArray.m
new file mode 100644
index 0000000..0362f8a
--- /dev/null
+++ b/Classes/System/AdaptiveArray.m
@@ -0,0 +1,50 @@
+//
+//  AdaptiveArray.m
+//  XNI
+//
+//  Created by Matej Jan on 21.9.10.
+//  Copyright 2010 Retronator. All rights reserved.
+//
+
+#import "AdaptiveArray.h"
+
+@implementation AdaptiveArray
+
+- (id) initWithItemSize:(int)theItemSize initialCapacity:(int)theCapacity {
+    if (self = [super init]) {
+        itemSize = theItemSize;
+        capacity = theCapacity;
+        array = malloc(capacity * itemSize);
+    }
+    return self;
+}
+
+@synthesize itemSize;
+@synthesize array;
+@synthesize count;
+
+- (void) addItem:(void *)item {
+    if (count == capacity) {
+        // Resize array
+        void* newArray = malloc(capacity * 2 * itemSize);
+        memcpy(newArray, array, capacity * itemSize);
+        free(array);
+        array = newArray;
+        capacity *= 2;
+    }
+    memcpy(array + count * itemSize, item, itemSize);
+    count++;
+}
+
+- (void) clear {
+    count = 0;
+}
+
+- (void) dealloc
+{
+    free(array);
+    [super dealloc];
+}
+
+@end
+
diff --git a/Classes/System/System.classes.h b/Classes/System/System.classes.h
index b7951e3..6c2829f 100644
--- a/Classes/System/System.classes.h
+++ b/Classes/System/System.classes.h
@@ -4,3 +4,6 @@
 
 // Events
 @class Delegate, Event, EventArgs;
+
+// Arrays
+@class AdaptiveArray;
diff --git a/Classes/System/System.h b/Classes/System/System.h
index 672d2cc..e0cb4d4 100644
--- a/Classes/System/System.h
+++ b/Classes/System/System.h
@@ -5,4 +5,7 @@
 // Events
 #import "Delegate.h"
 #import "Event.h"
-#import "EventArgs.h"
\ No newline at end of file
+#import "EventArgs.h"
+
+// Arrays
+#import "AdaptiveArray.h"
\ No newline at end of file