diff --git a/HySoP/CMakeLists.txt b/HySoP/CMakeLists.txt
index fb0578d86cb96f9521d135cd42d970e964e2405b..4273534d32521c094ae06936e25b5fa66e8d1003 100644
--- a/HySoP/CMakeLists.txt
+++ b/HySoP/CMakeLists.txt
@@ -244,7 +244,7 @@ endif()
 
 
 #C++ variables used by setup.py.in for swig
-set(CMAKE_CXX_FLAGS                "${CMAKE_CXX_FLAGS} -W -Wall -Wextra -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter ${FFTW_COMPILE_FLAGS} -std=c++11")
+set(CMAKE_CXX_FLAGS                "${CMAKE_CXX_FLAGS} -W -Wall -Wextra -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-parameter ${FFTW_COMPILE_FLAGS} -fPIC -std=c++11")
 set(CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG}")
 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
 set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE}")
@@ -292,14 +292,7 @@ endif()
 # Hysop C++ library is generated in setup.py by swig
 # --- C++ main and tests  ---
 if(WITH_LIB_CXX)
-    set(HYSOP_CXX_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/build/libcpp2hysop.so")
-    set(HYSOP_CXX_LIBRARY_DEP "cpp2hysoplib")
-    add_custom_target(${HYSOP_CXX_LIBRARY_DEP}
-        DEPENDS python-build
-        COMMAND cp `find ${CMAKE_CURRENT_BINARY_DIR}/build -name _${CPP_2_HYSOP}.so` ${HYSOP_CXX_LIBRARY}
-        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/build"
-        COMMENT "Copy swig c++ library to link")
-  
+        
     get_filename_component(CXX_DIR  "${CMAKE_SOURCE_DIR}/src/hysop++" ABSOLUTE)
     get_filename_component(CXX_MAIN_DIR "${CXX_DIR}/main"             ABSOLUTE)
     get_filename_component(CXX_TEST_DIR "${CXX_DIR}/tests"            ABSOLUTE)
@@ -310,6 +303,28 @@ if(WITH_LIB_CXX)
     link_directories(${CXX_EXT_LIB_DIRS})
     add_definitions(${CXX_EXTRA_DEFINES})
 
+    if(WITH_MAIN_CXX OR WITH_GOOGLE_TESTS)
+        if(APPLE) #swig only generates a bundle, need to generate another static library...
+            set(HYSOP_CXX_LIBRARY_DYLIB "cpp2hysop_dylib")
+
+            file(GLOB_RECURSE source_files ${CXX_SOURCE_DIR}/*.cpp)
+            add_library(${HYSOP_CXX_LIBRARY_DYLIB} STATIC ${source_files})
+            target_link_libraries(${HYSOP_CXX_LIBRARY_DYLIB} ${EXT_LIBRARIES})
+
+            set(HYSOP_CXX_LIBRARY ${HYSOP_CXX_LIBRARY_DYLIB})
+            set(HYSOP_CXX_LIBRARY_DEP cpp2hysop_dylib)
+        else() #nothing to do on other platforms bundle <=> dynamic libraries, so just copy the swig generated one
+            set(HYSOP_CXX_LIBRARY_BUNDLE "${LIBRARY_OUTPUT_PATH}/libcpp2hysop_bundle.so")
+            add_custom_target(cpp2hysop_bundle
+                DEPENDS python-build
+                COMMAND cp `find ${CMAKE_CURRENT_BINARY_DIR}/build -name _${CPP_2_HYSOP}.so` ${HYSOP_CXX_LIBRARY_BUNDLE}
+                WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+                COMMENT "Copy swig c++ library to link")
+            set(HYSOP_CXX_LIBRARY ${HYSOP_CXX_LIBRARY_BUNDLE})
+            set(HYSOP_CXX_LIBRARY_DEP cpp2hysop_bundle)
+        endif()
+    endif()
+  
     if(WITH_MAIN_CXX)
         list(APPEND cxx_executable_sources "${CXX_MAIN_DIR}/poissonSolver.cpp")
         list(APPEND cxx_executable_sources "${CXX_MAIN_DIR}/diffSolver.cpp")
diff --git a/HySoP/setup.py.in b/HySoP/setup.py.in
index 11d96582d35fc583c5d23e0073c6bffb655cc005..3f14efafa0e99cc8862e13c20b1bc435d9bba8bb 100644
--- a/HySoP/setup.py.in
+++ b/HySoP/setup.py.in
@@ -135,7 +135,7 @@ def create_swig_extension(name, inc_dirs, src_dirs=None, sources=None):
     #print "LIBRARY_DIRS=",library_dirs
     #print "EXTRA_COMPILE_ARGS=",extra_compile_args
     #print "EXTRA_LINK_ARGS=",extra_link_args
-    print "DEFINE_MACROS=",define_macros
+    #print "DEFINE_MACROS=",define_macros
     #  To avoid -I -I in compiler call, which results in a bug:
     #while inc_dir.count('') > 0:
     #    inc_dir.remove('')
diff --git a/HySoP/src/hysop++/src/fft/fftwComplex.h b/HySoP/src/hysop++/src/fft/fftwComplex.h
index e2fd44593400408297fc02f397575e16b753eab7..a28954a5f5af170f11ed2eb0a957fa95440cbfc9 100644
--- a/HySoP/src/hysop++/src/fft/fftwComplex.h
+++ b/HySoP/src/hysop++/src/fft/fftwComplex.h
@@ -9,7 +9,11 @@
 namespace hysop {
     namespace fft {
 
-        template <typename T> struct fftw_complex_type {};
+        template <typename T> struct fftw_complex_type {
+            typedef void value_type;
+            typedef void fftw_type; 
+            typedef void std_type; 
+        };
 
         template <> struct fftw_complex_type<long double> { 
             typedef long double               value_type;
diff --git a/HySoP/src/hysop++/src/fft/planner.h b/HySoP/src/hysop++/src/fft/planner.h
index c80197cae16174063e69305367a73c65184ed13a..f9b5f9e0eacb9848993b65ebadca2988d182ac8c 100644
--- a/HySoP/src/hysop++/src/fft/planner.h
+++ b/HySoP/src/hysop++/src/fft/planner.h
@@ -316,6 +316,8 @@ namespace hysop {
                     if(!inplace)
                         std::copy(input_rdata.begin(), input_rdata.end(), output_rdata.begin());
                     this->reset();
+                    ss << m_plannedTransformStr << std::endl;
+                        m_plannedTransformStr = ss.str();
                     return false;
                 }
                 
diff --git a/HySoP/src/hysop++/src/maths/quad_maths.h b/HySoP/src/hysop++/src/maths/quad_maths.h
index d02b3da6071af710ea9444c1fa9d892c28ce6712..9991df6a91e929831453170e8bde2cf487fdc107 100644
--- a/HySoP/src/hysop++/src/maths/quad_maths.h
+++ b/HySoP/src/hysop++/src/maths/quad_maths.h
@@ -144,21 +144,27 @@ namespace std {
     inline __complex128 tanh(__complex128 x) { return ctanhq(x); }
 
     inline std::ostream& operator<<(std::ostream& os, __float128 x) {
-        const int prec = (os.precision()==0 ? 42 : os.precision());
+        const int prec = os.precision();
 
-        char buf[128];
-        int n = quadmath_snprintf(buf, 128, "%+-#46.*Qe", prec, x);
-
-        if (n>128) {
-            char *str = new char[n+1];
-            if (str)
-                quadmath_snprintf (str, n+1, "%+-#46.*Qe", prec, x);
-            os << str;
-            delete(str);
+        if(prec==0) {
+            os << static_cast<long long int>(x);
         }
-        else {
-            os << buf;
+        else { 
+            char buf[128];
+            const std::string format = "%+-#"+std::to_string(prec)+".*Qe";
+            const int n = quadmath_snprintf(buf,128,format.c_str(),prec,x);
+            if(n>127) {
+                char *str = new char[n+1];
+                if (str)
+                    quadmath_snprintf (str,n+1,format.c_str(),prec,x);
+                os << str;
+                delete(str);
+            }
+            else {
+                os << buf;
+            }
         }
+
         return os;
     }
 }
diff --git a/HySoP/src/hysop++/tests/testDiffSolver/CMakeLists.txt b/HySoP/src/hysop++/tests/testDiffSolver/CMakeLists.txt
index d97166f65e3fcad2a1bf8c6abe90628b971cad7b..6f3ddcdc849f9243ac45c15c400bebb3e95fef06 100644
--- a/HySoP/src/hysop++/tests/testDiffSolver/CMakeLists.txt
+++ b/HySoP/src/hysop++/tests/testDiffSolver/CMakeLists.txt
@@ -3,6 +3,7 @@ file(GLOB CPP_SRCS *.cpp)
 set(SRCS ${CPP_SRCS})
 
 get_filename_component(test_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+add_definitions(${CXX_EXTRA_DEFINES})
 add_executable(${test_name} ${SRCS})
 add_dependencies(${test_name} ${HYSOP_CXX_LIBRARY_DEP})
 
diff --git a/HySoP/src/hysop++/tests/testPlanner/CMakeLists.txt b/HySoP/src/hysop++/tests/testPlanner/CMakeLists.txt
index d97166f65e3fcad2a1bf8c6abe90628b971cad7b..6f3ddcdc849f9243ac45c15c400bebb3e95fef06 100644
--- a/HySoP/src/hysop++/tests/testPlanner/CMakeLists.txt
+++ b/HySoP/src/hysop++/tests/testPlanner/CMakeLists.txt
@@ -3,6 +3,7 @@ file(GLOB CPP_SRCS *.cpp)
 set(SRCS ${CPP_SRCS})
 
 get_filename_component(test_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+add_definitions(${CXX_EXTRA_DEFINES})
 add_executable(${test_name} ${SRCS})
 add_dependencies(${test_name} ${HYSOP_CXX_LIBRARY_DEP})
 
diff --git a/HySoP/src/hysop++/tests/testPlanner/testPlanner.cpp b/HySoP/src/hysop++/tests/testPlanner/testPlanner.cpp
index 539d03426795977061e005c8217e805240e6cdbc..09311df6a77acb1eb0e91574162ca69a60fc4e9b 100644
--- a/HySoP/src/hysop++/tests/testPlanner/testPlanner.cpp
+++ b/HySoP/src/hysop++/tests/testPlanner/testPlanner.cpp
@@ -1,4 +1,5 @@
 
+#include "maths/quad_maths.h"
 #include "testPlanner.h"
 
 #include "data/multi_array/multi_array.h"
@@ -26,7 +27,8 @@ static constexpr std::pair<fft::Extension,fft::Extension> pext[nExtensionsPair]
 
 template <typename T, std::size_t Dim, bool verbose=false> 
 void test(bool inplace, bool includePeriodicBds);
-    
+
+#ifdef FFTW_HAS_FFTW3F
 TEST_F(PlannerTest, InplaceFloatTransforms) {
     std::cout << std::endl; 
     std::cout << "== TEST 1D - float       ==\t";
@@ -36,7 +38,9 @@ TEST_F(PlannerTest, InplaceFloatTransforms) {
     std::cout << "== TEST 3D - float       ==\t";
     test<float,3>(false,true);
 }
+#endif
 
+#ifdef FFTW_HAS_FFTW3D
 TEST_F(PlannerTest, InplaceDoubleTransforms) {
     std::cout << std::endl; 
     std::cout << "== TEST 1D - double      ==\t";
@@ -46,7 +50,9 @@ TEST_F(PlannerTest, InplaceDoubleTransforms) {
     std::cout << "== TEST 3D - double      ==\t";
     test<double,3>(true,true);
 }
+#endif
     
+#ifdef FFTW_HAS_FFTW3L
 TEST_F(PlannerTest, InplaceLongDoubleTransforms) {
     std::cout << std::endl; 
     std::cout << "== TEST 1D - long double ==\t";
@@ -56,6 +62,19 @@ TEST_F(PlannerTest, InplaceLongDoubleTransforms) {
     std::cout << "== TEST 3D - long double ==\t";
     test<long double,3>(false,false);
 }
+#endif
+
+#ifdef FFTW_HAS_FFTW3Q
+TEST_F(PlannerTest, InplaceQuadDoubleTransforms) {
+    std::cout << std::endl; 
+    std::cout << "== TEST 1D - __float128 ==\t";
+    test<__float128,1>(false,false);
+    std::cout << "== TEST 2D - __float128 ==\t";
+    test<__float128,2>(false,false);
+    std::cout << "== TEST 3D - __float128 ==\t";
+    test<__float128,3>(false,false);
+}
+#endif
 
 template <typename T, std::size_t Dim, bool verbose> 
 void test(bool inplace, bool includePeriodicBds) {
@@ -125,8 +144,9 @@ void test(bool inplace, bool includePeriodicBds) {
         in = ref;
        
         /* plan transforms and check if planning succeeded */
-        assert(planner.plan(in.data(), out.data(), domainConfig, order, domainSize, FFTW_MEASURE, 
-                    includePeriodicBds, includePeriodicBds) || testCaseId()==0);
+        bool status = planner.plan(in.data(), out.data(), domainConfig, order, domainSize, FFTW_MEASURE, 
+                    includePeriodicBds, includePeriodicBds);
+        assert(status || testCaseId()==0);
     
         /* execute forward and backward inplace transforms */
         planner.executeForwardTransform();
@@ -176,5 +196,5 @@ void test(bool inplace, bool includePeriodicBds) {
          << testCaseId.maxId() << " testcases: " << meanDists;
     for (std::size_t k = 0; k < 3; k++)
         meanDists[k] = std::round(meanDists[k]/eps);
-    std::cout << " ~= " <<  std::fixed << std::setprecision(0) << meanDists << " eps" << std::endl; 
+    std::cout << " ~= " << std::fixed << std::setprecision(0) << meanDists << " eps" << std::endl; 
 }
diff --git a/HySoP/src/hysop++/tests/testPoissonSolver/CMakeLists.txt b/HySoP/src/hysop++/tests/testPoissonSolver/CMakeLists.txt
index d97166f65e3fcad2a1bf8c6abe90628b971cad7b..6f3ddcdc849f9243ac45c15c400bebb3e95fef06 100644
--- a/HySoP/src/hysop++/tests/testPoissonSolver/CMakeLists.txt
+++ b/HySoP/src/hysop++/tests/testPoissonSolver/CMakeLists.txt
@@ -3,6 +3,7 @@ file(GLOB CPP_SRCS *.cpp)
 set(SRCS ${CPP_SRCS})
 
 get_filename_component(test_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+add_definitions(${CXX_EXTRA_DEFINES})
 add_executable(${test_name} ${SRCS})
 add_dependencies(${test_name} ${HYSOP_CXX_LIBRARY_DEP})
 
diff --git a/HySoP/src/hysop++/tests/testPolynoms/CMakeLists.txt b/HySoP/src/hysop++/tests/testPolynoms/CMakeLists.txt
index eedc73c4a8b1417d9da0a9119334ea60326aace0..19cbe1e7480bc0b20e7cf62c96f01cffbd4d98dc 100644
--- a/HySoP/src/hysop++/tests/testPolynoms/CMakeLists.txt
+++ b/HySoP/src/hysop++/tests/testPolynoms/CMakeLists.txt
@@ -3,9 +3,9 @@ file(GLOB CPP_SRCS *.cpp)
 set(SRCS ${CPP_SRCS})
 
 get_filename_component(test_name ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+add_definitions(${CXX_EXTRA_DEFINES})
 add_executable(${test_name} ${SRCS})
 add_dependencies(${test_name} ${HYSOP_CXX_LIBRARY_DEP})
-
 target_link_libraries(${test_name} ${HYSOP_LIBRARY})
 target_link_libraries(${test_name} ${GTEST_LIBRARIES} ${EXT_LIBRARIES})