diff --git a/MeshLib/ConvertRasterToMesh.cpp b/MeshLib/ConvertRasterToMesh.cpp
index 9c9d24306747f7b34df14f9c02fe37249151d55b..e6fc470c8ee7dbaf4f612539b4826605e9468022 100644
--- a/MeshLib/ConvertRasterToMesh.cpp
+++ b/MeshLib/ConvertRasterToMesh.cpp
@@ -34,46 +34,43 @@ MeshLib::Mesh* ConvertRasterToMesh::execute() const
 	const size_t size(height*width);
 	double* pix_vals(new double[size]);
 	bool* vis_nodes(new bool[size]);
-	int* node_idx_map(new int[size]);
 
 	// determine a valid value for substitution of no data values
-	double substitution (getExistingValue(_raster.begin(), _raster.end()));
+	double substitution(getExistingValue(_raster.begin(), _raster.end()));
 
-	for (size_t j = 0; j < _raster.getNRows(); j++) {
+	// fill first row with non visual nodes
+	for (size_t j = 0; j < _raster.getNCols(); j++) {
 		pix_vals[j] = 0;
 		vis_nodes[j] = false;
-		node_idx_map[j] = -1;
 	}
 
 	GeoLib::Raster::const_iterator raster_it(_raster.begin());
-	for (size_t i = 0; i < _raster.getNCols(); i++) {
-		for (size_t j = 0; j < _raster.getNRows(); ++j) {
-			const size_t index = (i + 1) * height + j;
+	for (size_t i = 0; i < _raster.getNRows(); ++i) {
+		for (size_t j = 0; j < _raster.getNCols(); ++j) {
+			const size_t index = (i+1) * width + j;
 			if (*raster_it == _raster.getNoDataValue()) {
-				vis_nodes[index] = false;
 				pix_vals[index] = substitution;
+				vis_nodes[index] = false;
 			} else {
-				pix_vals[index] = *raster_it; // img[img_idx];
+				pix_vals[index] = *raster_it;
 				vis_nodes[index] = true;
 			}
 			++raster_it;
-			node_idx_map[index] = -1;
 		}
-		pix_vals[(i + 2) * height - 1] = 0;
-		vis_nodes[(i + 2) * height - 1] = false;
-		node_idx_map[(i + 2) * height - 1] = -1;
+		// fill last column with non-visual nodes
+		pix_vals[(i + 2) * width - 1] = 0;
+		vis_nodes[(i + 2) * width - 1] = false;
 	}
 
-	MeshLib::Mesh* mesh = constructMesh(pix_vals, node_idx_map, vis_nodes);
+	MeshLib::Mesh* mesh = constructMesh(pix_vals, vis_nodes);
 
 	delete [] pix_vals;
 	delete [] vis_nodes;
-	delete [] node_idx_map;
 
 	return mesh;
 }
 
-MeshLib::Mesh* ConvertRasterToMesh::constructMesh(const double* pix_vals, int* node_idx_map, const bool* vis_nodes) const
+MeshLib::Mesh* ConvertRasterToMesh::constructMesh(const double* pix_vals, const bool* vis_nodes) const
 {
 	const size_t height = _raster.getNRows()+1;
 	const size_t width = _raster.getNCols()+1;
@@ -82,24 +79,28 @@ MeshLib::Mesh* ConvertRasterToMesh::constructMesh(const double* pix_vals, int* n
 	const double x_offset(_raster.getOrigin()[0]); // - distance / 2.0);
 	const double y_offset(_raster.getOrigin()[1]); // - distance / 2.0);
 
+	const size_t size(height*width);
+	int* node_idx_map(new int[size]);
+	for (std::size_t k(0); k<size; ++k) node_idx_map[k] = -1;
+
 	std::vector<MeshLib::Node*> nodes;
 	std::vector<MeshLib::Element*> elements;
 
-	for (size_t i = 0; i < width; i++) {
-		for (size_t j = 0; j < height; j++) {
-			const size_t index = i * height + j;
-
-			bool set_node(false);
-			if (j == 0 && i == width)
-				set_node = vis_nodes[index];
-			else if (j == 0)
-				set_node = (vis_nodes[index] || vis_nodes[index + height]);
-			else if (i == width)
-				set_node = (vis_nodes[index] || vis_nodes[index - 1]);
-			else set_node = (vis_nodes[index] || vis_nodes[index - 1] || vis_nodes[index + height]
-							|| vis_nodes[index + height - 1]);
-
-			if (set_node) {
+	for (size_t i = 0; i < height; i++) {
+		for (size_t j = 0; j < width; j++) {
+			const size_t index = i * width + j;
+
+//			bool set_node(true);
+//			bool set_node(false);
+//			if (j == 0 && i == height)
+//				set_node = vis_nodes[index];
+//			else if (j == 0)
+//				set_node = (vis_nodes[index] || vis_nodes[index + height]);
+//			else if (i == width)
+//				set_node = (vis_nodes[index] || vis_nodes[index - 1]);
+//			else set_node = (vis_nodes[index] || vis_nodes[index - 1] || vis_nodes[index + height]
+//							|| vis_nodes[index + height - 1]);
+//			if (set_node) {
 				double zValue = (_intensity_type == UseIntensityAs::ELEVATION) ? pix_vals[index]
 								: _raster.getOrigin()[2];
 				MeshLib::Node* node(new MeshLib::Node(x_offset + (distance * j), y_offset
@@ -107,29 +108,30 @@ MeshLib::Mesh* ConvertRasterToMesh::constructMesh(const double* pix_vals, int* n
 				nodes.push_back(node);
 				node_idx_map[index] = node_idx_count;
 				node_idx_count++;
-			}
+//			}
 		}
 	}
 
 	// set mesh elements
-	for (size_t i = 0; i < _raster.getNCols(); i++) {
-		for (size_t j = 0; j < _raster.getNRows(); j++) {
-			const int index = i * height + j;
+	for (size_t i = 0; i < _raster.getNRows(); i++) {
+		for (size_t j = 0; j < _raster.getNCols(); j++) {
+			const int index = i * width + j;
 			if ((node_idx_map[index] != -1) && (node_idx_map[index + 1] != -1)
-							&& (node_idx_map[index + height] != -1) && (node_idx_map[index
-							+ height + 1] != -1) && (vis_nodes[index + height])) {
+					&& (node_idx_map[index + width] != -1)
+					&& (node_idx_map[index + width + 1] != -1)
+					&& (vis_nodes[index + width])) {
 				const int mat = (_intensity_type != UseIntensityAs::MATERIAL) ? 0
-								: static_cast<int> (pix_vals[index + height]);
+								: static_cast<int> (pix_vals[index + width]);
 				if (_elem_type == MshElemType::TRIANGLE) {
 					MeshLib::Node** tri1_nodes = new MeshLib::Node*[3];
 					tri1_nodes[0] = nodes[node_idx_map[index]];
 					tri1_nodes[1] = nodes[node_idx_map[index + 1]];
-					tri1_nodes[2] = nodes[node_idx_map[index + height]];
+					tri1_nodes[2] = nodes[node_idx_map[index + width]];
 
 					MeshLib::Node** tri2_nodes = new MeshLib::Node*[3];
 					tri2_nodes[0] = nodes[node_idx_map[index + 1]];
-					tri2_nodes[1] = nodes[node_idx_map[index + height + 1]];
-					tri2_nodes[2] = nodes[node_idx_map[index + height]];
+					tri2_nodes[1] = nodes[node_idx_map[index + width + 1]];
+					tri2_nodes[2] = nodes[node_idx_map[index + width]];
 
 					elements.push_back(new MeshLib::Tri(tri1_nodes, mat)); // upper left triangle
 					elements.push_back(new MeshLib::Tri(tri2_nodes, mat)); // lower right triangle
@@ -138,13 +140,14 @@ MeshLib::Mesh* ConvertRasterToMesh::constructMesh(const double* pix_vals, int* n
 					MeshLib::Node** quad_nodes = new MeshLib::Node*[4];
 					quad_nodes[0] = nodes[node_idx_map[index]];
 					quad_nodes[1] = nodes[node_idx_map[index + 1]];
-					quad_nodes[2] = nodes[node_idx_map[index + height + 1]];
-					quad_nodes[3] = nodes[node_idx_map[index + height]];
+					quad_nodes[2] = nodes[node_idx_map[index + width + 1]];
+					quad_nodes[3] = nodes[node_idx_map[index + width]];
 					elements.push_back(new MeshLib::Quad(quad_nodes, mat));
 				}
 			}
 		}
 	}
+	delete [] node_idx_map;
 
 	return new MeshLib::Mesh("RasterDataMesh", nodes, elements); // the name is only a temp-name, the name given in the dialog is set later
 }
diff --git a/MeshLib/ConvertRasterToMesh.h b/MeshLib/ConvertRasterToMesh.h
index 9289fb5e4bb892bb63123da3833598bceb633760..c01964111914255b1fedba11d81aa849b8e2d994 100644
--- a/MeshLib/ConvertRasterToMesh.h
+++ b/MeshLib/ConvertRasterToMesh.h
@@ -24,7 +24,9 @@ namespace MeshLib {
 // forward declaration
 class Mesh;
 
-/// Selection of possible interpretations for intensities
+/**
+ * Struct gives a selection of possible interpretations for intensities
+ */
 struct UseIntensityAs
 {
 	enum type {
@@ -35,7 +37,7 @@ struct UseIntensityAs
 };
 
 /**
- * Class to convert raster data into meshes.
+ * Class to convert raster data into meshes. Based on Karsten Rinks algorithm.
  */
 class ConvertRasterToMesh {
 public:
@@ -45,7 +47,7 @@ public:
 	MeshLib::Mesh* execute() const;
 private:
 	double getExistingValue(GeoLib::Raster::const_iterator beg, GeoLib::Raster::const_iterator last) const;
-	MeshLib::Mesh* constructMesh(const double* pix_vals, int* node_idx_map, const bool* vis_nodes) const;
+	MeshLib::Mesh* constructMesh(const double* pix_vals, const bool* vis_nodes) const;
 	GeoLib::Raster const& _raster;
 	MshElemType::type _elem_type;
 	UseIntensityAs::type _intensity_type;
diff --git a/Utils/SimpleMeshCreation/createMeshElemPropertiesFromASCRaster.cpp b/Utils/SimpleMeshCreation/createMeshElemPropertiesFromASCRaster.cpp
index aa504c197e5b005434ad8e21b2f9515af354c892..a3bb19ba43bb2a2ad7f66b944c61491aff479f3b 100644
--- a/Utils/SimpleMeshCreation/createMeshElemPropertiesFromASCRaster.cpp
+++ b/Utils/SimpleMeshCreation/createMeshElemPropertiesFromASCRaster.cpp
@@ -106,23 +106,9 @@ int main (int argc, char* argv[])
 		std::cout << "variance of source: " << src_varianz << std::endl;
 	}
 
-//	double spacing(raster->getRasterPixelDistance());
-//	double *raster_with_alpha(new double[raster->getNRows() * raster->getNCols()]);
-//	raster_it = raster->begin();
-//	for (std::size_t k(0); k<raster->getNRows() * raster->getNCols(); k++) {
-//		raster_with_alpha[k] = *raster_it;
-//		++raster_it;
-//	}
-
-//	double origin[3] = {raster->getOrigin()[0] + spacing/2.0, raster->getOrigin()[1] + spacing/2.0, raster->getOrigin()[2]};
-//	MeshLib::Mesh* src_mesh (VtkMeshConverter::convertImgToMesh(raster_with_alpha, origin, raster->getNCols(), raster->getNRows(),
-//					spacing, MshElemType::QUAD, UseIntensityAs::MATERIAL));
-
 	MeshLib::Mesh* src_mesh(MeshLib::ConvertRasterToMesh(*raster, MshElemType::QUAD,
 					MeshLib::UseIntensityAs::MATERIAL).execute());
 
-//	delete [] raster_with_alpha;
-
 	std::vector<size_t> src_perm(n_cols*n_rows);
 	for (size_t k(0); k<n_cols*n_rows; k++) src_perm[k] = k;
 	BaseLib::Quicksort<double>(src_properties, 0, n_cols*n_rows, src_perm);