diff --git a/sefht.geany b/sefht.geany
index 34d4c1327e24fce377ce74ff15dfa7ea4789069d..16cecf6f8f3e0a3c6500c3c6dc1422fd478c3fbf 100644
--- a/sefht.geany
+++ b/sefht.geany
@@ -28,33 +28,33 @@ long_line_behaviour=1
 long_line_column=72
 
 [files]
-current_page=12
+current_page=22
 FILE_NAME_0=923;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fconfigure.ac;0;8
 FILE_NAME_1=73;Make;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2FMakefile.am;0;8
 FILE_NAME_2=1082;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Fmain.c;0;8
 FILE_NAME_3=640;Make;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2FMakefile.am;0;8
-FILE_NAME_4=1502;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fcms.c;0;8
-FILE_NAME_5=1359;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fcms.h;0;8
-FILE_NAME_6=5079;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fdata.c;0;8
-FILE_NAME_7=1376;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fdata.h;0;8
+FILE_NAME_4=944;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fcms.c;0;8
+FILE_NAME_5=1021;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fcms.h;0;8
+FILE_NAME_6=1193;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fdata.c;0;8
+FILE_NAME_7=1145;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fdata.h;0;8
 FILE_NAME_8=1733;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment.c;0;8
-FILE_NAME_9=3029;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment.h;0;8
-FILE_NAME_10=7437;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fnode_fragment.c;0;8
-FILE_NAME_11=3013;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fnode_fragment.h;0;8
-FILE_NAME_12=24630;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ftext.c;0;8
-FILE_NAME_13=1833;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ftext.h;0;8
-FILE_NAME_14=1520;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8
-FILE_NAME_15=1503;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.h;0;8
-FILE_NAME_16=10187;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8
-FILE_NAME_17=1828;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8
+FILE_NAME_9=1223;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment.h;0;8
+FILE_NAME_10=1296;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fnode_fragment.c;0;8
+FILE_NAME_11=2259;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fnode_fragment.h;0;8
+FILE_NAME_12=1384;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ftext.c;0;8
+FILE_NAME_13=2692;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ftext.h;0;8
+FILE_NAME_14=1212;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8
+FILE_NAME_15=1260;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.h;0;8
+FILE_NAME_16=1466;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8
+FILE_NAME_17=1135;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8
 FILE_NAME_18=4232;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fstatus.h;0;8
 FILE_NAME_19=1017;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Flog.h;0;4
 FILE_NAME_20=1077;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fmacro.h;0;8
 FILE_NAME_21=937;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fsefht.h;0;8
-FILE_NAME_22=1408;Make;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2FMakefile.am;0;8
-FILE_NAME_23=872;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_cms.c;0;8
-FILE_NAME_24=3552;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_data.c;0;8
-FILE_NAME_25=2373;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_node_fragment.c;0;8
+FILE_NAME_22=499;Make;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2FMakefile.am;0;8
+FILE_NAME_23=876;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_cms.c;0;8
+FILE_NAME_24=894;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_data.c;0;8
+FILE_NAME_25=952;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_node_fragment.c;0;8
 FILE_NAME_26=5736;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text.c;0;8
 FILE_NAME_27=4687;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
 FILE_NAME_28=165;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
diff --git a/src/lib/sefht/cms.c b/src/lib/sefht/cms.c
index 26a16fe6b0a767aa82340a4a5bca57fad6dc80c2..6923712b2f149658017a541aa8f070348c6b8005 100644
--- a/src/lib/sefht/cms.c
+++ b/src/lib/sefht/cms.c
@@ -33,6 +33,12 @@
 #include "cms.h"
 
 
+struct SH_Cms
+{
+	SH_Data * data;
+};
+
+
 struct SH_Cms *
 SH_Cms_new (struct SH_Status * status)
 {
diff --git a/src/lib/sefht/cms.h b/src/lib/sefht/cms.h
index f39c1dc19cf218e9faad409b7587b9d689d79369..924a433c281245b012582c5788e5f721e6c70266 100644
--- a/src/lib/sefht/cms.h
+++ b/src/lib/sefht/cms.h
@@ -34,16 +34,6 @@
 #include "data.h"
 
 
-#ifdef LIB_SEFHT_COMPILATION
-
-struct SH_Cms
-{
-	struct SH_Data * data;
-};
-
-
-#endif /* LIB_SEFHT_COMPILATION */
-
 typedef struct SH_Cms SH_Cms;
 
 
diff --git a/src/lib/sefht/data.c b/src/lib/sefht/data.c
index 3105e2b49a469b85059c705ceef056c2bb3c2685..26a23d7b1d2e4a2f7a2d4ba107622198a5617cb8 100644
--- a/src/lib/sefht/data.c
+++ b/src/lib/sefht/data.c
@@ -36,6 +36,22 @@
 #include "data.h"
 
 
+#define NEXT_PAGE(page) page++
+
+struct SH_Page
+{
+	page_t id;
+	char * name;
+};
+
+struct SH_Data
+{
+	struct SH_Validator * validator;
+	unsigned int page_n;
+	struct SH_Page * pages;
+	page_t last_page;
+};
+
 
 static inline bool init_validator (struct SH_Data * data,
                                    struct SH_Status * status);
diff --git a/src/lib/sefht/data.h b/src/lib/sefht/data.h
index cc125acc69419b5fdce137439fb289824be43a3b..fd5d702d2b8b92b6da450f8acf9899680e139c0f 100644
--- a/src/lib/sefht/data.h
+++ b/src/lib/sefht/data.h
@@ -41,27 +41,6 @@ typedef unsigned int page_t;
 #define PAGE_MIN 1
 #define PAGE_MAX UINT_MAX
 
-#ifdef LIB_SEFHT_COMPILATION
-
-#define NEXT_PAGE(page) page++
-
-struct SH_Page
-{
-	page_t id;
-	char * name;
-};
-
-struct SH_Data
-{
-	struct SH_Validator * validator;
-	unsigned int page_n;
-	struct SH_Page * pages;
-	page_t last_page;
-};
-
-
-#endif /* LIB_SEFHT_COMPILATION */
-
 typedef struct SH_Data SH_Data;
 
 
diff --git a/src/lib/sefht/fragment.h b/src/lib/sefht/fragment.h
index 5eae3d54b589530c539c885f3b0ba96c4bdc45cb..9ce247596e1c971d0ac1c114c039899b350e0019 100644
--- a/src/lib/sefht/fragment.h
+++ b/src/lib/sefht/fragment.h
@@ -53,7 +53,7 @@ struct fragment_methods;
 struct SH_Fragment;
 struct SH_Fragment
 {
-	struct SH_Data * data;
+	SH_Data * data;
 
 	enum SH_FRAGMENT_TYPE type;
 	const struct fragment_methods * methods;
diff --git a/src/lib/sefht/node_fragment.c b/src/lib/sefht/node_fragment.c
index c899c2aec7ae9c606daec7f82b2fcade105ce449..db05ad68c8e719605c71d7c11980f76aa22328c3 100644
--- a/src/lib/sefht/node_fragment.c
+++ b/src/lib/sefht/node_fragment.c
@@ -40,6 +40,24 @@
 #include "node_fragment.h"
 
 
+struct SH_NodeFragment
+{
+	struct SH_Fragment base;
+
+	char * tag;
+
+	size_t child_n;
+	struct SH_Fragment ** childs;
+};
+
+#define OPEN_TAG_BEGIN "<"
+#define OPEN_TAG_END ">"
+#define CLOSE_TAG_BEGIN "</"
+#define CLOSE_TAG_END ">"
+
+#define NEWLINE "\n"
+
+
 static const struct fragment_methods methods = {
 	(struct SH_Fragment * (*)(struct SH_Fragment *,
 	                          struct SH_Status *))
diff --git a/src/lib/sefht/node_fragment.h b/src/lib/sefht/node_fragment.h
index 38d3ebe9550905e990bbb564161cbbb3031a3a46..a0d8d4f701d2b503311260ca67c9d8bf74c6840e 100644
--- a/src/lib/sefht/node_fragment.h
+++ b/src/lib/sefht/node_fragment.h
@@ -37,30 +37,6 @@
 #include "fragment.h"
 
 
-#ifdef LIB_SEFHT_COMPILATION
-
-struct SH_NodeFragment;
-struct SH_NodeFragment
-{
-	struct SH_Fragment base;
-
-	char * tag;
-
-	size_t child_n;
-	struct SH_Fragment ** childs;
-};
-
-#define OPEN_TAG_BEGIN "<"
-#define OPEN_TAG_END ">"
-#define CLOSE_TAG_BEGIN "</"
-#define CLOSE_TAG_END ">"
-
-//~ #define INDENT_TEXT "\t"
-#define NEWLINE "\n"
-
-#endif /* LIB_SEFHT_COMPILATION */
-
-/* TODO: no-export */
 #define INDENT_TEXT "\t"
 
 typedef struct SH_NodeFragment SH_NodeFragment;
diff --git a/src/lib/sefht/text.c b/src/lib/sefht/text.c
index 2bad83d76f9fe4d86959cf0a43e29ef281ad7847..9ffda548f4c71330636e5d1e6cd6d5a4e6ba6beb 100644
--- a/src/lib/sefht/text.c
+++ b/src/lib/sefht/text.c
@@ -36,6 +36,31 @@
 #include "text.h"
 
 
+#ifndef CHUNK_SIZE
+#define CHUNK_SIZE 64
+#endif /* CHUNK_SIZE */
+
+#if CHUNK_SIZE == 0
+#error "CHUNK_SIZE can't be 0."
+#endif /* CHUNK_SIZE == 0 */
+
+/*@abstract@*/
+struct text_segment;
+struct text_segment
+{
+	size_t length;
+	size_t size;
+	char * text;
+	/*@relnull@*/ struct text_segment * next;
+};
+
+/*@abstract@*/
+struct SH_Text
+{
+	/*@notnull@*/ struct text_segment * data;
+};
+
+
 /*@null@*/
 /*@only@*/
 struct SH_Text *
diff --git a/src/lib/sefht/text.h b/src/lib/sefht/text.h
index 9a3439079cc67922c3bef4f90df5f6cb17fed768..63775feb1061c8c4ca83b9342b2326f7cef6cecd 100644
--- a/src/lib/sefht/text.h
+++ b/src/lib/sefht/text.h
@@ -34,72 +34,44 @@
 #include "status.h"
 
 
-#ifdef LIB_SEFHT_COMPILATION
-
-#ifndef CHUNK_SIZE
-#define CHUNK_SIZE 64
-#endif /* CHUNK_SIZE */
-
-#if CHUNK_SIZE == 0
-#error "CHUNK_SIZE can't be 0."
-#endif /* CHUNK_SIZE == 0 */
-
-/*@abstract@*/
-struct text_segment;
-struct text_segment
-{
-	size_t length;
-	size_t size;
-	char * text;
-	/*@relnull@*/ struct text_segment * next;
-};
-
-/*@abstract@*/
-struct SH_Text
-{
-	/*@notnull@*/ struct text_segment * data;
-};
-
-#endif /* LIB_SEFHT_COMPILATION */
-
 typedef /*@abstract@*/ struct SH_Text SH_Text;
 
 
 /*@null@*/
 /*@only@*/
-struct SH_Text *
+SH_Text *
 SH_Text_new (/*@null@*/ /*@out@*/ struct SH_Status * status);
 
 /*@null@*/
 /*@only@*/
-struct SH_Text *
+SH_Text *
 SH_Text_new_from_string (const char * string,
                          /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 void
-SH_Text_free (/*@only@*/ struct SH_Text * text);
+SH_Text_free (/*@only@*/ SH_Text * text);
 
 /*@null@*/
 /*@only@*/
-struct SH_Text *
-SH_Text_copy (const struct SH_Text * text,
+SH_Text *
+SH_Text_copy (const SH_Text * text,
               /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 size_t
-SH_Text_get_length (const struct SH_Text * text,
+SH_Text_get_length (const SH_Text * text,
                     /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 /*@null@*/
 /*@only@*/
 char *
-SH_Text_get_char (const struct SH_Text * text,
+SH_Text_get_char (const SH_Text * text,
                   size_t index,
                   /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 /*@null@*/
 /*@only@*/
 char *
-SH_Text_get_string (const struct SH_Text * text,
+SH_Text_get_string (const SH_Text * text,
                     size_t index, size_t offset,
                     /*@null@*/ /*@out@*/ size_t * length,
                     /*@null@*/ /*@out@*/ struct SH_Status * status);
@@ -107,26 +79,25 @@ SH_Text_get_string (const struct SH_Text * text,
 /*@null@*/
 /*@only@*/
 char *
-SH_Text_get_range (const struct SH_Text * text,
+SH_Text_get_range (const SH_Text * text,
                    size_t start, size_t end,
                    /*@null@*/ /*@out@*/ size_t * length,
                    /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 bool
-SH_Text_append_string (struct SH_Text * text,
+SH_Text_append_string (SH_Text * text,
                        const char * string,
                        /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 bool
-SH_Text_append_text (struct SH_Text * text,
-                     const struct SH_Text * text2,
+SH_Text_append_text (SH_Text * text,
+                     const SH_Text * text2,
                      /*@null@*/ /*@out@*/ struct SH_Status * status);
 
 void
-SH_Text_join (struct SH_Text * text,
-              /*@only@*/ struct SH_Text * text2);
+SH_Text_join (SH_Text * text, /*@only@*/ SH_Text * text2);
 
 void
-SH_Text_print (const struct SH_Text * text);
+SH_Text_print (const SH_Text * text);
 
 #endif /* __TEXT_H__ */
diff --git a/src/lib/sefht/validator.c b/src/lib/sefht/validator.c
index 4f871f65b26a3da9f46db832f20ce97fe0f09007..f5d15af33eac9415bab7fabb8a8906a30de90e8f 100644
--- a/src/lib/sefht/validator.c
+++ b/src/lib/sefht/validator.c
@@ -30,9 +30,24 @@
 #include "validator.h"
 
 
+/* "validator_tag.c" is included twice,
+ * because TAG_DATA must be defined,
+ * before SH_VAlidator can be defined,
+ * but SH_Validator must be defined,
+ * before the functions in "validator_tag.c"
+ * can use the definition, which themselves
+ * are needed before the functions in this
+ * file can be defined. */
+#include "validator_tag.c"
+struct SH_Validator
+{
+	TAG_DATA
+};
 
+#define VALIDATOR_IS_DEFINED
 #include "validator_tag.c"
 
+
 /*@null@*/
 struct SH_Validator *
 SH_Validator_new (/*@null@*/ /*@out@*/ struct SH_Status * status)
diff --git a/src/lib/sefht/validator.h b/src/lib/sefht/validator.h
index 6afdbd93fe601993ff9a731d27bc1b2d5856d681..d06b721d1642cd99fe002e8f9d41c6a460d43078 100644
--- a/src/lib/sefht/validator.h
+++ b/src/lib/sefht/validator.h
@@ -38,22 +38,13 @@ typedef struct SH_Validator SH_Validator;
 #include "validator_tag.h"
 #undef __VALIDATOR_H_INSIDE__
 
-#ifdef LIB_SEFHT_COMPILATION
-
-struct SH_Validator
-{
-	TAG_DATA
-};
-
-#endif /* LIB_SEFHT_COMPILATION */
-
 
 /*@null@*/
 SH_Validator *
 SH_Validator_new (/*@null@*/ /*@out@*/ struct SH_Status * status);
 
 /*@null@*/
-struct SH_Validator *
+SH_Validator *
 SH_Validator_copy (const SH_Validator * validator,
                    /*@null@*/ /*@out@*/ struct SH_Status * status);
 
diff --git a/src/lib/sefht/validator_tag.c b/src/lib/sefht/validator_tag.c
index 1bdf6989fd15f9cdd883a6e51298e695c65182b5..59c485a22aa928da7c39b39251bb3e0ffac0bb92 100644
--- a/src/lib/sefht/validator_tag.c
+++ b/src/lib/sefht/validator_tag.c
@@ -34,6 +34,30 @@
 #include "validator_tag.h"
 
 
+#ifndef VALIDATOR_IS_DEFINED
+
+#define NEXT_TAG(tag) (tag + 1)
+
+struct tag_info
+{
+	union
+	{
+		struct
+		{
+			Tag id;
+			/*@only@*/ char * name;
+		} data;
+		size_t next;
+	};
+};
+
+#define TAG_DATA                                                       \
+	/*@only@*/ struct tag_info * tags;                             \
+	size_t tag_n;                                                  \
+	Tag last_tag;                                                  \
+
+#else /* VALIDATOR_IS_DEFINED */
+
 static inline
 bool
 init_tags (/*@out@*/ struct SH_Validator * validator,
@@ -526,3 +550,5 @@ SH_Validator_deregister_tag (struct SH_Validator * validator,
 {
 	return remove_tag (validator, id, status);
 }
+
+#endif /* VALIDATOR_IS_DEFINED */
diff --git a/src/lib/sefht/validator_tag.h b/src/lib/sefht/validator_tag.h
index c5ec3d99a9a94eb9f0547a09591abb4341dbf64e..8ccbe31cedd1a957399f7483f970ee74bcdbb4f2 100644
--- a/src/lib/sefht/validator_tag.h
+++ b/src/lib/sefht/validator_tag.h
@@ -40,32 +40,6 @@ typedef unsigned int Tag;
 #define TAG_MIN (Tag) 1
 #define TAG_MAX (Tag) SIZE_MAX
 
-#ifdef LIB_SEFHT_COMPILATION
-
-#define NEXT_TAG(tag) (tag + 1)
-
-struct tag_info
-{
-	union
-	{
-		struct
-		{
-			Tag id;
-			/*@only@*/ char * name;
-		} data;
-		size_t next;
-	};
-};
-
-#define TAG_DATA                                                       \
-	/*@only@*/ struct tag_info * tags;                             \
-	size_t tag_n;                                                  \
-	Tag last_tag;                                                  \
-
-
-#endif /* LIB_SEFHT_COMPILATION */
-
-
 
 Tag
 SH_Validator_register_tag (SH_Validator * validator,
diff --git a/tests/Makefile.am b/tests/Makefile.am
index ad3158300aeb2ae5c66eb21677424b941fb20db2..e75da677f5feca9d4c6b143a7a68f8a891c58b84 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -20,20 +20,17 @@ OBJECT_PREFIX = $(top_builddir)/src/lib/sefht/libsefht_la-
 
 sefht_cms_test_SOURCES = test_cms.c
 sefht_cms_test_LDADD =
-sefht_cms_test_LDADD += $(OBJECT_PREFIX)cms.o
 sefht_cms_test_LDADD += $(OBJECT_PREFIX)data.o
 sefht_cms_test_LDADD += $(OBJECT_PREFIX)validator.o
 sefht_cms_test_LDADD += $(LDADD)
 
 sefht_data_test_SOURCES = test_data.c
 sefht_data_test_LDADD =
-sefht_data_test_LDADD += $(OBJECT_PREFIX)data.o
 sefht_data_test_LDADD += $(OBJECT_PREFIX)validator.o
 sefht_data_test_LDADD += $(LDADD)
 
 sefht_node_fragment_test_SOURCES = test_node_fragment.c
 sefht_node_fragment_test_LDADD =
-sefht_node_fragment_test_LDADD += $(OBJECT_PREFIX)node_fragment.o
 sefht_node_fragment_test_LDADD += $(OBJECT_PREFIX)data.o
 sefht_node_fragment_test_LDADD += $(OBJECT_PREFIX)fragment.o
 sefht_node_fragment_test_LDADD += $(OBJECT_PREFIX)text.o
diff --git a/tests/test_cms.c b/tests/test_cms.c
index d8aa046f330daf3ca175f797fccd04a0f2baf581..8d0ab8cd570e63afbed48fbfdc9200e942cbac77 100644
--- a/tests/test_cms.c
+++ b/tests/test_cms.c
@@ -26,7 +26,8 @@
 #include <stdlib.h>
 
 #include "status.h"
-#include "cms.h"
+
+#include "cms.c"
 
 
 START_TEST(test_cms)
diff --git a/tests/test_data.c b/tests/test_data.c
index b8f02db44e77376e0a7e738bc351f5f5a856c4c6..0b7595f67509860f0dcc437480e42ff8b4b1bccf 100644
--- a/tests/test_data.c
+++ b/tests/test_data.c
@@ -26,7 +26,8 @@
 #include <stdlib.h>
 
 #include "status.h"
-#include "data.h"
+
+#include "data.c"
 
 
 START_TEST(test_data)
diff --git a/tests/test_node_fragment.c b/tests/test_node_fragment.c
index be2e1a3ea010eccd065aca56b7a0d109af2e21b4..d50363e142d92e0915cc04a196a6400acf1b99e0 100644
--- a/tests/test_node_fragment.c
+++ b/tests/test_node_fragment.c
@@ -28,7 +28,8 @@
 
 #include "macro.h"
 #include "status.h"
-#include "node_fragment.h"
+
+#include "node_fragment.c"
 
 
 START_TEST(test_node_fragment)