diff --git a/src/libnptm/Configuration.cpp b/src/libnptm/Configuration.cpp
index 2e9a81fca5c369e2c5793c1cb30a99e30f13cfa9..7981b35d116badf9a9ca3690c0bb92363e0ddfd9 100644
--- a/src/libnptm/Configuration.cpp
+++ b/src/libnptm/Configuration.cpp
@@ -197,6 +197,7 @@ ScattererConfiguration::~ScattererConfiguration() {
 			delete[] dc0_matrix[i][j];
 		}
 	}
+	delete[] dc0_matrix;
 	for (int i = 0; i < number_of_spheres; i++) {
 		delete[] rcf[i];
 	}
@@ -222,7 +223,7 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
 		input.open(file_name.c_str(), ios::in | ios::binary);
 		if (input.is_open()) {
 			input.read(reinterpret_cast<char *>(&nsph), sizeof(int));
-			iog = new int[nsph];
+			iog = new int[nsph]();
 			for (int i = 0; i < nsph; i++) {
 				input.read(reinterpret_cast<char *>(&(iog[i])), sizeof(int));
 			}
@@ -232,15 +233,15 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
 			input.read(reinterpret_cast<char *>(&_idfc), sizeof(int));
 			input.read(reinterpret_cast<char *>(&nxi), sizeof(int));
 			try {
-				xi_vec = new double[nxi];
+				xi_vec = new double[nxi]();
 			} catch (bad_alloc &ex) {
 				throw UnrecognizedConfigurationException("Wrong parameter set: invalid number of scales " + nxi);
 			}
 			for (int i = 0; i < nxi; i++) {
 				input.read(reinterpret_cast<char *>(&(xi_vec[i])), sizeof(double));
 			}
-			nshl_vector = new int[nsph];
-			ros_vector = new double[nsph];
+			nshl_vector = new int[nsph]();
+			ros_vector = new double[nsph]();
 			rcf_vector = new double*[nsph];
 			for (int i115 = 1; i115 <= nsph; i115++) {
 				if (iog[i115 - 1] < i115) continue;
@@ -249,7 +250,7 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
 				int nsh = nshl_vector[i115 - 1];
 				if (max_ici < (nsh + 1) / 2) max_ici = (nsh + 1) / 2;
 				try {
-					rcf_vector[i115 - 1] = new double[nsh];
+					rcf_vector[i115 - 1] = new double[nsh]();
 				} catch (bad_alloc &ex) {
 					throw UnrecognizedConfigurationException("Wrong parameter set: invalid number of layers " + nsh);
 				}
@@ -261,7 +262,7 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st
 			for (int dim1 = 0; dim1 < max_ici; dim1++) {
 				dc0m[dim1] = new complex<double>*[nsph];
 			    for (int dim2 = 0; dim2 < nsph; dim2++) {
-			    	dc0m[dim1][dim2] = new complex<double>[nxi];
+			    	dc0m[dim1][dim2] = new complex<double>[nxi]();
 			    }
 			}
 			for (int jxi468 = 1; jxi468 <= nxi; jxi468++) {
@@ -357,14 +358,14 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam
 			sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d %9lE D%d", &xi, &xi_exp, &xi_step, &xi_step_exp);
 			xi *= pow(10.0, 1.0 * xi_exp);
 			xi_step *= pow(10.0, 1.0 * xi_step_exp);
-			variable_vector = new double[nxi];
+			variable_vector = new double[nxi]();
 			for (int jxi320 = 0; jxi320 < nxi; jxi320++) {
 				variable_vector[jxi320] = xi;
 				xi += xi_step;
 			}
 		}
 	} else { // idfc >= 0
-		variable_vector = new double[nxi];
+		variable_vector = new double[nxi]();
 		if (instpc == 0) { // The variable vector is explicitly defined
 			double vs;
 			int vs_exp;
@@ -420,15 +421,22 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam
 		}
 	}
 	last_read_line++;
-	int *iog_vector = new int[nsph];
-	double *ros_vector = new double[nsph];
+	int *iog_vector = new int[nsph]();
+	double *ros_vector = new double[nsph]();
 	double **rcf_vector = new double*[nsph];
-	int *nshl_vector = new int[nsph];
+	int *nshl_vector = new int[nsph]();
+	//printf("\nDEBUG: reading IOG from %s", file_lines[last_read_line].c_str());
+	//fflush(stdout);
 	for (int i = 0; i < nsph; i++) {
 		string read_format = "";
-		for (int j = 0; j < i; j++) read_format += " %*d";
+		for (int j = 0; j < (i % 15); j++) read_format += " %*d";
 		read_format += " %d";
 		sscanf(file_lines[last_read_line].c_str(), read_format.c_str(), (iog_vector + i));
+		if (i > 0 && i % 15 == 0) {
+			last_read_line++;
+			//printf("DEBUG: reading IOG from %s", file_lines[last_read_line].c_str());
+			//fflush(stdout);
+		}
 	}
 	for (int i113 = 1; i113 <= nsph; i113++) {
 		int i_val, nsh;
@@ -441,7 +449,7 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam
 	    ros_vector[i113 - 1] = ros_val * pow(10.0, 1.0 * ros_val_exp);
 	    nsh = nshl_vector[i113 - 1];
 	    if (i113 == 1) nsh += ies;
-	    rcf_vector[i113 - 1] = new double[nsh];
+	    rcf_vector[i113 - 1] = new double[nsh]();
 	    for (int ns = 0; ns < nsh; ns++) {
 	    	double ns_rcf;
 	    	int ns_rcf_exp;
@@ -453,7 +461,7 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam
 	for (int dim1 = 0; dim1 < max_ici; dim1++) {
 		dc0m[dim1] = new complex<double>*[nsph];
 	    for (int dim2 = 0; dim2 < nsph; dim2++) {
-	    	dc0m[dim1][dim2] = new complex<double>[nxi];
+	    	dc0m[dim1][dim2] = new complex<double>[nxi]();
 	    }
 	}
 	for (int jxi468 = 1; jxi468 <= nxi; jxi468++) {