diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6b02773653851fdb613fc24352788b3daa718128..4877ba310c3feac61b76be94bbb721f760e31958 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -125,7 +125,8 @@ SET(HEADERS
     include/gnss_utils/navigation.h
     include/gnss_utils/tdcp.h
     include/gnss_utils/ublox_raw.h
-  ${RTKLIB_SRC_DIR}/rtklib.h)
+    include/gnss_utils/gnss_utils.h
+    ${RTKLIB_SRC_DIR}/rtklib.h)
 
 # Eigen #######
 FIND_PACKAGE(Eigen3 REQUIRED)
@@ -158,7 +159,8 @@ INSTALL(TARGETS ${PROJECT_NAME}
       RUNTIME DESTINATION bin
       LIBRARY DESTINATION lib/iri-algorithms
       ARCHIVE DESTINATION lib/iri-algorithms)
-INSTALL(FILES ${HEADERS} DESTINATION include/iri-algorithms/gnss_utils)
+INSTALL(DIRECTORY include/gnss_utils DESTINATION include/iri-algorithms)
+INSTALL(FILES ${RTKLIB_SRC_DIR}/rtklib.h DESTINATION include/iri-algorithms/gnss_utils)
 INSTALL(FILES Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
 INSTALL(FILES "${GNSS_UTILS_CONFIG_DIR}/config.h"
   DESTINATION include/iri-algorithms/gnss_utils/internal)
diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..4d9f83f2bd6ab7a7a70fa1b63e8c3d577be4011b
--- /dev/null
+++ b/include/gnss_utils/gnss_utils.h
@@ -0,0 +1,8 @@
+#ifndef INCLUDE_GNSS_UTILS_GNSS_UTILS_H_
+#define INCLUDE_GNSS_UTILS_GNSS_UTILS_H_
+
+extern "C" {
+#include "rtklib.h"
+}
+
+#endif
\ No newline at end of file
diff --git a/include/gnss_utils/navigation.h b/include/gnss_utils/navigation.h
index 2fc13a71c0eb45a88b4570c4be33db1074b12c7b..95b3ad0bc97ebd26873098b857bb3447003a1f3c 100644
--- a/include/gnss_utils/navigation.h
+++ b/include/gnss_utils/navigation.h
@@ -5,9 +5,7 @@
 #include <iostream>
 #include <memory>
 
-extern "C" {
-#include "rtklib.h"
-}
+#include "gnss_utils/gnss_utils.h"
 
 namespace GnssUtils
 {
diff --git a/include/gnss_utils/observations.h b/include/gnss_utils/observations.h
index db14f81068439756c7b9c72c8db2c3b12ef5abe3..f3a0846a26a39cdca1d688f3684e759452331f99 100644
--- a/include/gnss_utils/observations.h
+++ b/include/gnss_utils/observations.h
@@ -7,12 +7,9 @@
 #include <memory>
 #include <cassert>
 
+#include "gnss_utils/gnss_utils.h"
 #include "gnss_utils/utils/utils.h"
 
-extern "C" {
-#include "rtklib.h"
-}
-
 namespace GnssUtils
 {
 class Observations;
diff --git a/include/gnss_utils/utils/rcv_position.h b/include/gnss_utils/utils/rcv_position.h
index 77ec4e77ef3e8d3436601341b3e8868d6018433b..9755c14f8f453758df77e432ad30d40b740d9441 100644
--- a/include/gnss_utils/utils/rcv_position.h
+++ b/include/gnss_utils/utils/rcv_position.h
@@ -15,10 +15,7 @@
 #include "gnss_utils/observations.h"
 #include "gnss_utils/navigation.h"
 #include "gnss_utils/utils/transformations.h"
-
-extern "C" {
-#include "rtklib.h"
-}
+#include "gnss_utils/gnss_utils.h"
 
 namespace GnssUtils
 {
diff --git a/include/gnss_utils/utils/sat_position.h b/include/gnss_utils/utils/sat_position.h
index 376d406a2a1f13b32ce7122d293df408e98085d9..3e90436c2caea89e3e77fd57e99acbe8ce727813 100644
--- a/include/gnss_utils/utils/sat_position.h
+++ b/include/gnss_utils/utils/sat_position.h
@@ -15,10 +15,7 @@
 #include "gnss_utils/observations.h"
 #include "gnss_utils/navigation.h"
 #include "gnss_utils/utils/transformations.h"
-
-extern "C" {
-#include "rtklib.h"
-}
+#include "gnss_utils/gnss_utils.h"
 
 namespace GnssUtils
 {
diff --git a/include/gnss_utils/utils/transformations.h b/include/gnss_utils/utils/transformations.h
index ebed329289ac0d58e6555347a71634565dc108e9..caa22c473af8509cda43970bf7f98cdef05ed99f 100644
--- a/include/gnss_utils/utils/transformations.h
+++ b/include/gnss_utils/utils/transformations.h
@@ -11,10 +11,7 @@
 #include <eigen3/Eigen/Dense>
 #include <eigen3/Eigen/Geometry>
 #include <eigen3/Eigen/Sparse>
-
-extern "C" {
-#include "rtklib.h"
-}
+#include "gnss_utils/gnss_utils.h"
 
 namespace GnssUtils
 {
diff --git a/include/gnss_utils/utils/utils.h b/include/gnss_utils/utils/utils.h
index ec5be8110a00fbc91f35eb21d3d30ad12655f38b..38b0fd6d3d7c876c9130907d38313c13e00d51a0 100644
--- a/include/gnss_utils/utils/utils.h
+++ b/include/gnss_utils/utils/utils.h
@@ -5,15 +5,13 @@
 #include <iostream>
 #include <memory>
 #include <string>
+
 #include "gnss_utils/internal/config.h"
+#include "gnss_utils/gnss_utils.h"
 
 #define ARRAY_SIZE(arr) sizeof(arr) / sizeof(arr[0])
 #define GNSSUTILS_MSG "--GnssUtils--"
 
-extern "C" {
-#include "rtklib.h"
-}
-
 namespace GnssUtils
 {
 void print(std::string& _msg);
@@ -39,14 +37,14 @@ bool equalArray(const T* array1, const T* array2, const int& size1, const int& s
 
 }  // namespace GnssUtils
 
-//bool equalTime(const gtime_t& time1, const gtime_t& time2);
+// bool equalTime(const gtime_t& time1, const gtime_t& time2);
 bool operator==(const gtime_t& time1, const gtime_t& time2);
 bool operator!=(const gtime_t& time1, const gtime_t& time2);
-//bool equalObservations(const obsd_t& obs1, const obsd_t& obs2);
+// bool equalObservations(const obsd_t& obs1, const obsd_t& obs2);
 bool operator==(const obsd_t& obs1, const obsd_t& obs2);
 bool operator!=(const obsd_t& obs1, const obsd_t& obs2);
-//bool equalObservations(const obs_t& obs1, const obs_t& obs2);
+// bool equalObservations(const obs_t& obs1, const obs_t& obs2);
 bool operator==(const obs_t& obs1, const obs_t& obs2);
 bool operator!=(const obs_t& obs1, const obs_t& obs2);
 
-#endif // INCLUDE_GNSS_UTILS_UTILS_UTILS_H_
+#endif  // INCLUDE_GNSS_UTILS_UTILS_UTILS_H_
diff --git a/test/gtest_navigation.cpp b/test/gtest_navigation.cpp
index 18e8c638aa4ce62dcdfaa0a702f7be18652c5c9c..5170cf11310248899fd967b3b870f974a6368b2f 100644
--- a/test/gtest_navigation.cpp
+++ b/test/gtest_navigation.cpp
@@ -1,5 +1,5 @@
 #include "gtest/utils_gtest.h"
-#include "gnss_utils/utils/gnss_utils.h"
+#include "gnss_utils/gnss_utils.h"
 
 TEST(NavigationTests, Whatever)
 {