diff --git a/src/emerge.cpp b/src/emerge.cpp
index 2c94d46c14d9d074668447ec8928fc4bb67a3906..9edc42b7bf40afff857e4c6bbfbc97b8ff70f521 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -123,9 +123,13 @@ void EmergeManager::initMapgens(MapgenParams *mgparams) {
 		return;
 	
 	biomedef->resolveNodeNames(ndef);
+	for (size_t i = 0; i != ores.size(); i++)
+		ores[i]->resolveNodeNames(ndef);
+	for (size_t i = 0; i != decorations.size(); i++)
+		decorations[i]->resolveNodeNames(ndef);
 	
 	this->params = mgparams;
-	for (unsigned int i = 0; i != emergethread.size(); i++) {
+	for (size_t i = 0; i != emergethread.size(); i++) {
 		mg = createMapgen(params->mg_name, 0, params);
 		if (!mg) {
 			infostream << "EmergeManager: falling back to mapgen v6" << std::endl;
diff --git a/src/mapgen.cpp b/src/mapgen.cpp
index 17afcf350f4f9597ca57e507fa1d23c5a15e88c3..d2bde00637b4de1b6715d2c9f14de396ec78eebb 100644
--- a/src/mapgen.cpp
+++ b/src/mapgen.cpp
@@ -109,8 +109,6 @@ void Ore::placeOre(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) {
 	if (!in_range)
 		return;
 
-	resolveNodeNames(mg->ndef);
-
 	int ymin, ymax;
 	if (in_range & ORE_RANGE_MIRROR) {
 		ymin = MYMAX(nmin.Y, -height_max);
@@ -226,8 +224,6 @@ void Decoration::resolveNodeNames(INodeDefManager *ndef) {
 
 
 void Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) {
-	resolveNodeNames(mg->ndef);
-
 	PseudoRandom ps(blockseed + 53);
 	int carea_size = nmax.X - nmin.X + 1;