diff --git a/src/clientmap.cpp b/src/clientmap.cpp
index b9516fcbea85b2b60c80dbe4c5ec8e5d106a93b3..1c420b5f9adbe348f7ae2054371a83f526659ba0 100644
--- a/src/clientmap.cpp
+++ b/src/clientmap.cpp
@@ -391,12 +391,12 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver)
 struct MeshBufList
 {
 	video::SMaterial m;
-	std::list<scene::IMeshBuffer*> bufs;
+	std::vector<scene::IMeshBuffer*> bufs;
 };
 
 struct MeshBufListList
 {
-	std::list<MeshBufList> lists;
+	std::vector<MeshBufList> lists;
 
 	void clear()
 	{
@@ -405,7 +405,7 @@ struct MeshBufListList
 
 	void add(scene::IMeshBuffer *buf)
 	{
-		for(std::list<MeshBufList>::iterator i = lists.begin();
+		for(std::vector<MeshBufList>::iterator i = lists.begin();
 				i != lists.end(); ++i){
 			MeshBufList &l = *i;
 			video::SMaterial &m = buf->getMaterial();
@@ -595,25 +595,20 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
 		}
 	}
 
-	std::list<MeshBufList> &lists = drawbufs.lists;
+	std::vector<MeshBufList> &lists = drawbufs.lists;
 
 	int timecheck_counter = 0;
-	for(std::list<MeshBufList>::iterator i = lists.begin();
-			i != lists.end(); ++i)
-	{
-		{
-			timecheck_counter++;
-			if(timecheck_counter > 50)
-			{
-				timecheck_counter = 0;
-				int time2 = time(0);
-				if(time2 > time1 + 4)
-				{
-					infostream<<"ClientMap::renderMap(): "
-						"Rendering takes ages, returning."
-						<<std::endl;
-					return;
-				}
+	for(std::vector<MeshBufList>::iterator i = lists.begin();
+			i != lists.end(); ++i) {
+		timecheck_counter++;
+		if(timecheck_counter > 50) {
+			timecheck_counter = 0;
+			int time2 = time(0);
+			if(time2 > time1 + 4) {
+				infostream << "ClientMap::renderMap(): "
+					"Rendering takes ages, returning."
+					<< std::endl;
+				return;
 			}
 		}
 
@@ -621,60 +616,14 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
 
 		driver->setMaterial(list.m);
 
-		for(std::list<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
-				j != list.bufs.end(); ++j)
-		{
+		for(std::vector<scene::IMeshBuffer*>::iterator j = list.bufs.begin();
+				j != list.bufs.end(); ++j) {
 			scene::IMeshBuffer *buf = *j;
 			driver->drawMeshBuffer(buf);
 			vertex_count += buf->getVertexCount();
 			meshbuffer_count++;
 		}
-#if 0
-		/*
-			Draw the faces of the block
-		*/
-		{
-			//JMutexAutoLock lock(block->mesh_mutex);
-
-			MapBlockMesh *mapBlockMesh = block->mesh;
-			assert(mapBlockMesh);
-
-			scene::SMesh *mesh = mapBlockMesh->getMesh();
-			assert(mesh);
 
-			u32 c = mesh->getMeshBufferCount();
-			bool stuff_actually_drawn = false;
-			for(u32 i=0; i<c; i++)
-			{
-				scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
-				const video::SMaterial& material = buf->getMaterial();
-				video::IMaterialRenderer* rnd =
-						driver->getMaterialRenderer(material.MaterialType);
-				bool transparent = (rnd && rnd->isTransparent());
-				// Render transparent on transparent pass and likewise.
-				if(transparent == is_transparent_pass)
-				{
-					if(buf->getVertexCount() == 0)
-						errorstream<<"Block ["<<analyze_block(block)
-								<<"] contains an empty meshbuf"<<std::endl;
-					/*
-						This *shouldn't* hurt too much because Irrlicht
-						doesn't change opengl textures if the old
-						material has the same texture.
-					*/
-					driver->setMaterial(buf->getMaterial());
-					driver->drawMeshBuffer(buf);
-					vertex_count += buf->getVertexCount();
-					meshbuffer_count++;
-					stuff_actually_drawn = true;
-				}
-			}
-			if(stuff_actually_drawn)
-				blocks_had_pass_meshbuf++;
-			else
-				blocks_without_stuff++;
-		}
-#endif
 	}
 	} // ScopeProfiler
 
diff --git a/src/environment.cpp b/src/environment.cpp
index b1372431f958da32769a68a0de7e1e109199c6d3..60a26e65fe10e2a08fa4eb7f7173a1df014eaea5 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -2383,13 +2383,16 @@ void ClientEnvironment::step(float dtime)
 	g_profiler->avg("CEnv: num of simple objects", m_simple_objects.size());
 	for(std::vector<ClientSimpleObject*>::iterator
 			i = m_simple_objects.begin(); i != m_simple_objects.end();) {
-		ClientSimpleObject *simple = *i;
 		std::vector<ClientSimpleObject*>::iterator cur = i;
-		++i;
+		ClientSimpleObject *simple = *cur;
+
 		simple->step(dtime);
-		if(simple->m_to_be_removed){
+		if(simple->m_to_be_removed) {
 			delete simple;
-			m_simple_objects.erase(cur);
+			i = m_simple_objects.erase(cur);
+		}
+		else {
+			++i;
 		}
 	}
 }
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index ba1b16d6a6438665f20fbbd357d0a4655f6ef075..071c60138876e3fe11f39cb93c663fb0a8dba59c 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -417,9 +417,8 @@ void GenerateNotifier::getEvents(
 	std::map<std::string, std::vector<v3s16> > &event_map,
 	bool peek_events)
 {
-	std::list<GenNotifyEvent>::iterator it;
-
-	for (it = m_notify_events.begin(); it != m_notify_events.end(); ++it) {
+	for (std::vector<GenNotifyEvent>::iterator it = m_notify_events.begin();
+			it != m_notify_events.end(); ++it) {
 		GenNotifyEvent &gn = *it;
 		std::string name = (gn.type == GENNOTIFY_DECORATION) ?
 			"decoration#"+ itos(gn.id) :
diff --git a/src/mapgen.h b/src/mapgen.h
index 5bbdd724dd139fbb6c4934575c34adcce19970d9..f2e63e53300752ea7fa4542fc3ea140dc5fe5142 100644
--- a/src/mapgen.h
+++ b/src/mapgen.h
@@ -91,7 +91,7 @@ class GenerateNotifier {
 private:
 	u32 m_notify_on;
 	std::set<u32> *m_notify_on_deco_ids;
-	std::list<GenNotifyEvent> m_notify_events;
+	std::vector<GenNotifyEvent> m_notify_events;
 };
 
 struct MapgenSpecificParams {
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index ac49b4f3cfad295342b9a31e48e52c6c07a70434..6cf456e4de241dafee70dea87144f0344b30c2b0 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -443,7 +443,7 @@ class CNodeDefManager: public IWritableNodeDefManager {
 	content_t m_next_id;
 
 	// List of node strings and node resolver callbacks to perform
-	std::list<NodeResolveInfo *> m_pending_node_lookups;
+	std::vector<NodeResolveInfo *> m_pending_node_lookups;
 
 	// True when all nodes have been registered
 	bool m_node_registration_complete;
@@ -479,7 +479,7 @@ void CNodeDefManager::clear()
 	m_next_id = 0;
 
 	m_node_registration_complete = false;
-	for (std::list<NodeResolveInfo *>::iterator
+	for (std::vector<NodeResolveInfo *>::iterator
 			it = m_pending_node_lookups.begin();
 			it != m_pending_node_lookups.end();
 			++it)
@@ -1309,7 +1309,7 @@ void CNodeDefManager::pendNodeResolve(NodeResolveInfo *nri)
 
 void CNodeDefManager::cancelNodeResolve(NodeResolver *resolver)
 {
-	for (std::list<NodeResolveInfo *>::iterator
+	for (std::vector<NodeResolveInfo *>::iterator
 			it = m_pending_node_lookups.begin();
 			it != m_pending_node_lookups.end();
 			++it) {
@@ -1326,7 +1326,7 @@ void CNodeDefManager::runNodeResolverCallbacks()
 {
 	while (!m_pending_node_lookups.empty()) {
 		NodeResolveInfo *nri = m_pending_node_lookups.front();
-		m_pending_node_lookups.pop_front();
+		m_pending_node_lookups.erase(m_pending_node_lookups.begin());
 		nri->resolver->resolveNodeNames(nri);
 		nri->resolver->m_lookup_done = true;
 		delete nri;
@@ -1345,7 +1345,7 @@ bool CNodeDefManager::getIdFromResolveInfo(NodeResolveInfo *nri,
 
 	content_t c;
 	std::string name = nri->nodenames.front();
-	nri->nodenames.pop_front();
+	nri->nodenames.erase(nri->nodenames.begin());
 
 	bool success = getId(name, c);
 	if (!success && node_alt != "") {
@@ -1385,7 +1385,7 @@ bool CNodeDefManager::getIdsFromResolveInfo(NodeResolveInfo *nri,
 
 		content_t c;
 		std::string name = nri->nodenames.front();
-		nri->nodenames.pop_front();
+		nri->nodenames.erase(nri->nodenames.begin());
 
 		if (name.substr(0,6) != "group:") {
 			if (getId(name, c)) {
diff --git a/src/nodedef.h b/src/nodedef.h
index 52ef29e50ec15e6f9e78c0f43c2a3d3277095ade..a1c2e1b53df9227e0aac888e7140ff337c585068 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -309,7 +309,7 @@ struct NodeResolveInfo {
 		resolver = nr;
 	}
 
-	std::list<std::string> nodenames;
+	std::vector<std::string> nodenames;
 	std::list<NodeListInfo> nodelistinfo;
 	NodeResolver *resolver;
 };
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index f14b0dfcba0e60c70dfc7107606dbfee8b06d5f1..54ec6901071c098f048323ef9762c37c88da3c2e 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -459,7 +459,7 @@ int ModApiMapgen::l_register_biome(lua_State *L)
 	}
 
 	NodeResolveInfo *nri = new NodeResolveInfo(b);
-	std::list<std::string> &nnames = nri->nodenames;
+	std::vector<std::string> &nnames = nri->nodenames;
 	nnames.push_back(getstringfield_default(L, index, "node_top",          ""));
 	nnames.push_back(getstringfield_default(L, index, "node_filler",       ""));
 	nnames.push_back(getstringfield_default(L, index, "node_stone",        ""));