diff --git a/minetest.conf.example b/minetest.conf.example
index edf43e889c4139f3614f231ea9c91383cca0f290..eb17ebc741a72c1aca585359c7721138ba45e8e8 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -7,7 +7,9 @@
 # By default, all the settings are commented and not functional.
 # Uncomment settings by removing the preceding #.
 
+#
 # Client side stuff
+#
 
 #wanted_fps = 30
 #fps_max = 60
@@ -19,17 +21,28 @@
 #address = kray.dy.fi
 #name = 
 
-#random_input = false
-#client_delete_unused_sectors_timeout = 1200
-
+# Whether to try to fog out the border of the visible area
 #enable_fog = true
+# Enable a bit lower water surface; disable for speed
 #new_style_water = true
+# Enable nice leaves; disable for speed
 #new_style_leaves = true
+# Whether to draw a frametime graph
 #frametime_graph = false
+# Enable combining mainly used textures to a bigger one
 #enable_texture_atlas = true
+# Path to texture directory
 #texture_path =
+# Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl
+#video_driver = opengl
 
+# 
+#random_input = false
+#client_delete_unused_sectors_timeout = 1200
+
+#
 # Server side stuff
+#
 
 #map-dir = /home/palle/custom_map
 
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 72f63d9fb64e55e84789053790c5191057b90be6..a456a4fceee1a7bc4a1471b927d6e6ae92cd8bb2 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -44,6 +44,7 @@ void set_default_settings()
 	g_settings.setDefault("frametime_graph", "false");
 	g_settings.setDefault("enable_texture_atlas", "true");
 	g_settings.setDefault("texture_path", "");
+	g_settings.setDefault("video_driver", "opengl");
 	
 	g_settings.setDefault("free_move", "false");
 	g_settings.setDefault("continuous_forward", "false");
diff --git a/src/main.cpp b/src/main.cpp
index 11ae9985c54a9e9e5a137a51c9f5abb000f54a9f..2754c324b930cf7fe36644d036e45f3684bc30fc 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1723,30 +1723,41 @@ int main(int argc, char *argv[])
 	
 	std::string playername = g_settings.get("name");
 
-	/*
-		Resolution selection
-	*/
+	// Resolution selection
 	
 	bool fullscreen = false;
 	u16 screenW = g_settings.getU16("screenW");
 	u16 screenH = g_settings.getU16("screenH");
 
-	//
-
-	MyEventReceiver receiver;
+	// Determine driver
 
 	video::E_DRIVER_TYPE driverType;
-
-#ifdef _WIN32
-	//driverType = video::EDT_DIRECT3D9;
-	driverType = video::EDT_OPENGL;
-#else
-	driverType = video::EDT_OPENGL;
-	//driverType = video::EDT_BURNINGSVIDEO; // Best software renderer
-#endif
+	
+	std::string driverstring = g_settings.get("video_driver");
+
+	if(driverstring == "null")
+		driverType = video::EDT_NULL;
+	else if(driverstring == "software")
+		driverType = video::EDT_SOFTWARE;
+	else if(driverstring == "burningsvideo")
+		driverType = video::EDT_BURNINGSVIDEO;
+	else if(driverstring == "direct3d8")
+		driverType = video::EDT_DIRECT3D8;
+	else if(driverstring == "direct3d9")
+		driverType = video::EDT_DIRECT3D9;
+	else if(driverstring == "opengl")
+		driverType = video::EDT_OPENGL;
+	else
+	{
+		dstream<<"WARNING: Invalid video_driver specified; defaulting "
+				"to opengl"<<std::endl;
+		driverType = video::EDT_OPENGL;
+	}
 
 	// create device and exit if creation failed
 
+	MyEventReceiver receiver;
+
 	IrrlichtDevice *device;
 	device = createDevice(driverType,
 			core::dimension2d<u32>(screenW, screenH),