diff --git a/src/graphics.cpp b/src/graphics.cpp
index 1afb20000c03c503e3061ee8cc189b99b2c79644..0e3e626535b802bce442da2f81d9d7e6cd5056c0 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -46,6 +46,10 @@ float zoom = 1.0;
 bool MouseActive = false;
 int last_x = 0, last_y = 0;
 
+bool showAxes=true;
+bool showFrame=false;
+bool showBox=true;
+
 bool showWholeMesh=true;
 bool showVertexSurface=false;
 bool showQuadricSurface=false;
@@ -76,7 +80,7 @@ void step(int count)
 }
 
 
-///draws the frame around the playground
+///draws a flat frame around the playground
 void displayFrame(void)
 {
     glColor3f(params.sceneBorderColour.r,
@@ -91,6 +95,45 @@ void displayFrame(void)
     glEnd();
 }
 
+///draws a frame box around the playground
+void displayBox(void)
+{
+    glColor3f(params.sceneBorderColour.r,
+	 			  params.sceneBorderColour.g,
+	 			  params.sceneBorderColour.b);
+    glLineWidth(1);
+	 //front square/plane
+    glBegin(GL_LINE_LOOP);
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y                      , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y                      , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z );
+    glEnd();
+
+	 //rear square/plane
+    glBegin(GL_LINE_LOOP);
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y                      , params.sceneOffset.z + params.sceneSize.z );
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y                      , params.sceneOffset.z + params.sceneSize.z );
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z + params.sceneSize.z );
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z + params.sceneSize.z );
+    glEnd();
+
+	 //sideways "connectors"
+	 glBegin(GL_LINES);
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y                      , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y                      , params.sceneOffset.z + params.sceneSize.z );
+
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y                      , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y                      , params.sceneOffset.z + params.sceneSize.z );
+
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x + params.sceneSize.x , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z + params.sceneSize.z );
+
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z );
+    glVertex3f( params.sceneOffset.x                      , params.sceneOffset.y + params.sceneSize.y , params.sceneOffset.z + params.sceneSize.z );
+    glEnd();
+}
+
 void displayAxes(void)
 {
 	glLineWidth(2);
@@ -326,8 +369,11 @@ void display(void)
 	          //0.0, cosf(-uhel_y), sinf(-uhel_y)); // up
 	          0.0, 1.0, 0.0); // up
 
-	displayFrame();
-	displayAxes();
+	glEnable(GL_FOG);
+	if (showBox) displayBox();
+	if (showFrame) displayFrame();
+	if (showAxes) displayAxes();
+	glDisable(GL_FOG);
 
 	if (showWholeMesh) mesh.displayMesh();
 	if (showVertexSurface) mesh.displayVertexAndNeigs();
@@ -382,7 +428,22 @@ void GetSceneViewSize(const int w,const int h,
 void printKeysHelp(void)
 {
 	std::cout << "\nKeys:\n";
-	std::cout << "ESC or 'q': quit\n";
+	std::cout << "ESC or 'q': quit        ENTER: enters empty line on a console\n";
+	std::cout << "' ','n','z': simulation goes/stop at various steps\n";
+	std::cout << "'r': resets the view\n";
+	std::cout << "'o','O': zoom in,out\n";
+	std::cout << "'h': displays this help\n";
+	std::cout << "'d': displays enabled features,displays status\n";
+	std::cout << "'m': toggle display of the mesh\n";
+	std::cout << "'v': toggle display of the vertex supporting region\n";
+	std::cout << "'V': chooses another vertex\n";
+	std::cout << "'s': toggle display of the fitted quadratic surface \n";
+	std::cout << "'t': toggle display of the test/debug function\n";
+	std::cout << "'a': toggle display of the R,G,B <-> x,y,z axes \n";
+	std::cout << "'f': toggle display of the frame/plane az z=0\n";
+	std::cout << "'b': toggle display of the bounding box\n";
+	std::cout << "'x','X': controls for some testing\n";
+	std::cout << "'i': not used\n";
 }
 
 
@@ -413,6 +474,9 @@ void keyboard(unsigned char key, int mx, int my)
         case 'q':  //quit
             exit(EXIT_SUCCESS);
             break;
+			case 13: //Enter key -- just empty lines
+				std::cout << std::endl;
+				break;
 
 		  //control execution of the simulation
         case ' ':  //pause/unpause, refresh every 10 cycles
@@ -436,7 +500,7 @@ void keyboard(unsigned char key, int mx, int my)
 				step(1);
             break;
 
-		  //etc stuff...
+		  //view params
         case 'r':  //set scale 1:1
 				uhel_x = 0.0;
 				uhel_y = 0.0;
@@ -444,12 +508,6 @@ void keyboard(unsigned char key, int mx, int my)
 				glutReshapeWindow(int(params.imgSizeX),int(params.imgSizeY));
 				glutPostRedisplay();
             break;
-			case 'h': //print help
-				printKeysHelp();
-				break;
-			case 'd': //print what is displayed
-				printDispayedFeauters();
-				break;
 			case 'o':
 				zoom -= 0.2f;
 				if (zoom < 0.2f) zoom=0.2f;
@@ -460,28 +518,61 @@ void keyboard(unsigned char key, int mx, int my)
 				glutPostRedisplay();
 				break;
 
-			case 'v':
-				++VertexID;
-				glutPostRedisplay();
+			//control hints/help
+			case 'h': //print help
+				printKeysHelp();
+				break;
+			case 'd': //print what is displayed
+				printDispayedFeauters();
 				break;
 
-			case 'M':
+
+			//display objects
+			case 'm':
 				showWholeMesh^=true;
 				glutPostRedisplay();
 				break;
-			case 'V':
+			case 'v':
 				showVertexSurface^=true;
 				glutPostRedisplay();
 				break;
-			case 'Q':
+			case 'V':
+				++VertexID;
+				glutPostRedisplay();
+				break;
+			case 's':
 				showQuadricSurface^=true;
 				glutPostRedisplay();
 				break;
-			case 'T':
+			case 't':
 				showTEST^=true;
 				glutPostRedisplay();
 				break;
 
+			//annotation controls
+			case 'a':
+				showAxes^=true;
+				glutPostRedisplay();
+				break;
+			case 'f':
+				showFrame^=true;
+				glutPostRedisplay();
+				break;
+			case 'b':
+				showBox^=true;
+				glutPostRedisplay();
+				break;
+
+			//some testing controls
+			case 'x':
+				glEnable(GL_FOG);
+				glutPostRedisplay();
+				break;
+			case 'X':
+				glDisable(GL_FOG);
+				glutPostRedisplay();
+				break;
+
 			case 'i': //inspect a cell
 				GetSceneViewSize(windowSizeX,windowSizeY, xVisF,xVisT,yVisF,yVisT);
 				sx=(float)mx              /(float)windowSizeX * (xVisT-xVisF) + xVisF;
@@ -499,9 +590,6 @@ void keyboard(unsigned char key, int mx, int my)
 					}
 			*/
 				break;
-			case 13: //Enter key -- just empty lines
-				std::cout << std::endl;
-				break;
     }
 }
 
@@ -607,6 +695,7 @@ void initializeGL(void)
     glutInit(&Argc, Argv);
 
     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
+    //glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
     glutInitWindowSize(800, 800); 
     glutInitWindowPosition(600, 100);
     glutCreateWindow(Argv[0]);
@@ -620,10 +709,29 @@ void initializeGL(void)
     glutMotionFunc(MouseMotion);
 
     glClearColor(0.0, 0.0, 0.0, 0.0);
+
+	 //enables alfa-blending for every object/drawing
     glEnable(GL_BLEND);
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
     glEnable(GL_POINT_SMOOTH);
-    glEnable(GL_CULL_FACE);
+    //glEnable(GL_CULL_FACE);
+	 //glEnable(GL_DEPTH_TEST);
+
+	 //enable fog:
+	 //glEnable(GL_FOG);
+	 glFogi(GL_FOG_MODE,GL_LINEAR);
+	 GLfloat fogColor[4]={0.4f*params.sceneBorderColour.r,
+	                      0.4f*params.sceneBorderColour.g,
+	                      0.4f*params.sceneBorderColour.b,
+								 1.0f}; //has no effect
+	 glFogfv(GL_FOG_COLOR,fogColor);
+	 //density is not required in linear mode
+	 //glFogf(GL_FOG_DENSITY,0.3f);
+	 //glHint(GL_FOG_HINT,GL_NICEST); //TODO adjust later
+
+	 glFogf(GL_FOG_START,params.sceneOffset.z);
+	 glFogf(GL_FOG_END,params.sceneOffset.z+params.sceneSize.z);
 }
 
 void loopGL(void)
diff --git a/src/main.cpp b/src/main.cpp
index 7cc51374d38f4e4598a4b7ed98516d919c357bba..b5709ccfb74378033fb0aa6cb69c885c35253bb4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -73,9 +73,9 @@ void ParamsSetup(void)
 	params.sceneCentre+=params.sceneOffset;
 
 	params.sceneOuterBorder=Vector3d<float>(2.f);
-	params.sceneBorderColour.r=0.5f;
-	params.sceneBorderColour.g=0.5f;
-	params.sceneBorderColour.b=0.5f;
+	params.sceneBorderColour.r=0.7f;
+	params.sceneBorderColour.g=0.7f;
+	params.sceneBorderColour.b=0.0f;
 
 	params.inputCellsFilename="cells/cell%d.txt";
 	params.numberOfAgents=2;