diff --git a/include/ctll.hpp b/include/ctll.hpp
index 2fe40e34..00d152e5 100644
--- a/include/ctll.hpp
+++ b/include/ctll.hpp
@@ -1,6 +1,8 @@
 #ifndef CTRE_V2__CTLL__HPP
 #define CTRE_V2__CTLL__HPP
 
+#ifndef CTLL__PARSER__HPP
 #include "ctll/parser.hpp"
+#endif
 
 #endif
diff --git a/include/ctll/list.hpp b/include/ctll/list.hpp
index 228ab72a..cae20a66 100644
--- a/include/ctll/list.hpp
+++ b/include/ctll/list.hpp
@@ -1,7 +1,9 @@
 #ifndef CTLL__TYPE_STACK__HPP
 #define CTLL__TYPE_STACK__HPP
 
+#ifndef CTLL__UTILITIES__HPP
 #include "utilities.hpp"
+#endif
 
 namespace ctll {
 
diff --git a/include/ctll/parser.hpp b/include/ctll/parser.hpp
index d7fab77b..25e2e9e1 100644
--- a/include/ctll/parser.hpp
+++ b/include/ctll/parser.hpp
@@ -1,10 +1,21 @@
 #ifndef CTLL__PARSER__HPP
 #define CTLL__PARSER__HPP
 
+#ifndef CTLL__FIXED_STRING__GPP
 #include "fixed_string.hpp"
+#endif
+
+#ifndef CTLL__TYPE_STACK__HPP
 #include "list.hpp"
+#endif
+
+#ifndef CTLL__GRAMMARS__HPP
 #include "grammars.hpp"
+#endif
+
+#ifndef CTLL__ACTIONS__HPP
 #include "actions.hpp"
+#endif
 
 #include <limits>
 
diff --git a/include/ctre.hpp b/include/ctre.hpp
index fcc4b0d8..65f423b5 100644
--- a/include/ctre.hpp
+++ b/include/ctre.hpp
@@ -1,10 +1,24 @@
 #ifndef CTRE_V2__CTRE__HPP
 #define CTRE_V2__CTRE__HPP
 
+#ifndef CTRE_V2__CTRE__LITERALS__HPP
 #include "ctre/literals.hpp"
+#endif
+
+#ifndef CTRE_V2__CTRE__FUNCTIONS__HPP
 #include "ctre/functions.hpp"
+#endif
+
+#ifndef CTRE_V2__CTRE__ITERATOR__HPP
 #include "ctre/iterators.hpp"
+#endif
+
+#ifndef CTRE_V2__CTRE__RANGE__HPP
 #include "ctre/range.hpp"
+#endif
+
+#ifndef CTRE_V2__CTRE__OPERATORS__HPP
 #include "ctre/operators.hpp"
+#endif
 
 #endif
diff --git a/include/ctre/atoms_characters.hpp b/include/ctre/atoms_characters.hpp
index 7d6009b0..52b54707 100644
--- a/include/ctre/atoms_characters.hpp
+++ b/include/ctre/atoms_characters.hpp
@@ -1,7 +1,10 @@
 #ifndef CTRE__ATOMS_CHARACTERS__HPP
 #define CTRE__ATOMS_CHARACTERS__HPP
 
+#ifndef CTRE__UTILITY__HPP
 #include "utility.hpp"
+#endif
+
 #include <cstdint>
 
 namespace ctre {
diff --git a/include/ctre/evaluation.hpp b/include/ctre/evaluation.hpp
index 5755d430..61e8fca8 100644
--- a/include/ctre/evaluation.hpp
+++ b/include/ctre/evaluation.hpp
@@ -1,14 +1,38 @@
 #ifndef CTRE__EVALUATION__HPP
 #define CTRE__EVALUATION__HPP
 
+
+#ifndef CTRE__ATOMS__HPP
 #include "atoms.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_CHARACTERS__HPP
 #include "atoms_characters.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_UNICODE__HPP
 #include "atoms_unicode.hpp"
+#endif
+
+#ifndef CTRE__STARTS_WITH_ANCHOR__HPP
 #include "starts_with_anchor.hpp"
+#endif
+
+#ifndef CTRE__UTILITY__HPP
 #include "utility.hpp"
+#endif
+
+#ifndef CTRE__RETURN_TYPE__HPP
 #include "return_type.hpp"
+#endif
+
+#ifndef CTRE__FIND_CAPTURES__HPP
 #include "find_captures.hpp"
+#endif
+
+#ifndef CTRE__FIRST__HPP
 #include "first.hpp"
+#endif
 
 // remove me when MSVC fix the constexpr bug
 #ifdef _MSC_VER
diff --git a/include/ctre/find_captures.hpp b/include/ctre/find_captures.hpp
index 338d266f..cbdb8c6c 100644
--- a/include/ctre/find_captures.hpp
+++ b/include/ctre/find_captures.hpp
@@ -1,10 +1,21 @@
 #ifndef CTRE__FIND_CAPTURES__HPP
 #define CTRE__FIND_CAPTURES__HPP
 
+#ifndef CTRE__ATOMS_CHARACTERS__HPP
 #include "atoms_characters.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_UNICODE__HPP
 #include "atoms_unicode.hpp"
+#endif
+
+#ifndef CTRE__UTILITY__HPP
 #include "utility.hpp"
+#endif
+
+#ifndef CTRE__RETURN_TYPE__HPP
 #include "return_type.hpp"
+#endif
 
 namespace ctre {
 
diff --git a/include/ctre/first.hpp b/include/ctre/first.hpp
index d56ac04f..7bca3a1c 100644
--- a/include/ctre/first.hpp
+++ b/include/ctre/first.hpp
@@ -1,9 +1,18 @@
 #ifndef CTRE__FIRST__HPP
 #define CTRE__FIRST__HPP
 
+#ifndef CTRE__ATOMS__HPP
 #include "atoms.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_CHARACTERS__HPP
 #include "atoms_characters.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_UNICODE__HPP
 #include "atoms_unicode.hpp"
+#endif
+
 
 namespace ctre {
 	
diff --git a/include/ctre/functions.hpp b/include/ctre/functions.hpp
index b8f9df6b..85378fc3 100644
--- a/include/ctre/functions.hpp
+++ b/include/ctre/functions.hpp
@@ -1,11 +1,25 @@
 #ifndef CTRE_V2__CTRE__FUNCTIONS__HPP
 #define CTRE_V2__CTRE__FUNCTIONS__HPP
 
+#ifndef CTRE_V2__CTLL__HPP
 #include "../ctll.hpp"
+#endif
+
+#ifndef CTRE__PCRE_ACTIONS__HPP
 #include "pcre_actions.hpp"
+#endif
+
+#ifndef CTRE__EVALUATION__HPP
 #include "evaluation.hpp"
+#endif
+
+#ifndef CTRE__WRAPPER__HPP
 #include "wrapper.hpp"
+#endif
+
+#ifndef CTRE__ID__HPP
 #include "id.hpp"
+#endif
 
 namespace ctre {
 
diff --git a/include/ctre/iterators.hpp b/include/ctre/iterators.hpp
index e22ba881..a4176b17 100644
--- a/include/ctre/iterators.hpp
+++ b/include/ctre/iterators.hpp
@@ -1,8 +1,13 @@
 #ifndef CTRE_V2__CTRE__ITERATOR__HPP
 #define CTRE_V2__CTRE__ITERATOR__HPP
 
+#ifndef CTRE_V2__CTRE__LITERALS__HPP
 #include "literals.hpp"
+#endif
+
+#ifndef CTRE_V2__CTRE__FUNCTIONS__HPP
 #include "functions.hpp"
+#endif
 
 namespace ctre {
 
diff --git a/include/ctre/literals.hpp b/include/ctre/literals.hpp
index 951d4c3f..0388d13f 100644
--- a/include/ctre/literals.hpp
+++ b/include/ctre/literals.hpp
@@ -1,11 +1,25 @@
 #ifndef CTRE_V2__CTRE__LITERALS__HPP
 #define CTRE_V2__CTRE__LITERALS__HPP
 
+#ifndef CTRE_V2__CTLL__HPP
 #include "../ctll.hpp"
+#endif
+
+#ifndef CTRE__PCRE_ACTIONS__HPP
 #include "pcre_actions.hpp"
+#endif
+
+#ifndef CTRE__EVALUATION__HPP
 #include "evaluation.hpp"
+#endif
+
+#ifndef CTRE__WRAPPER__HPP
 #include "wrapper.hpp"
+#endif
+
+#ifndef CTRE__ID__HPP
 #include "id.hpp"
+#endif
 
 #ifndef __EDG__
 
diff --git a/include/ctre/pcre_actions.hpp b/include/ctre/pcre_actions.hpp
index ecaad425..7c23c005 100644
--- a/include/ctre/pcre_actions.hpp
+++ b/include/ctre/pcre_actions.hpp
@@ -1,11 +1,26 @@
 #ifndef CTRE__PCRE_ACTIONS__HPP
 #define CTRE__PCRE_ACTIONS__HPP
 
+#ifndef CTRE__PCRE__HPP
 #include "pcre.hpp"
+#endif
+
+#ifndef CTRE__ATOMS__HPP
 #include "atoms.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_CHARACTERS__HPP
 #include "atoms_characters.hpp"
+#endif
+
+#ifndef CTRE__ATOMS_UNICODE__HPP
 #include "atoms_unicode.hpp"
+#endif
+
+#ifndef CTRE__ID__HPP
 #include "id.hpp"
+#endif
+
 #include <cstdint>
 #include <limits>
 
diff --git a/include/ctre/range.hpp b/include/ctre/range.hpp
index f546dd2b..8a2050b3 100644
--- a/include/ctre/range.hpp
+++ b/include/ctre/range.hpp
@@ -1,7 +1,9 @@
 #ifndef CTRE_V2__CTRE__RANGE__HPP
 #define CTRE_V2__CTRE__RANGE__HPP
 
+#ifndef CTRE_V2__CTRE__ITERATOR__HPP
 #include "iterators.hpp"
+#endif
 
 namespace ctre {
 
diff --git a/include/ctre/return_type.hpp b/include/ctre/return_type.hpp
index 19c4d23f..75407bb7 100644
--- a/include/ctre/return_type.hpp
+++ b/include/ctre/return_type.hpp
@@ -1,7 +1,10 @@
 #ifndef CTRE__RETURN_TYPE__HPP
 #define CTRE__RETURN_TYPE__HPP
 
+#ifndef CTRE__ID__HPP
 #include "id.hpp"
+#endif
+
 #include <type_traits>
 #include <tuple>
 #include <string_view>
diff --git a/include/ctre/wrapper.hpp b/include/ctre/wrapper.hpp
index 0a672dd3..ebd14c0f 100644
--- a/include/ctre/wrapper.hpp
+++ b/include/ctre/wrapper.hpp
@@ -1,8 +1,14 @@
 #ifndef CTRE__WRAPPER__HPP
 #define CTRE__WRAPPER__HPP
 
+#ifndef CTRE__EVALUATION__HPP
 #include "evaluation.hpp"
+#endif
+
+#ifndef CTRE__UTILITY__HPP
 #include "utility.hpp"
+#endif
+
 #include <string_view>
 #include <string>