diff --git a/src/mapgen_math.cpp b/src/mapgen_math.cpp
index 775d0523de32647f817d216a9c9bb925482b4171..a8a093a4a3462837649a9a429e651831e807df6a 100644
--- a/src/mapgen_math.cpp
+++ b/src/mapgen_math.cpp
@@ -145,7 +145,7 @@ double sphere(double x, double y, double z, double d, int ITR = 1) {
 }
 
 
-//////////////////////// Mapgen Singlenode parameter read/write
+//////////////////////// Mapgen Math parameter read/write
 
 bool MapgenMathParams::readParams(Settings *settings) {
 	//params = settings->getJson("mg_math");
@@ -171,6 +171,8 @@ void MapgenMathParams::writeParams(Settings *settings) {
 
 MapgenMath::MapgenMath(int mapgenid, MapgenMathParams *params_, EmergeManager *emerge) : MapgenV7(mapgenid, params_, emerge) {
 	mg_params = params_;
+	this->lighting = 0;
+	this->ridges   = 0;
 
 	Json::Value & params = mg_params->params;
 	invert = params["invert"].empty() ? 1 : params["invert"].asBool(); //params["invert"].empty()?1:params["invert"].asBool();
@@ -238,7 +240,7 @@ MapgenMath::~MapgenMath() {
 
 void MapgenMath::generateTerrain() {
 
-	MapNode n_air(CONTENT_AIR), n_water_source(c_water_source, LIGHT_SUN);
+	MapNode n_air(CONTENT_AIR, LIGHT_SUN), n_water_source(c_water_source, LIGHT_SUN);
 	MapNode n_stone(c_stone, LIGHT_SUN);
 	u32 index = 0;
 	v3s16 em = vm->m_area.getExtent();
@@ -263,6 +265,7 @@ void MapgenMath::generateTerrain() {
 					if (vm->m_data[i].getContent() == CONTENT_IGNORE)
 						vm->m_data[i] = (y > water_level + biome->filler_height) ?
 						                MapNode(biome->c_filler) : n_stone;
+//						vm->m_data[i] = n_stone;
 				} else if (y <= water_level) {
 					vm->m_data[i] = n_water_source;
 				} else {
diff --git a/src/mapgen_math.h b/src/mapgen_math.h
index 070ebab616d4a1c5073b146b72a05a6c1783e666..3d3929c51a5949c7ec29f0c8ee306ee43e2d4f26 100644
--- a/src/mapgen_math.h
+++ b/src/mapgen_math.h
@@ -42,8 +42,6 @@ class MapgenMath : public MapgenV7 {
 		MapgenMath(int mapgenid, MapgenMathParams *mg_params, EmergeManager *emerge);
 		~MapgenMath();
 
-
-		//void makeChunk(BlockMakeData *data);
 		void generateTerrain();
 		int getGroundLevelAtPoint(v2s16 p);
 
diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp
index 301922be58d92ac6ed5c45216abc6fa91049f47f..870e7343e4f894781388b4cae3b2b70015a408dc 100644
--- a/src/mapgen_v7.cpp
+++ b/src/mapgen_v7.cpp
@@ -76,7 +76,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenV7Params *params, EmergeManager *emerge)
 
 	this->seed     = (int)params->seed;
 	this->water_level = params->water_level;
-	this->flags   = params->flags;
+	this->flags    = params->flags;
+	this->lighting = 1;
+	this->ridges   = 1;
+
 	this->csize   = v3s16(1, 1, 1) * params->chunksize * MAP_BLOCKSIZE;
 	this->ystride = csize.X; //////fix this
 
@@ -183,7 +186,8 @@ void MapgenV7::makeChunk(BlockMakeData *data) {
 	c_lava_source     = ndef->getId("mapgen_lava_source");
 	
 	generateTerrain();
-	carveRidges();
+	if (this->ridges)
+		carveRidges();
 
 	if (flags & MG_CAVES)
 		generateCaves(stone_surface_max_y);
@@ -211,7 +215,8 @@ void MapgenV7::makeChunk(BlockMakeData *data) {
 	
 	updateLiquid(&data->transforming_liquid, full_node_min, full_node_max);
 	
-	calcLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
+	if (this->lighting)
+		calcLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
 				 node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE);
 	//setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE,
 	//			node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF);
diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h
index 159a808ebcc081f38d1056ac3843aaaa9a13be33..3bba9938c3f0e4a7d7a1174b0268821335c3a534 100644
--- a/src/mapgen_v7.h
+++ b/src/mapgen_v7.h
@@ -60,6 +60,8 @@ class MapgenV7 : public Mapgen {
 	int ystride;
 	v3s16 csize;
 	u32 flags;
+	bool lighting;
+	bool ridges;
 
 	u32 blockseed;
 	v3s16 node_min;
diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp
index 0d1cfe476cf2567cbe8045f8d7a6d6656ca40832..bbda073624caf938a8ad1a025513f7fa1d3bb83c 100644
--- a/src/pathfinder.cpp
+++ b/src/pathfinder.cpp
@@ -880,7 +880,7 @@ bool pathfinder::update_cost_heuristic(	v3s16 ipos,
 /******************************************************************************/
 void pathfinder::build_path(std::vector<v3s16>& path,v3s16 pos, int level) {
 	level ++;
-	if (level > 1000) {
+	if (level > 700) {
 		ERROR_TARGET
 		<< LVL "Pathfinder: path is too long aborting" << std::endl;
 		return;
diff --git a/src/server.cpp b/src/server.cpp
index fea4349f11efad5d99bca1bfd7d837a453e7d1c1..01692210354d2b0be254b9099852d1c9e7dc1034 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -2154,7 +2154,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
 				os<<player->getName()<<" ";
 			}
 
-			actionstream<<player->getName()<<" joins game. List of players: "
+			actionstream<<player->getName()<<" ["<<addr_s<<"] "<<" joins game. List of players: "
 					<<os.str()<<std::endl;
 		}
 
diff --git a/src/socket.cpp b/src/socket.cpp
index c1517ccb922b8d5ce3a94bc008f9e908ea934a33..a889223b474873e1a5f3947ca06efc1ee455b7ee 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -185,32 +185,11 @@ void Address::Resolve(const char *name)
 // IP address -> textual representation
 std::string Address::serializeString() const
 {
-	if(m_addr_family == AF_INET)
-	{
-		u8 a, b, c, d, addr;
-		addr = ntohl(m_address.ipv4.sin_addr.s_addr);
-		a = (addr & 0xFF000000) >> 24;
-		b = (addr & 0x00FF0000) >> 16;
-		c = (addr & 0x0000FF00) >> 8;
-		d = (addr & 0x000000FF);
-		return itos(a) + "." + itos(b) + "." + itos(c) + "." + itos(d);
+	char str[INET6_ADDRSTRLEN];
+	if (inet_ntop(m_addr_family, (m_addr_family == AF_INET) ? (void*)&(m_address.ipv4.sin_addr) : (void*)&(m_address.ipv6.sin6_addr), str, INET6_ADDRSTRLEN) == NULL) {
+	    return std::string("");
 	}
-	else if(m_addr_family == AF_INET6)
-	{
-		std::ostringstream os;
-		for(int i = 0; i < 16; i += 2)
-		{
-			u16 section =
-				(m_address.ipv6.sin6_addr.s6_addr[i] << 8) |
-				(m_address.ipv6.sin6_addr.s6_addr[i + 1]);
-			os << std::hex << section;
-			if(i < 14)
-				os << ":";
-		}
-		return os.str();
-	}
-	else
-		return std::string("");
+	return std::string(str);
 }
 
 struct sockaddr_in Address::getAddress() const