diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 5def3577218b89ca256f860fcfb84cf987e89008..4e7a79fb3c110fc83294932f0f03b33a3f06197e 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -235,6 +235,7 @@ Scene *add_scene(char *name)
 	sce->r.domesize = 1.0f;
 	sce->r.domeres = 4;
 	sce->r.domeresbuf = 1.0f;
+	sce->r.dometilt = 0;
 
 	sce->r.simplify_subsurf= 6;
 	sce->r.simplify_particles= 1.0f;
@@ -790,4 +791,4 @@ void free_dome_warp_text(struct Text *txt)
 			scene->r.dometext = NULL;
 		scene = scene->id.next;
 	}
-}
\ No newline at end of file
+}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index ce154755651658e256093ee62109b76efea1f55b..a4bacc3bfe905957b8dd36aadfa95a520ca7482f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8078,6 +8078,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
 			sce->r.domesize = 1.0f;
 			sce->r.domeres = 4;
 			sce->r.domeresbuf = 1.0f;
+			sce->r.dometilt = 0;
 		}
 		/* DBVT culling by default */
 		for(wrld=main->world.first; wrld; wrld= wrld->id.next) {
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index d26bdd469f6164a644e59aba231428d2602a00b5..3f81ca5453261dca92a080e92a6250b126852831 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -318,7 +318,7 @@ typedef struct RenderData {
 
 	/* Dome variables */
 	short domeres, domemode;
-	short domeangle, pad9;
+	short domeangle, dometilt;
 	float domesize;
 	float domeresbuf;
 	struct Text *dometext;
diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c
index 577486135b42677758902f8425b8b414d6a6476c..24a19a1ce9882f6e908cee8df961de9132bcb3c3 100644
--- a/source/blender/src/buttons_scene.c
+++ b/source/blender/src/buttons_scene.c
@@ -1833,13 +1833,14 @@ static uiBlock *framing_render_menu(void *arg_unused)
 	uiBlockBeginAlign(block);
 	uiDefButS(block, ROW, 0, "Dome",	xco, yco-=30, 88, 19, &(G.scene->r.stereomode), 7.0, 8.0, 0, 0, "Enables dome camera");
 	uiDefButS(block, NUM, 0, "Ang:",	xco+90, yco, 88, 19, &G.scene->r.domeangle, 90.0, 250.0, 0, 0, "Angle (Aperture) of the Dome - it only works in mode 1");
-	uiDefButS(block, NUM, 0, "Mode:",	xco+180, yco, 88, 19, &G.scene->r.domemode, 1.0, 3.0, 0, 0, "1 fisheye, 2 environment map, 3 spherical panoramic");
+	uiDefButS(block, NUM, 0, "Mode:",	xco+180, yco, 88, 19, &G.scene->r.domemode, 1.0, 5.0, 0, 0, "1 fisheye, 2 environment map, 3 spherical panoramic, 4 front-truncated, 5 rear-truncated");
 
 	uiDefButF(block, NUM, 0, "Size:",	xco, yco-=21, 88, 19, &G.scene->r.domesize, 0.5, 3.5, 0, 0, "Size adjustments");
 	uiDefButS(block, NUM, 0, "Tes:",	xco+90, yco, 88, 19, &G.scene->r.domeres, 1.0, 8.0, 0, 0, "Tesselation level - 1 to 8");
 	uiDefButF(block, NUM, 0, "Res:",	xco+180, yco, 88, 19, &G.scene->r.domeresbuf, 0.1, 1.0, 0, 0, "Buffer Resolution - decrease it to increase speed");
 
-	uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Warp Data: ", xco,yco-=21,268, 19, &G.scene->r.dometext, "Custom Warp Mesh data file");
+	uiDefButS(block, NUM, 0, "Tilt:",	xco, yco-=21, 88, 19, &G.scene->r.dometilt, -359, 359, 0, 0, "Vertical Camera Tilt");
+	uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Warp Data: ", xco+90,yco,178, 19, &G.scene->r.dometext, "Custom Warp Mesh data file");
 	uiBlockEndAlign(block);
 
 	uiBlockSetDirection(block, UI_TOP);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 641938253b77cebd529364bd89279b1cfabc4d20..5cf50fa39619abef3d4bed428f18381de49b50e5 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -376,7 +376,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
 
 			//initialize Dome Settings
 			if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
-				ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometext);
+				ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometilt, blscene->r.dometext);
 
 			if (sceneconverter)
 			{
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index af8b94857b9d13f717e34b0a83cf26178c696f57..a09525c7cd19a14e1d4b09741ae6b9fa252e07ba 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -701,7 +701,7 @@ bool GPG_Application::startEngine(void)
 
 		//initialize Dome Settings
 		if(m_startScene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
-			m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometext);
+			m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometilt, m_startScene->r.dometext);
 
 		// Set the GameLogic.globalDict from marshal'd data, so we can
 		// load new blend files and keep data in GameLogic.globalDict
diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp
index 25efe0a59c91fdfd337fb23889eafe84b7b572cb..7c111941b7f16a3e6958a1badebb70a2d9f7bac3 100644
--- a/source/gameengine/Ketsji/KX_Dome.cpp
+++ b/source/gameengine/Ketsji/KX_Dome.cpp
@@ -49,6 +49,7 @@ KX_Dome::KX_Dome (
 	short mode,		//mode - fisheye, truncated, warped, panoramic, ...
 	short angle,
 	float resbuf,	//size adjustment of the buffer
+	short tilt,
 	struct Text* warptext
 
 ):
@@ -60,6 +61,7 @@ KX_Dome::KX_Dome (
 	m_mode(mode),
 	m_angle(angle),
 	m_resbuffer(resbuf),
+	m_tilt(tilt),
 	m_canvas(canvas),
 	m_rasterizer(rasterizer),
 	m_rendertools(rendertools),
@@ -1485,6 +1487,7 @@ Uses 4 cameras for angles up to 180
 Uses 5 cameras for angles up to 250�
 Uses 6 cameras for angles up to 360�
 */
+	int i;
 	float deg45 = MT_PI / 4;
 	MT_Scalar c = cos(deg45);
 	MT_Scalar s = sin(deg45);
@@ -1579,6 +1582,23 @@ Uses 6 cameras for angles up to 360
 						0.0, 1.0, 0.0,
 						s, 0.0, c);
 	}
+
+	if (m_tilt)
+	{
+		printf("\n\n\\n\n\nTILTOU\n\n");
+		float degtilt = ((m_tilt % 360) * 2 * MT_PI) / 360;
+		c = cos(degtilt);
+		s = sin(degtilt);
+
+		MT_Matrix3x3 tilt_mat = MT_Matrix3x3(
+		1.0, 0.0, 0.0,
+		0.0, c, -s,
+		0.0, s,  c
+		);
+
+		for (i =0;i<6;i++)
+			m_locRot[i] = tilt_mat * m_locRot[i];
+	}
 }
 
 void KX_Dome::RotateCamera(KX_Camera* cam, int i)
diff --git a/source/gameengine/Ketsji/KX_Dome.h b/source/gameengine/Ketsji/KX_Dome.h
index 30d02dce7a05ccd16c300a9d924e586ed8f5444f..ecc97b9b5e0e888fd56354cadb3c0efe4c53ffe8 100644
--- a/source/gameengine/Ketsji/KX_Dome.h
+++ b/source/gameengine/Ketsji/KX_Dome.h
@@ -67,6 +67,7 @@ public:
 	short mode,
 	short angle,
 	float resbuf,
+	short tilt,
 	struct Text* warptext
 	);
 
@@ -166,6 +167,7 @@ protected:
 	short m_angle;		//the angle of the fisheye
 	float m_radangle;	//the angle of the fisheye in radians
 	float m_resbuffer;	//the resolution of the buffer
+	short m_tilt;		//the camera vertical tilt
 	
 	RAS_Rect m_viewport;
 
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index e773a9571f111f313fe794bcad622fb20656d927..72f1141c485c3b1c7364eb9b5d2d12bfbcdf6a30 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -262,9 +262,9 @@ void KX_KetsjiEngine::SetSceneConverter(KX_ISceneConverter* sceneconverter)
 	m_sceneconverter = sceneconverter;
 }
 
-void KX_KetsjiEngine::InitDome(float size, short res, short mode, short angle, float resbuf, struct Text* text)
+void KX_KetsjiEngine::InitDome(float size, short res, short mode, short angle, float resbuf, short tilt, struct Text* text)
 {
-	m_dome = new KX_Dome(m_canvas, m_rasterizer, m_rendertools,this, size, res, mode, angle, resbuf, text);
+	m_dome = new KX_Dome(m_canvas, m_rasterizer, m_rendertools,this, size, res, mode, angle, resbuf, tilt, text);
 	m_usedome = true;
 }
 
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index 528465b6c2ccac43e5f73d63237f542592d4fda4..90ac492bb2f7234db11da17b0892f4025e15eefa 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -211,7 +211,7 @@ public:
 	RAS_IRenderTools*	    GetRenderTools(){return m_rendertools;};
 
 	/// Dome functions
-	void			InitDome(float size, short res, short mode, short angle, float resbuf, struct Text* text); 
+	void			InitDome(float size, short res, short mode, short angle, float resbuf, short tilt, struct Text* text); 
 	void			EndDome();
 	void			RenderDome();
 	bool			m_usedome;