diff --git a/source/renderer/Renderer.cpp b/source/renderer/Renderer.cpp
index 3fd26e0..81d6d18 100644
--- a/source/renderer/Renderer.cpp
+++ b/source/renderer/Renderer.cpp
@@ -494,13 +494,11 @@ void CRenderer::EnumCaps()
 	m_Caps.m_VertexShader = false;
 	m_Caps.m_FragmentShader = false;
 	m_Caps.m_Shadows = false;
+	m_Caps.m_PrettyWater = false;
 
 	// now start querying extensions
-	if (!m_Options.m_NoVBO) {
-		if (ogl_HaveExtension("GL_ARB_vertex_buffer_object")) {
-			m_Caps.m_VBO=true;
-		}
-	}
+	if (!m_Options.m_NoVBO && ogl_HaveExtension("GL_ARB_vertex_buffer_object"))
+		m_Caps.m_VBO = true;
 
 	if (0 == ogl_HaveExtensions(0, "GL_ARB_vertex_program", "GL_ARB_fragment_program", NULL))
 	{
@@ -526,6 +524,13 @@ void CRenderer::EnumCaps()
 			m_Caps.m_Shadows = true;
 	}
 #endif
+
+#if CONFIG2_GLES
+	m_Caps.m_PrettyWater = true;
+#else
+	if (0 == ogl_HaveExtensions(0, "GL_ARB_vertex_shader", "GL_ARB_fragment_shader", "GL_EXT_framebuffer_object", NULL))
+		m_Caps.m_PrettyWater = true;
+#endif
 }
 
 void CRenderer::RecomputeSystemShaderDefines()
diff --git a/source/renderer/Renderer.h b/source/renderer/Renderer.h
index af3b16f..dd3d379 100644
--- a/source/renderer/Renderer.h
+++ b/source/renderer/Renderer.h
@@ -174,6 +174,7 @@ public:
 		bool m_VertexShader;
 		bool m_FragmentShader;
 		bool m_Shadows;
+		bool m_PrettyWater;
 	};
 
 public:
diff --git a/source/renderer/WaterManager.cpp b/source/renderer/WaterManager.cpp
index 19d65e7..7f640df 100644
--- a/source/renderer/WaterManager.cpp
+++ b/source/renderer/WaterManager.cpp
@@ -147,16 +147,19 @@ WaterManager::~WaterManager()
 	SAFE_ARRAY_DELETE(m_BlurredNormalMap);
 	SAFE_ARRAY_DELETE(m_WindStrength);
 	
-	glDeleteTextures(1, &m_depthTT);
-	glDeleteTextures(1, &m_FancyTextureNormal);
-	glDeleteTextures(1, &m_FancyTextureOther);
-	glDeleteTextures(1, &m_FancyTextureDepth);
-	glDeleteTextures(1, &m_ReflFboDepthTexture);
-	glDeleteTextures(1, &m_RefrFboDepthTexture);
-	
-	pglDeleteFramebuffersEXT(1, &m_FancyEffectsFBO);
-	pglDeleteFramebuffersEXT(1, &m_RefractionFbo);
-	pglDeleteFramebuffersEXT(1, &m_ReflectionFbo);
+	if (g_Renderer.GetCapabilities().m_PrettyWater)
+	{
+		glDeleteTextures(1, &m_depthTT);
+		glDeleteTextures(1, &m_FancyTextureNormal);
+		glDeleteTextures(1, &m_FancyTextureOther);
+		glDeleteTextures(1, &m_FancyTextureDepth);
+		glDeleteTextures(1, &m_ReflFboDepthTexture);
+		glDeleteTextures(1, &m_RefrFboDepthTexture);
+		
+		pglDeleteFramebuffersEXT(1, &m_FancyEffectsFBO);
+		pglDeleteFramebuffersEXT(1, &m_RefractionFbo);
+		pglDeleteFramebuffersEXT(1, &m_ReflectionFbo);
+	}
 }
 
 
@@ -181,163 +184,166 @@ int WaterManager::LoadWaterTextures()
 		m_WaterTexture[i] = texture;
 	}
 
-	// Load normalmaps (for fancy water)
-	for (size_t i = 0; i < ARRAY_SIZE(m_NormalMap); ++i)
+	if (g_Renderer.GetCapabilities().m_PrettyWater)
 	{
-		swprintf_s(pathname, ARRAY_SIZE(pathname), L"art/textures/animated/water/%ls/normal00%02d.png", m_WaterType.c_str(), (int)i+1);
-		CTextureProperties textureProps(pathname);
-		textureProps.SetWrap(GL_REPEAT);
-		textureProps.SetMaxAnisotropy(4);
+		// Load normalmaps (for fancy water)
+		for (size_t i = 0; i < ARRAY_SIZE(m_NormalMap); ++i)
+		{
+			swprintf_s(pathname, ARRAY_SIZE(pathname), L"art/textures/animated/water/%ls/normal00%02d.png", m_WaterType.c_str(), (int)i+1);
+			CTextureProperties textureProps(pathname);
+			textureProps.SetWrap(GL_REPEAT);
+			textureProps.SetMaxAnisotropy(4);
+			
+			CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
+			texture->Prefetch();
+			m_NormalMap[i] = texture;
+		}
 		
-		CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
-		texture->Prefetch();
-		m_NormalMap[i] = texture;
-	}
-	
-	// Load CoastalWaves
-	{
-		CTextureProperties textureProps(L"art/textures/terrain/types/water/coastalWave.png");
-		textureProps.SetWrap(GL_REPEAT);
-		CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
-		texture->Prefetch();
-		m_WaveTex = texture;
-	}
-	
-	// Load Foam
-	{
-		CTextureProperties textureProps(L"art/textures/terrain/types/water/foam.png");
-		textureProps.SetWrap(GL_REPEAT);
-		CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
-		texture->Prefetch();
-		m_FoamTex = texture;
-	}
-	
-	m_ReflectionTextureSize = g_Renderer.GetHeight() * 0.66;	// Higher settings give a better result
-	m_RefractionTextureSize = g_Renderer.GetHeight() * 0.33;	// Lower settings actually sorta look better since it blurs.
-	
-	if (round_down_to_pow2(m_ReflectionTextureSize)/m_ReflectionTextureSize < 0.65)
-		m_ReflectionTextureSize = round_up_to_pow2(m_ReflectionTextureSize);
-	else
-		m_ReflectionTextureSize = round_down_to_pow2(m_ReflectionTextureSize);
-	
-	if (round_down_to_pow2(m_RefractionTextureSize)/m_RefractionTextureSize < 0.7)
-		m_RefractionTextureSize = round_up_to_pow2(m_RefractionTextureSize);
-	else
-		m_RefractionTextureSize = round_down_to_pow2(m_RefractionTextureSize);
-	
-	// Create reflection texture
-	glGenTextures(1, &m_ReflectionTexture);
-	glBindTexture(GL_TEXTURE_2D, m_ReflectionTexture);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)m_ReflectionTextureSize, (GLsizei)m_ReflectionTextureSize, 0,  GL_RGBA, GL_UNSIGNED_BYTE, 0);
-	
-	// Create refraction texture
-	glGenTextures(1, &m_RefractionTexture);
-	glBindTexture(GL_TEXTURE_2D, m_RefractionTexture);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB8, (GLsizei)m_RefractionTextureSize, (GLsizei)m_RefractionTextureSize, 0,  GL_RGB, GL_UNSIGNED_BYTE, 0);
-
-	// Create depth textures
-	glGenTextures(1, &m_ReflFboDepthTexture);
-	glBindTexture(GL_TEXTURE_2D, m_ReflFboDepthTexture);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)m_ReflectionTextureSize, (GLsizei)m_ReflectionTextureSize, 0,  GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
-	
-	glGenTextures(1, &m_RefrFboDepthTexture);
-	glBindTexture(GL_TEXTURE_2D, m_RefrFboDepthTexture);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)m_RefractionTextureSize, (GLsizei)m_RefractionTextureSize, 0,  GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
-
-	// Create the Fancy Effects texture
-	glGenTextures(1, &m_FancyTextureNormal);
-	glBindTexture(GL_TEXTURE_2D, m_FancyTextureNormal);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0,  GL_RGBA, GL_UNSIGNED_SHORT, NULL);
-
-	glGenTextures(1, &m_FancyTextureOther);
-	glBindTexture(GL_TEXTURE_2D, m_FancyTextureOther);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0,  GL_RGBA, GL_UNSIGNED_SHORT, NULL);
-
-	glGenTextures(1, &m_FancyTextureDepth);
-	glBindTexture(GL_TEXTURE_2D, m_FancyTextureDepth);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-	glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0,  GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
-	
-	glBindTexture(GL_TEXTURE_2D, 0);
-	
-	// Create the water framebuffers
-	
-	GLint currentFbo;
-	glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &currentFbo);
+		// Load CoastalWaves
+		{
+			CTextureProperties textureProps(L"art/textures/terrain/types/water/coastalWave.png");
+			textureProps.SetWrap(GL_REPEAT);
+			CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
+			texture->Prefetch();
+			m_WaveTex = texture;
+		}
+		
+		// Load Foam
+		{
+			CTextureProperties textureProps(L"art/textures/terrain/types/water/foam.png");
+			textureProps.SetWrap(GL_REPEAT);
+			CTexturePtr texture = g_Renderer.GetTextureManager().CreateTexture(textureProps);
+			texture->Prefetch();
+			m_FoamTex = texture;
+		}
+		
+		m_ReflectionTextureSize = g_Renderer.GetHeight() * 0.66;	// Higher settings give a better result
+		m_RefractionTextureSize = g_Renderer.GetHeight() * 0.33;	// Lower settings actually sorta look better since it blurs.
+		
+		if (round_down_to_pow2(m_ReflectionTextureSize)/m_ReflectionTextureSize < 0.65)
+			m_ReflectionTextureSize = round_up_to_pow2(m_ReflectionTextureSize);
+		else
+			m_ReflectionTextureSize = round_down_to_pow2(m_ReflectionTextureSize);
+		
+		if (round_down_to_pow2(m_RefractionTextureSize)/m_RefractionTextureSize < 0.7)
+			m_RefractionTextureSize = round_up_to_pow2(m_RefractionTextureSize);
+		else
+			m_RefractionTextureSize = round_down_to_pow2(m_RefractionTextureSize);
+		
+		// Create reflection texture
+		glGenTextures(1, &m_ReflectionTexture);
+		glBindTexture(GL_TEXTURE_2D, m_ReflectionTexture);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)m_ReflectionTextureSize, (GLsizei)m_ReflectionTextureSize, 0,  GL_RGBA, GL_UNSIGNED_BYTE, 0);
+		
+		// Create refraction texture
+		glGenTextures(1, &m_RefractionTexture);
+		glBindTexture(GL_TEXTURE_2D, m_RefractionTexture);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB8, (GLsizei)m_RefractionTextureSize, (GLsizei)m_RefractionTextureSize, 0,  GL_RGB, GL_UNSIGNED_BYTE, 0);
+
+		// Create depth textures
+		glGenTextures(1, &m_ReflFboDepthTexture);
+		glBindTexture(GL_TEXTURE_2D, m_ReflFboDepthTexture);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)m_ReflectionTextureSize, (GLsizei)m_ReflectionTextureSize, 0,  GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
+		
+		glGenTextures(1, &m_RefrFboDepthTexture);
+		glBindTexture(GL_TEXTURE_2D, m_RefrFboDepthTexture);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)m_RefractionTextureSize, (GLsizei)m_RefractionTextureSize, 0,  GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
+
+		// Create the Fancy Effects texture
+		glGenTextures(1, &m_FancyTextureNormal);
+		glBindTexture(GL_TEXTURE_2D, m_FancyTextureNormal);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0,  GL_RGBA, GL_UNSIGNED_SHORT, NULL);
+
+		glGenTextures(1, &m_FancyTextureOther);
+		glBindTexture(GL_TEXTURE_2D, m_FancyTextureOther);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0,  GL_RGBA, GL_UNSIGNED_SHORT, NULL);
+
+		glGenTextures(1, &m_FancyTextureDepth);
+		glBindTexture(GL_TEXTURE_2D, m_FancyTextureDepth);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+		glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, (GLsizei)g_Renderer.GetWidth(), (GLsizei)g_Renderer.GetHeight(), 0,  GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL);
+		
+		glBindTexture(GL_TEXTURE_2D, 0);
+		
+		// Create the water framebuffers
+		
+		GLint currentFbo;
+		glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &currentFbo);
 
-	m_ReflectionFbo = 0;
-	pglGenFramebuffersEXT(1, &m_ReflectionFbo);
-	pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_ReflectionFbo);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_ReflectionTexture, 0);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_ReflFboDepthTexture, 0);
+		m_ReflectionFbo = 0;
+		pglGenFramebuffersEXT(1, &m_ReflectionFbo);
+		pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_ReflectionFbo);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_ReflectionTexture, 0);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_ReflFboDepthTexture, 0);
 
-	ogl_WarnIfError();
-	
-	GLenum status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-	if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
-	{
-		LOGWARNING(L"Reflection framebuffer object incomplete: 0x%04X", status);
-		g_Renderer.m_Options.m_WaterReflection = false;
-	}
+		ogl_WarnIfError();
+		
+		GLenum status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
+		if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
+		{
+			LOGWARNING(L"Reflection framebuffer object incomplete: 0x%04X", status);
+			g_Renderer.m_Options.m_WaterReflection = false;
+		}
 
-	m_RefractionFbo = 0;
-	pglGenFramebuffersEXT(1, &m_RefractionFbo);
-	pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_RefractionFbo);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_RefractionTexture, 0);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_RefrFboDepthTexture, 0);
+		m_RefractionFbo = 0;
+		pglGenFramebuffersEXT(1, &m_RefractionFbo);
+		pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_RefractionFbo);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_RefractionTexture, 0);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_RefrFboDepthTexture, 0);
 
-	ogl_WarnIfError();
-	
-	status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-	if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
-	{
-		LOGWARNING(L"Refraction framebuffer object incomplete: 0x%04X", status);
-		g_Renderer.m_Options.m_WaterRefraction = false;
-	}
-	
-	pglGenFramebuffersEXT(1, &m_FancyEffectsFBO);
-	pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_FancyEffectsFBO);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_FancyTextureNormal, 0);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, m_FancyTextureOther, 0);
-	pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_FancyTextureDepth, 0);
-	
-	ogl_WarnIfError();
-	
-	status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
-	if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
-	{
-		LOGWARNING(L"Fancy Effects framebuffer object incomplete: 0x%04X", status);
-		g_Renderer.m_Options.m_WaterRefraction = false;
+		ogl_WarnIfError();
+		
+		status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
+		if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
+		{
+			LOGWARNING(L"Refraction framebuffer object incomplete: 0x%04X", status);
+			g_Renderer.m_Options.m_WaterRefraction = false;
+		}
+		
+		pglGenFramebuffersEXT(1, &m_FancyEffectsFBO);
+		pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_FancyEffectsFBO);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_FancyTextureNormal, 0);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, m_FancyTextureOther, 0);
+		pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_FancyTextureDepth, 0);
+		
+		ogl_WarnIfError();
+		
+		status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
+		if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
+		{
+			LOGWARNING(L"Fancy Effects framebuffer object incomplete: 0x%04X", status);
+			g_Renderer.m_Options.m_WaterRefraction = false;
+		}
+		
+		pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, currentFbo);
 	}
-	
-	pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, currentFbo);
 
 	// Enable rendering, now that we've succeeded this far
 	m_RenderWater = true;
@@ -351,18 +357,18 @@ int WaterManager::LoadWaterTextures()
 void WaterManager::UnloadWaterTextures()
 {
 	for(size_t i = 0; i < ARRAY_SIZE(m_WaterTexture); i++)
-	{
 		m_WaterTexture[i].reset();
-	}
 
-	for(size_t i = 0; i < ARRAY_SIZE(m_NormalMap); i++)
+	if (g_Renderer.GetCapabilities().m_PrettyWater)
 	{
-		m_NormalMap[i].reset();
+		for(size_t i = 0; i < ARRAY_SIZE(m_NormalMap); i++)
+			m_NormalMap[i].reset();
+
+		glDeleteTextures(1, &m_ReflectionTexture);
+		glDeleteTextures(1, &m_RefractionTexture);
+		pglDeleteFramebuffersEXT(1, &m_RefractionFbo);
+		pglDeleteFramebuffersEXT(1, &m_ReflectionFbo);
 	}
-	glDeleteTextures(1, &m_ReflectionTexture);
-	glDeleteTextures(1, &m_RefractionTexture);
-	pglDeleteFramebuffersEXT(1, &m_RefractionFbo);
-	pglDeleteFramebuffersEXT(1, &m_ReflectionFbo);
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -1067,7 +1073,7 @@ void WaterManager::UpdateQuality()
 
 bool WaterManager::WillRenderFancyWater()
 {
-	if (!g_Renderer.GetCapabilities().m_FragmentShader)
+	if (!g_Renderer.GetCapabilities().m_PrettyWater)
 		return false;
 	if (!m_RenderWater || m_WaterUgly)
 		return false;
