diff --git a/src/sphere/edfb.cpp b/src/sphere/edfb.cpp
index cb0df775e4d09b6d46cbd5dcaa2082cf761469d8..542e1924532978dde6f36e7df5711ea2285f01aa 100644
--- a/src/sphere/edfb.cpp
+++ b/src/sphere/edfb.cpp
@@ -5,12 +5,133 @@
 
 #include <cstdio>
 #include <cmath>
-#include <string>
+#include <complex>
+#include <cstring>
+#include <iostream>
+#include <fstream>
 #include "List.h"
-#include "edfb.h"
+
+using namespace std;
+
+string *load_file(string file_name, int *count);
 
 int main(int argc, char **argv) {
-  DEDFB input_data = DEDFB(std::string("../../test_data/sphere/DEDFB"));
-  input_data.print();
+  // Common variables set
+  complex<double> *dc0, *dc0m;
+  double *ros, **rcf;
+  int *iog, *nshl;
+  double *xiv, *wns, *wls, *pus, *evs, *vss;
+  string vns[5];
+
+  // Input file reading section
+  int num_lines = 0;
+  int last_read_line; //!< Keep track of where INXI left the input stream
+  string *file_lines = load_file("../../test_data/sphere/DEDFB", &num_lines);
+
+  // Configuration code
+  int nsph, ies;
+  sscanf(file_lines[0].c_str(), " %d %d", &nsph, &ies);
+  if (ies != 0) ies = 1;
+  double exdc, wp, xip;
+  int exdc_exp, wp_exp, xip_exp;
+  int idfc, nxi, instpc, insn;
+  sscanf(
+    file_lines[1].c_str(),
+    " %9lf D%d %9lf D%d %8lf D%d %d %d %d %d",
+    &exdc, &exdc_exp,
+    &wp, &wp_exp,
+    &xip, &xip_exp,
+    &idfc, &nxi, &instpc, &insn
+  );
+  exdc *= pow(10.0, exdc_exp);
+  wp *= pow(10.0, wp_exp);
+  xip *= pow(10.0, xip_exp);
+
+  FILE *output = fopen("c_OEDFB", "w");
+  // FORTRAN starts subroutine INXI at this point
+  const double pigt = acos(0.0) * 4.0;
+  const double evc = 6.5821188e-16;
+  if (idfc >= 0) {
+    printf("Not walked by input data.\n");
+  } else {
+    if (instpc < 1) {
+      // In this case the XI vector is explicitly defined.
+      // Test input comes this way.
+      vns[insn] = "XIV";
+      List<double> xi_vector;
+      double xi;
+      int xi_exp;
+      sscanf(file_lines[2].c_str(), " %9lE D%d", &xi, &xi_exp);
+      xi *= pow(10.0, xi_exp);
+      xi_vector.set(0, xi);
+      for (int jxi310 = 1; jxi310 < nxi; jxi310++) {
+	sscanf(file_lines[2 + jxi310].c_str(), " %9lE D%d", &xi, &xi_exp);
+	xi *= pow(10.0, xi_exp);
+	xi_vector.append(xi);
+	last_read_line = 2 + jxi310;
+      }
+      vss = xi_vector.to_array();
+      xiv = xi_vector.to_array();
+      double pu = xip + wp;
+      double wn = pu / 3.0e8;
+      fprintf(output, "          XIP          WN           WL           PU           EV\n");
+      fprintf(output, "     %13.4lE", xip);
+      fprintf(output, "%13.4lE", wn);
+      fprintf(output, "%13.4lE", pigt / wn);
+      fprintf(output, "%13.4lE", pu);
+      fprintf(output, "%13.4lE\n", pu * evc);
+      fprintf(output, "  SCALE FACTORS XI\n", pu * evc);
+      for (int jxi6612 = 1; jxi6612 <= nxi; jxi6612++)
+	fprintf(output, "%5d%13.4lE\n", jxi6612, xiv[jxi6612 - 1]);
+      //INXI branch ends here.
+    }
+  }
+  last_read_line++;
+  iog = new int[nsph];
+  for (int i = 0; i < nsph; i++) {
+    sscanf(file_lines[last_read_line].c_str(), " %d", (iog + i));
+  }
+  nshl = new int[nsph];
+  ros = new double[nsph];
+  rcf = new double*[nsph];
+  for (int i113 = 1; i113 <= nsph; i113++) {
+    int i_val;
+    double ros_val;
+    int ros_val_exp;
+    if (iog[i113 - 1] < i113) continue;
+    sscanf(file_lines[++last_read_line].c_str(), " %d %9lf D%d", &i_val, &ros_val, &ros_val_exp);
+    nshl[i113 - 1] = i_val;
+    ros[i113 - 1] = ros_val * pow(10.0, ros_val_exp);
+    int nsh = nshl[i113 -1];
+    if (i113 == 1) nsh += ies;
+    rcf[i113 - 1] = new double[nsh];
+    for (int ns = 0; ns < nsh; ns++) {
+      double ns_rcf;
+      int ns_rcf_exp;
+      sscanf(file_lines[++last_read_line].c_str(), " %8lf D%d", &ns_rcf, &ns_rcf_exp);
+      rcf[i113 -1][ns] = ns_rcf * pow(10.0, ns_rcf_exp);
+    }
+  }
+  if (idfc < 0) {
+    fprintf(output, "  DIELECTRIC CONSTANTS\n");
+  }
+  fclose(output);
   return 0;
 }
+
+string *load_file(string file_name, int *count) {
+  fstream input_file(file_name.c_str(), ios::in);
+  List<string> file_lines = List<string>();
+  string line;
+  if (input_file.is_open()) {
+    getline(input_file, line);
+    file_lines.set(0, line);
+    while (getline(input_file, line)) {
+      file_lines.append(line);
+    }
+    input_file.close();
+  }
+  string *array_lines = file_lines.to_array();
+  *count = file_lines.length();
+  return array_lines;
+}
diff --git a/src/sphere/edfb.h b/src/sphere/edfb.h
deleted file mode 100644
index 6f28cb504bfffe4d087108d005b309392df2adf9..0000000000000000000000000000000000000000
--- a/src/sphere/edfb.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * \brief A class to represent EDFB configuration data.
- *
- * This class replicates the structure of formatted DEDFB input data
- * files for the EDFB program. The class is built on the SPHERE/DEDFB
- * file template, but it is meant to grant compliance with the CLUSTER
- * case too.
- *
- * Compatibility between the SPHERE and the CLUSTER cases is planned
- * through the introduction of dynamic pointers that can fit both cases,
- * provided that the DEDFB formatting has been properly understood. In
- * case not, the suggested work-around is to develop specialized classes
- * for the SPHERE case and the CLUSTER case. In that case, the current
- * class would already represent a valid implementation for the single
- * sphere problem.
- *
- * It should be noted that the variable names have been left intentionally
- * equal to the FORTRAN equivalents. In addition they are not documented
- * yet. Documentation and naming may be revised after the code has been
- * tested to succesfully reproduce the original work-flow.
- */
-class DEDFB {
- protected:
-  int nsph, ies;
-  double exdc, wp, xip;
-  int idfc, nxi, instpc, insn;
-  double *xi_vector;
-  int *iog;
-  int *nshl;
-  double *ros;
-  double *rcf;
-  double *dc0;
-
-public:
-  /*! \fn DEDFB(std::string)
-   * \brief Data structure constructor.
-   *
-   * The default procedure to import a configuration file is to build a
-   * configuration object, according to one of the following flavours:
-   *
-   * DEDFB edfb_cfg = DEDFB("FILE_NAME"); // configuration object
-   *
-   * or
-   *
-   * DEDFB *edfb_cfg_ptr = new DEDFB("FILE_NAME"); // pointer version
-   */
-  DEDFB(std::string file_name);
-  
-  /*! \fn print()
-   * \brief Print the data structure to console.
-   *
-   * This is a simple function to print the data read from a configuration
-   * file to the screen. This operation can be useful for debug and testing.
-   */
-  void print();
-};
-
-DEDFB::DEDFB(std::string file_name) {
-  FILE *input_file = fopen(file_name.c_str(), "r");
-  int exp_exdc, exp_wp, exp_xip;
-  List<double> xi_list(1);
-  fscanf(input_file, " %d %d", &nsph, &ies);
-  fscanf(
-	 input_file,
-	 " %9lf D%d %9lf D%d %8lf D%d %d %d %d %d",
-	 &exdc, &exp_exdc,
-	 &wp, &exp_wp,
-	 &xip, &exp_xip,
-	 &idfc, &nxi, &instpc, &insn
-	 );
-  exdc *= pow(10.0, exp_exdc);
-  wp *= pow(10.0, exp_wp);
-  xip *= pow(10.0, exp_xip);
-  for (int i_xi = 0; i_xi < nxi; i_xi++) {
-    double xi;
-    int exp_xi;
-    fscanf(input_file, " %9lf D%d", &xi, &exp_xi);
-    xi *= pow(10.0, exp_xi);
-    if (i_xi == 0) {
-      xi_list.set(0, xi);
-    } else {
-      xi_list.append(xi);
-    }
-  }
-  xi_vector = xi_list.to_array();
-  iog = new int[nsph];
-  for (int i_iog = 0; i_iog < nsph; i_iog++) {
-    fscanf(input_file, " %d", (iog + i_iog));
-  }
-  nshl = new int[nsph];
-  ros = new double[nsph];
-  for (int i_nshl = 0; i_nshl < nsph; i_nshl++) {
-    double i_ros;
-    int i_ros_exp;
-    fscanf(input_file, " %d %9lf D%d", (nshl + i_nshl), &i_ros, &i_ros_exp);
-    i_ros *= pow(10.0, i_ros_exp);
-    ros[i_nshl] = i_ros;
-  }
-  rcf = new double[nsph * nshl[0]];
-  for (int i_rcf = 0; i_rcf < nshl[0]; i_rcf++) {
-    for (int j_rcf = 0; j_rcf < nsph; j_rcf++) {
-      double ij_rcf;
-      int ij_rcf_exp;
-      fscanf(input_file, " %8lf D%d", &ij_rcf, &ij_rcf_exp);
-      ij_rcf *= pow(10.0, ij_rcf_exp);
-      rcf[(nsph * i_rcf) + j_rcf] = ij_rcf;
-    }
-  }
-  dc0 = new double[nsph * nshl[0]];
-  for (int i_dc0 = 0; i_dc0 < nsph; i_dc0++) {
-    double ij_dc0;
-    int ij_dc0_exp;
-    fscanf(input_file, " (");
-    for (int j_dc0 = 0; j_dc0 < nshl[0] - 1; j_dc0++) {
-      fscanf(input_file, " %8lf D%d,", &ij_dc0, &ij_dc0_exp);
-      ij_dc0 *= pow(10.0, ij_dc0_exp);
-      dc0[(nshl[0] * i_dc0) + j_dc0] = ij_dc0;
-    }
-    fscanf(input_file, " %8lf D%d)", &ij_dc0, &ij_dc0_exp);
-    ij_dc0 *= pow(10.0, ij_dc0_exp);
-    dc0[(nshl[0] * i_dc0) + nshl[0] - 1] = ij_dc0;
-  }
-  fclose(input_file);
-}
-
-void DEDFB::print() {
-  printf("### CONFIGURATION DATA ###\n");
-  printf("NSPH   = %d\n", nsph);
-  printf("IES    = %d\n", ies);
-  printf("EXDC   = %E\n", exdc);
-  printf("WP     = %E\n", wp);
-  printf("XIP    = %E\n", xip);
-  printf("IDFC   = %d\n", idfc);
-  printf("NXI    = %d\n", nxi);
-  printf("INSTPC = %d\n", instpc);
-  printf("INSN   = %d\n", insn);
-  printf("XIV    = [ %lE", xi_vector[0]);
-  for (int i_xiv = 1; i_xiv < nxi; i_xiv++) printf(", %lE", xi_vector[i_xiv]);
-  printf(" ]\n");
-  printf("IOG    = [ %d", iog[0]);
-  for (int i_iog = 1; i_iog < nsph; i_iog++) printf(", %d", iog[i_iog]);
-  printf(" ]\n");
-  printf("NSHL   = [ %d", nshl[0]);
-  for (int i_nshl = 1; i_nshl < nsph; i_nshl++) printf(", %d", nshl[i_nshl]);
-  printf(" ]\n");
-  printf("ROS    = [ %lE", ros[0]);
-  for (int i_ros = 1; i_ros < nsph; i_ros++) printf(", %lE", ros[i_ros]);
-  printf(" ]\n");
-  printf("RCF    = [ %lE", rcf[0]);
-  for (int i_rcf = 1; i_rcf < nsph * nshl[0]; i_rcf++) printf(", %lE", rcf[i_rcf]);
-  printf(" ]\n");
-  printf("DC0    = [ %lE", dc0[0]);
-  for (int i_dc0 = 1; i_dc0 < nsph * nshl[0]; i_dc0++) printf(", %lE", dc0[i_dc0]);
-  printf(" ]\n");
-  printf("######   END DATA   ######\n");
-  
-}
-
-void inxi(
-  DEDFB *data
-); //!< \brief Initialization process