diff --git a/include/vec.h b/include/vec.h
index fe8fbe3..04e768a 100755
--- a/include/vec.h
+++ b/include/vec.h
@@ -21,6 +21,7 @@
 		Vec operator+(Vec* v);
 		Vec operator+(Vec c);
 		void add(Vec& a);
+		void sub(Vec& a);
 		Vec operator-(Vec& v);
 		Vec operator*(float s);
 		Vec operator*(Vec& s);
diff --git a/sources/main.cpp b/sources/main.cpp
index a7fa1f3..81e9249 100755
--- a/sources/main.cpp
+++ b/sources/main.cpp
@@ -187,6 +187,11 @@
 		return 1;
 	}
 
+	Vec viewer_zmove_pos = Vec(0.0f, 0.0f, 0.1f);
+	Vec viewer_zmove_neg = Vec(0.0f, 0.0f, -0.1f);
+	Vec viewer_xmove_pos = Vec(0.1f, 0.0f, 0.0f);
+	Vec viewer_xmove_neg = Vec(-0.1f, 0.0f, 0.0f);
+
 	Color black  (0,0,0);
 	Color blue   (0,0,1);
 	Color red    (1,0,0);
@@ -207,7 +212,7 @@
 	Vec* p7  = new Vec(0 ,10,10);
 
 	Vec cen (5,5,5);
-
+	
 	Model* cube = new Model();
 
 	/*
@@ -227,7 +232,7 @@
 	std::vector<Vec*> pp3;
 	std::vector<Vec*> pp4;
 	std::vector<Vec*> pp5;
-
+	
 	pp0.push_back(p0);
 	pp0.push_back(p3);
 	pp0.push_back(p2);
@@ -264,9 +269,10 @@
 	cube->addFace(new Poly(pp3, blue));
 	cube->addFace(new Poly(pp4, yellow));
 	cube->addFace(new Poly(pp5, white));
-
+	
 	cube->setCenter(cen);
 
+	
 	//char* modelfile = "obj/sample.obj";
 	char* modelfile = "obj/untitled.obj";
 	//char* modelfile = "obj/teapot.obj";
@@ -275,7 +281,7 @@
 	//myModel->setCenter(cen);
 
 	myModel->vardump("");
-
+	
 	// Prepare configuration:
 	int bitsPerColor = 8;
 	if (WINDOW_COLORDEPTH == 16) {
@@ -344,9 +350,7 @@
 	float deltaz = 0.0f;
 	float deltacolor = 0.0f;
 
-	float viewer_xpos = 0.0f;
-	float viewer_ypos = 0.0f;
-	float viewer_zpos = -50.0f;
+	Vec viewer = Vec(0.0f, 0.0f, -50.0f);
 
 
 	while (!done) {
@@ -365,7 +369,8 @@
 		// Place the viewer 50 units backward:
 		glMatrixMode(GL_MODELVIEW);
 		glLoadIdentity();
-		glTranslatef(viewer_xpos, viewer_ypos, viewer_zpos);
+		glTranslatef(viewer.x(), viewer.y(), viewer.z());
+		viewer.vardump(" ");
 
 		// Draw a rotating triangle:
 		glRotatef(deltay, 0.0f, 1.0f, 0.0f); // Rotation around the Y axis
@@ -377,8 +382,8 @@
 
 		//myModel->draw();
 
-		light0.draw();
-		light0.trace();
+		//light0.draw();
+		//light0.trace();
 		//light1.draw();
 		//light1.trace();
 
@@ -444,10 +449,10 @@
 		if (keystate[SDLK_DOWN]) deltaz += 2.0f;
 		
 		// move viewer
-		if (keystate[SDLK_w]) viewer_zpos -= 0.1f;		
-		if (keystate[SDLK_s]) viewer_zpos += 0.1f;	  
-		if (keystate[SDLK_a]) viewer_xpos -= 0.1f;		
-		if (keystate[SDLK_d]) viewer_xpos += 0.1f;
+		if (keystate[SDLK_w]) viewer.add(viewer_zmove_neg);
+		if (keystate[SDLK_s]) viewer.add(viewer_zmove_pos);
+		if (keystate[SDLK_a]) viewer.add(viewer_xmove_pos);
+		if (keystate[SDLK_d]) viewer.add(viewer_xmove_neg);
 
 		if (keystate[SDLK_SPACE]) {
 			deltacolor += 0.01f;
diff --git a/sources/model.cpp b/sources/model.cpp
index 5345a35..799a335 100755
--- a/sources/model.cpp
+++ b/sources/model.cpp
@@ -22,11 +22,11 @@
 	delete rotation;
 }
 
-void Model::setCenter(Vec& c) {
+void Model::setCenter(Vec& c) {  
 	position = c.clone();
 
 	for (std::vector<Poly*>::size_type i = 0 ; i < faces.size(); i++ ) {
-		faces.at(i)->setCenter(c);
+	  faces.at(i)->setCenter(c);
 	}
 }
 
diff --git a/sources/vec.cpp b/sources/vec.cpp
index 2874b30..b54865c 100755
--- a/sources/vec.cpp
+++ b/sources/vec.cpp
@@ -49,6 +49,12 @@
 	c[2] += a.z();
 }
 
+void Vec::sub(Vec& a) {
+	c[0] -= a.x();
+	c[1] -= a.y();
+	c[2] -= a.z();
+}
+
 Vec Vec::operator-(Vec& v) {
 	return Vec(x() - v.x(), y() - v.y(), z() - v.z());
 }