diff --git a/src/cluster/Makefile b/src/cluster/Makefile
index 22bc637a66fc67ed87f40b4355315a0e34ba87c8..3fc31183a257fd5a8b03603383f4b21d88a09231 100644
--- a/src/cluster/Makefile
+++ b/src/cluster/Makefile
@@ -46,7 +46,7 @@ $(BUILDDIR_CLU)/edfb_clu: $(OBJDIR) $(OBJDIR)/edfb_clu.o $(BUILDDIR_CLU)
 
 # We put $(LIBNPTM) as an object to link in directly, so that it will be found at runtime even if it is a shared object library. May change in the future when we have an install: target
 $(BUILDDIR_CLU)/np_cluster: $(OBJDIR) $(CXX_CLU_OBJS) $(BUILDDIR_CLU) $(LIBNPTM)
-	$(CXX) $(CXXFLAGS) -o $(BUILDDIR_CLU)/np_cluster $(CXX_CLU_OBJS) $(LIBNPTM) $(CXXLDFLAGS) 
+	$(CXX) $(CXXFLAGS) -o $(BUILDDIR_CLU)/np_cluster $(CXX_CLU_OBJS) $(LIBNPTM) $(CXXLDFLAGS) -llapacke
 
 clean:
 	rm -f $(F_CLU_OBJS) $(CXX_CLU_OBJS) $(CXX_CLU_DEBUG)
diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp
index 4591b28aa6bda3f1483f0e0190af7bea94d934f2..ea86b7391d43f9b420f9bbfbcf9a16f3a16090c3 100644
--- a/src/cluster/cluster.cpp
+++ b/src/cluster/cluster.cpp
@@ -32,6 +32,10 @@
 #include "../include/TransitionMatrix.h"
 #endif
 
+#ifndef INCLUDE_LAPACK_CALLS_H_
+#include "../include/lapack_calls.h"
+#endif
+
 using namespace std;
 
 /*! \brief C++ implementation of CLU
@@ -124,7 +128,11 @@ void cluster(string config_file, string data_file, string output_path) {
     }
     C2 *c2 = new C2(nsph, configurations, npnt, npntts);
     complex<double> **am = new complex<double>*[mxndm];
-    for (int ai = 0; ai < mxndm; ai++) am[ai] = new complex<double>[mxndm]();
+    //complex<double> **tam = new complex<double>*[mxndm];
+    for (int ai = 0; ai < mxndm; ai++) {
+      am[ai] = new complex<double>[mxndm](); 
+      //tam[ai] = new complex<double>[mxndm]();
+    }
     const int ndi = c4->nsph * c4->nlim;
     C9 *c9 = new C9(ndi, c4->nlem, 2 * ndi, 2 * c4->nlem);
     double *gaps = new double[nsph]();
@@ -331,8 +339,10 @@ void cluster(string config_file, string data_file, string output_path) {
 	  if (jer != 0) break;
 	} // i132 loop
 	cms(am, c1, c1ao, c4, c6);
+	//cms(tam, c1, c1ao, c4, c6);
 	int ndit = 2 * nsph * c4->nlim;
-	lucin(am, mxndm, ndit, jer);
+	//lucin(am, mxndm, ndit, jer);
+	zinvert(am, ndit, jer);
 	if (jer != 0) break; // jxi488 loop: goes to memory clean
 	ztm(am, c1, c1ao, c4, c6, c9);
 	if (sconf->idfc >= 0) {
@@ -910,8 +920,12 @@ void cluster(string config_file, string data_file, string output_path) {
       delete[] zpv[zi];
     }
     delete[] zpv;
-    for (int ai = mxndm - 1; ai > -1; ai--) delete[] am[ai];
+    for (int ai = mxndm - 1; ai > -1; ai--) {
+      delete[] am[ai];
+      //delete[] tam[ai];
+    }
     delete[] am;
+    //delete[] tam;
     delete[] gaps;
     for (int ti = 1; ti > -1; ti--) {
       delete[] tqse[ti];
diff --git a/src/include/lapack_calls.h b/src/include/lapack_calls.h
index 0270a05c148944960c8091b2c45f278c7981db8e..52996a53139c0f2e2a846abe06c11680a662bf0c 100644
--- a/src/include/lapack_calls.h
+++ b/src/include/lapack_calls.h
@@ -14,7 +14,8 @@
  *
  * \param mat: Matrix of complex. The matrix to be inverted.
  * \param n: `int` The number of rows and columns of the [n x n] matrix.
+ * \param jer: `int &` Reference to an integer return flag.
  */
-void zinvert(std::complex<double> **mat, int n);
+void zinvert(std::complex<double> **mat, int n, int &jer);
 
 #endif
diff --git a/src/libnptm/Makefile b/src/libnptm/Makefile
index b2fbc322c6b1a227ba0e29e80cd2d8e8c2c688bd..7fedc1fb6428c37d76d6369a4fae310ead7f8c7b 100644
--- a/src/libnptm/Makefile
+++ b/src/libnptm/Makefile
@@ -19,11 +19,11 @@ endif
 include ../make.inc
 
 
-CXX_NPTM_OBJS=$(OBJDIR)/Commons.o $(OBJDIR)/Configuration.o $(OBJDIR)/file_io.o $(OBJDIR)/Parsers.o $(OBJDIR)/sph_subs.o $(OBJDIR)/clu_subs.o $(OBJDIR)/tfrfme.o $(OBJDIR)/tra_subs.o $(OBJDIR)/TransitionMatrix.o
+CXX_NPTM_OBJS=$(OBJDIR)/Commons.o $(OBJDIR)/Configuration.o $(OBJDIR)/file_io.o $(OBJDIR)/Parsers.o $(OBJDIR)/sph_subs.o $(OBJDIR)/clu_subs.o $(OBJDIR)/tfrfme.o $(OBJDIR)/tra_subs.o $(OBJDIR)/TransitionMatrix.o $(OBJDIR)/lapack_calls.o
 
-CXX_NPTM_DYNOBJS=$(DYNOBJDIR)/Commons.o $(DYNOBJDIR)/Configuration.o $(DYNOBJDIR)/file_io.o $(DYNOBJDIR)/Parsers.o $(DYNOBJDIR)/sph_subs.o $(DYNOBJDIR)/clu_subs.o $(DYNOBJDIR)/tfrfme.o $(DYNOBJDIR)/tra_subs.o $(DYNOBJDIR)/TransitionMatrix.o
+CXX_NPTM_DYNOBJS=$(DYNOBJDIR)/Commons.o $(DYNOBJDIR)/Configuration.o $(DYNOBJDIR)/file_io.o $(DYNOBJDIR)/Parsers.o $(DYNOBJDIR)/sph_subs.o $(DYNOBJDIR)/clu_subs.o $(DYNOBJDIR)/tfrfme.o $(DYNOBJDIR)/tra_subs.o $(DYNOBJDIR)/TransitionMatrix.o $(DYNOBJDIR)/lapack_calls.o
 
-CXX_NPTM_DEBUG=$(OBJDIR)/Commons.g* $(OBJDIR)/Configuration.g* $(OBJDIR)/file_io.g* $(OBJDIR)/Parsers.g* $(OBJDIR)/sph_subs.g* $(OBJDIR)/clu_subs.g* $(OBJDIR)/tfrfme.g* $(OBJDIR)/tra_subs.g* $(OBJDIR)/TransitionMatrix.g*
+CXX_NPTM_DEBUG=$(OBJDIR)/Commons.g* $(OBJDIR)/Configuration.g* $(OBJDIR)/file_io.g* $(OBJDIR)/Parsers.g* $(OBJDIR)/sph_subs.g* $(OBJDIR)/clu_subs.g* $(OBJDIR)/tfrfme.g* $(OBJDIR)/tra_subs.g* $(OBJDIR)/TransitionMatrix.g* $(OBJDIR)/lapack_calls.g*
 
 all: $(BUILDDIR_NPTM)/libnptm.a $(BUILDDIR_NPTM)/libnptm.so
 
diff --git a/src/libnptm/lapack_calls.cpp b/src/libnptm/lapack_calls.cpp
index 0a6eaf3480b8098e3160a36d5214c5b6fbe79741..f57e31dac87db4ec0c3c96dfd7ed80d060855d92 100644
--- a/src/libnptm/lapack_calls.cpp
+++ b/src/libnptm/lapack_calls.cpp
@@ -3,30 +3,30 @@
 #include "lapacke.h"
 
 #ifndef INCLUDE_LAPACK_CALLS_H_
-#define INCLUDE_LAPACK_CALLS_H_
 #include "../include/lapack_calls.h"
 #endif
 
 using namespace std;
 
-void zinvert(std::complex<double> **mat, int n){
+void zinvert(std::complex<double> **mat, int n, int &jer) {
+  jer = 0;
   __complex__ double *arr = new __complex__ double[n * n];
   const __complex__ double uim = 1.0di;
   for (int i = 0; i < n; i++) {
     for (int j = 0; j < n; j++) {
-      int idx = i * n + j;
-      arr[idx] = mat[i][j].real() + uim * mat[i][j].imag();
+      int idx = i + n * j;
+      arr[idx] = mat[j][i].real() + uim * mat[j][i].imag();
     }
   }
   
   int* IPIV = new int[n];
   
-  LAPACKE_zgetrf(LAPACK_ROW_MAJOR, N, N, arr, N, IPIV);
-  LAPACKE_zgetri(LAPACK_ROW_MAJOR, N, arr, N, IPIV);
+  LAPACKE_zgetrf(LAPACK_ROW_MAJOR, n, n, arr, n, IPIV);
+  LAPACKE_zgetri(LAPACK_ROW_MAJOR, n, arr, n, IPIV);
   for (int i = 0; i < n; i++) {
     for (int j = 0; j < n; j++) {
-      int idx = i * n + j;
-      mat[i][j] = complex<double>(__real__ arr[idx], __imag__ arr[idx]);
+      int idx = i + n * j;
+      mat[j][i] = complex<double>(__real__ arr[idx], __imag__ arr[idx]);
     }
   }
   delete [] IPIV;