diff --git a/src/include/tra_subs.h b/src/include/tra_subs.h
index a030cefab49ae4d25736a271dd1383d08e11f756..b839b40554a38ba4e08867c93cf3dddc9563c26f 100644
--- a/src/include/tra_subs.h
+++ b/src/include/tra_subs.h
@@ -6,6 +6,16 @@
 #define INCLUDE_TRA_SUBS_H_
 #endif
 
+//Structures for TRAPPING (that will probably move to Commons)
+struct cil {
+  int le, nlem, nlemt, mxmpo, mxim;
+};
+
+struct ccr {
+  double cof, cimu;
+};
+//End of TRAPPING structures
+
 //Externally defined subroutines
 extern std::complex<double> dconjg(std::complex<double> z);
 extern void sphar(
diff --git a/src/trapping/frfme.cpp b/src/trapping/frfme.cpp
index 5372e66286a62160836f460e0ecebb2f3cf84e96..9adbda7bf64ef1ae787130e779e9a16638c2498f 100644
--- a/src/trapping/frfme.cpp
+++ b/src/trapping/frfme.cpp
@@ -20,7 +20,6 @@ using namespace std;
  *  \param data_file: `string` Name of the input data file.
  *  \param output_path: `string` Directory to write the output files in.
  */
-//void frfme(string data_file, string output_path) {
 int main() {
   string data_file = "../../test_data/trapping/DFRFME";
   string output_path = ".";
diff --git a/src/trapping/lffft.cpp b/src/trapping/lffft.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..496063857fbe3b36e04b82cfe89efd9a2d0d7f57
--- /dev/null
+++ b/src/trapping/lffft.cpp
@@ -0,0 +1,85 @@
+#include <cstdio>
+#include <fstream>
+#include <regex>
+#include <string>
+#include <complex>
+#ifndef INCLUDE_PARSERS_H_
+#include "../include/Parsers.h"
+#endif
+//#ifndef INCLUDE_SPH_SUBS_H_
+//#include "../include/sph_subs.h"
+//#endif
+#ifndef INCLUDE_TRA_SUBS_H_
+#include "../include/tra_subs.h"
+#endif
+
+using namespace std;
+
+/*! \brief C++ implementation of FRFME
+ *
+ *  \param data_file: `string` Name of the input data file.
+ *  \param output_path: `string` Directory to write the output files in.
+ */
+int main() {
+  string data_file = "../../test_data/trapping/DLFFFT";
+  string output_path = ".";
+  double ****zpv = NULL, *ac = NULL;
+  complex<double> *ws = NULL;
+  double *fffe = NULL, *fffs = NULL;
+  double *ffte = NULL, *ffts = NULL;
+  double *xv = NULL, *yv = NULL, *zv = NULL;
+  complex<double> *wsl = NULL;
+  complex<double> **am0m = NULL;
+  complex<double> **amd = NULL;
+  int **indam = NULL;
+  complex<double> *tmsm = NULL, *tmse = NULL, *tms = NULL;
+  int jft, jss, jtw;
+  int is, le;
+  double vks, exris;
+
+  int num_lines = 0;
+  string *file_lines = load_file(data_file, &num_lines);
+  regex re = regex("-?[0-9]+");
+  smatch m;
+  string str_target = file_lines[0];
+  for (int mi = 0; mi < 3; mi++) {
+    regex_search(str_target, m, re);
+    if (mi == 0) jft = stoi(m.str());
+    else if (mi == 1) jss = stoi(m.str());
+    else if (mi == 2) jtw = stoi(m.str());
+    str_target = m.suffix().str();
+  } // mi loop
+  string ttms_name = output_path + "/c_TTMS";
+  fstream ttms;
+  ttms.open(ttms_name, ios::in | ios::binary);
+  if (ttms.is_open()) {
+    ttms.read(reinterpret_cast<char *>(&is), sizeof(int));
+    ttms.read(reinterpret_cast<char *>(&le), sizeof(int));
+    ttms.read(reinterpret_cast<char *>(&vks), sizeof(double));
+    ttms.read(reinterpret_cast<char *>(&exris), sizeof(double));
+    const int nlem = le * (le + 2);
+    const int nlemt = nlem + nlem;
+    printf("DEBUG: is = %d\n", is);
+    printf("DEBUG: le = %d\n", le);
+    printf("DEBUG: vks = %lE\n", vks);
+    printf("DEBUG: exris = %lE\n", exris);
+  } else {
+    printf("ERROR: could not open TTMS file.\n");
+  }
+  // Clean up memory
+  if (ac != NULL) delete[] ac;
+  if (ws != NULL) delete[] ws;
+  if (fffe != NULL) delete[] fffe;
+  if (ffte != NULL) delete[] ffte;
+  if (fffs != NULL) delete[] fffs;
+  if (ffts != NULL) delete[] ffts;
+  if (xv != NULL) delete[] xv;
+  if (yv != NULL) delete[] yv;
+  if (zv != NULL) delete[] zv;
+  if (wsl != NULL) delete[] wsl;
+  if (tmsm != NULL) delete[] tmsm;
+  if (tmse != NULL) delete[] tmse;
+  if (tms != NULL) delete[] tms;
+  printf("Done.\n");
+  return 0;
+}