diff --git a/sefht.geany b/sefht.geany
index 730c3d965a2512ebb32f0977932932e3daa05278..3bca782fb8c545d99c0e5b6c020e09f84b540473 100644
--- a/sefht.geany
+++ b/sefht.geany
@@ -28,7 +28,7 @@ long_line_behaviour=1
 long_line_column=72
 
 [files]
-current_page=10
+current_page=12
 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=1143;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Fmain.c;0;8
@@ -39,10 +39,10 @@ FILE_NAME_6=2921;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fpr
 FILE_NAME_7=1583;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=1185;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=1835;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=1156;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment_data.c;0;8
-FILE_NAME_11=1164;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment_class.c;0;8
-FILE_NAME_12=1099;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_13=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_10=1923;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment_data.c;0;8
+FILE_NAME_11=1701;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Ffragment_class.c;0;8
+FILE_NAME_12=8225;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_13=1892;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_14=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_15=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_16=1212;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8
diff --git a/src/lib/sefht/fragment_class.c b/src/lib/sefht/fragment_class.c
index ea72c2be230101a0d0f9b25e2f08ef32024df1e0..c33cfdb3bbd44a69040feaad5e2da8749ff25da6 100644
--- a/src/lib/sefht/fragment_class.c
+++ b/src/lib/sefht/fragment_class.c
@@ -40,12 +40,14 @@
 
 static inline
 void
-init_fragment (struct SH_Fragment * fragment,
-               SH_Data * data,
+init_fragment (/*@out@*/ struct SH_Fragment * fragment,
+               /*@dependent@*/ SH_Data * data,
                const enum SH_FRAGMENT_TYPE type,
+               /*@shared@*/
                const struct fragment_methods * const methods)
-	/*@sets fragment->data,
-	        fragment->type@*/
+	/*@modifies fragment->data@*/
+	/*@modifies fragment->type@*/
+	/*@modifies fragment->methods@*/
 {
 	fragment->data = data;
 	fragment->type = type;
@@ -57,6 +59,8 @@ init_fragment (struct SH_Fragment * fragment,
 static inline
 void
 free_fragment (struct SH_Fragment * fragment)
+	/*@modifies fragment@*/
+	/*@releases fragment@*/
 {
 	(void) fragment;
 	return;
@@ -64,8 +68,11 @@ free_fragment (struct SH_Fragment * fragment)
 
 static inline
 void
-copy_fragment (struct SH_Fragment * copy,
-               struct SH_Fragment * fragment)
+copy_fragment (/*@out@*/ struct SH_Fragment * copy,
+               const struct SH_Fragment * fragment)
+	/*@modifies copy->data@*/
+	/*@modifies copy->type@*/
+	/*@modifies copy->methods@*/
 {
 	copy->data = fragment->data;
 	copy->type = fragment->type;
@@ -76,7 +83,8 @@ copy_fragment (struct SH_Fragment * copy,
 
 static inline
 enum SH_FRAGMENT_TYPE
-get_type (struct SH_Fragment * fragment)
+get_type (const struct SH_Fragment * fragment)
+	/*@*/
 {
 	return fragment->type;
 }
diff --git a/src/lib/sefht/fragment_data.c b/src/lib/sefht/fragment_data.c
index 4bfac5aa78db0962acc2048f91653cbe8d865f40..334a3badaf638288b89bec97d80397c7950dc42f 100644
--- a/src/lib/sefht/fragment_data.c
+++ b/src/lib/sefht/fragment_data.c
@@ -76,10 +76,10 @@ struct fragment_methods
 
 struct SH_Fragment
 {
-	SH_Data * data;
+	/*@dependent@*/ SH_Data * data;
 
 	enum SH_FRAGMENT_TYPE type;
-	const struct fragment_methods * methods;
+	/*@shared@*/ const struct fragment_methods * methods;
 };
 
 #endif /* LIB_SEFHT_COMPILATION */
diff --git a/src/lib/sefht/node_fragment.c b/src/lib/sefht/node_fragment.c
index e470ca325a50f5be90941addbb75e02eb3228717..b1294cdf3288ffa92432734f8b314531a4aaf956 100644
--- a/src/lib/sefht/node_fragment.c
+++ b/src/lib/sefht/node_fragment.c
@@ -62,22 +62,31 @@ struct SH_NodeFragment
 
 static const struct fragment_methods methods = {
 	(struct SH_Fragment * (*)(const struct SH_Fragment *,
+	                          /*@out@*/ /*@null@*/
 	                          struct SH_Status *))
 	SH_NodeFragment_deepcopy,
 
-	(void (*)(struct SH_Fragment *))
+	(void (*)(/*@only@*/ struct SH_Fragment *))
 	SH_NodeFragment_free,
 
-	(struct SH_Text * (*)(struct SH_Fragment *, enum HTML_MODE,
+	(struct SH_Text * (*)(const struct SH_Fragment *,
+	                      enum HTML_MODE,
 	                      unsigned int, unsigned int, const char *,
-	                      struct SH_Status *))
+	                      /*@out@*/ /*@null@*/ struct SH_Status *))
 	SH_NodeFragment_to_html
 };
 
 
-struct SH_Fragment *
-SH_NodeFragment_new (const char * tag, struct SH_Data * data,
-                     struct SH_Status * status)
+/*@null@*/
+/*@only@*/
+struct SH_Fragment /*@alt struct SH_NodeFragment@*/ *
+SH_NodeFragment_new (const char * tag,
+                     /*@dependent@*/ SH_Data * data,
+                     /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals NODE,
+	           fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
 	struct SH_NodeFragment * fragment;
 
@@ -115,7 +124,9 @@ SH_NodeFragment_new (const char * tag, struct SH_Data * data,
 }
 
 void
-SH_NodeFragment_free (struct SH_NodeFragment * fragment)
+SH_NodeFragment_free (/*@only@*/ struct SH_NodeFragment * fragment)
+	/*@modifies fragment@*/
+	/*@releases fragment@*/
 {
 	size_t index;
 
@@ -134,9 +145,14 @@ SH_NodeFragment_free (struct SH_NodeFragment * fragment)
 	return;
 }
 
-struct SH_Fragment *
-SH_NodeFragment_copy (struct SH_NodeFragment * fragment,
-                      struct SH_Status * status)
+/*@null@*/
+/*@only@*/
+struct SH_Fragment /*@alt struct SH_NodeFragment@*/ *
+SH_NodeFragment_copy (const struct SH_NodeFragment * fragment,
+                      /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
 	struct SH_NodeFragment * copy;
 
@@ -173,9 +189,15 @@ SH_NodeFragment_copy (struct SH_NodeFragment * fragment,
 	return (struct SH_Fragment *) copy;
 }
 
-struct SH_Fragment *
-SH_NodeFragment_deepcopy (struct SH_NodeFragment * fragment,
+/*@null@*/
+/*@only@*/
+struct SH_Fragment /*@alt struct SH_NodeFragment@*/ *
+SH_NodeFragment_deepcopy (const struct SH_NodeFragment * fragment,
+                          /*@out@*/ /*@null@*/
                           struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
 	struct SH_NodeFragment * copy;
 	struct SH_Fragment * child;
@@ -217,6 +239,10 @@ SH_NodeFragment_deepcopy (struct SH_NodeFragment * fragment,
 		            "fragment child failed.\n");
 
 		free (copy->tag);
+/* dangerous call to silence splint, should never be executed. */
+#ifdef S_SPLINT_S
+		free (copy->childs);
+#endif
 		free (copy);
 
 		return NULL;
@@ -244,14 +270,20 @@ SH_NodeFragment_deepcopy (struct SH_NodeFragment * fragment,
 }
 
 bool
-SH_Fragment_is_NodeFragment (struct SH_Fragment * fragment)
+SH_Fragment_is_NodeFragment (const struct SH_Fragment * fragment)
+	/*@*/
 {
 	return get_type (fragment) == NODE;
 }
 
+/*@null@*/
+/*@only@*/
 char *
-SH_NodeFragment_get_tag (struct SH_NodeFragment * fragment,
-                         struct SH_Status * status)
+SH_NodeFragment_get_tag (const struct SH_NodeFragment * fragment,
+                         /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
 	char * tag;
 
@@ -271,10 +303,16 @@ SH_NodeFragment_get_tag (struct SH_NodeFragment * fragment,
 	return tag;
 }
 
+/*@null@*/
+/*@observer@*/
 struct SH_Fragment *
-SH_NodeFragment_get_child (struct SH_NodeFragment * fragment,
+SH_NodeFragment_get_child (const struct SH_NodeFragment * fragment,
                            size_t index,
+                           /*@out@*/ /*@null@*/
                            struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
 	if (index >= fragment->child_n)
 	{
@@ -290,8 +328,9 @@ SH_NodeFragment_get_child (struct SH_NodeFragment * fragment,
 }
 
 bool
-SH_NodeFragment_is_child (struct SH_NodeFragment * fragment,
-                          struct SH_Fragment * child)
+SH_NodeFragment_is_child (const struct SH_NodeFragment * fragment,
+                          const struct SH_Fragment * child)
+	/*@*/
 {
 	size_t index;
 
@@ -306,8 +345,9 @@ SH_NodeFragment_is_child (struct SH_NodeFragment * fragment,
 }
 
 bool
-SH_NodeFragment_is_descendant (struct SH_NodeFragment * fragment,
-			       struct SH_Fragment * child)
+SH_NodeFragment_is_descendant (const struct SH_NodeFragment * fragment,
+                          const struct SH_Fragment * child)
+	/*@*/
 {
 	size_t index;
 
@@ -328,23 +368,37 @@ SH_NodeFragment_is_descendant (struct SH_NodeFragment * fragment,
 
 bool
 SH_NodeFragment_append_child (struct SH_NodeFragment * fragment,
-                              struct SH_Fragment * child,
+                              /*@only@*/ struct SH_Fragment * child,
+                              /*@out@*/ /*@null@*/
                               struct SH_Status * status)
+	/*@modifies fragment->childs@*/
+	/*@modifies fragment->child_n@*/
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
-	fragment->childs = realloc (fragment->childs,
-	                            sizeof (struct SH_Fragment *)
-	                            * (fragment->child_n + 1));
+	struct SH_Fragment ** new_childs;
 
-	if (fragment->childs == NULL)
+	new_childs = realloc (fragment->childs,
+	                      sizeof (struct SH_Fragment *)
+	                      * (fragment->child_n + 1));
+
+	if (new_childs == NULL)
 	{
 		set_status (status, E_ALLOC, 6,
 		            "Memory allocation for "
 		            "fragment child failed.\n");
 
+/* bad code to silence splint, should never be executed. */
+#ifdef S_SPLINT_S
+				fragment->childs = (void *) 0x12345;
+#endif
 		return FALSE;
 	}
 
-	fragment->childs[fragment->child_n] = child;
+	new_childs[fragment->child_n] = child;
+
+	fragment->childs = new_childs;
 	fragment->child_n++;
 
 	set_success (status);
@@ -352,13 +406,18 @@ SH_NodeFragment_append_child (struct SH_NodeFragment * fragment,
 	return TRUE;
 }
 
+/*@null@*/
+/*@only@*/
 struct SH_Text *
-SH_NodeFragment_to_html (struct SH_NodeFragment * fragment,
+SH_NodeFragment_to_html (const struct SH_NodeFragment * fragment,
                          enum HTML_MODE mode,
                          unsigned int indent_base,
                          unsigned int indent_step,
-                         char * indent_char,
-                         struct SH_Status * status)
+                         const char * indent_char,
+                         /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/
 {
 	struct SH_Text * html;
 	struct SH_Text * child;
@@ -366,7 +425,7 @@ SH_NodeFragment_to_html (struct SH_NodeFragment * fragment,
 	size_t index;
 
 	html = SH_Text_new (status);
-	if (failed (status))
+	if (html == NULL)
 	{
 		return NULL;
 	}
@@ -380,7 +439,8 @@ SH_NodeFragment_to_html (struct SH_NodeFragment * fragment,
 			return NULL;
 		}
 
-		for (index = 0; index < indent_base; index++)
+		for (index = 0; ((unsigned int) index) < indent_base;
+		     index++)
 		{
 			if (!SH_Text_append_string (indent_text,
 			                            indent_char,
diff --git a/src/lib/sefht/node_fragment.h b/src/lib/sefht/node_fragment.h
index a0d8d4f701d2b503311260ca67c9d8bf74c6840e..518c52d25d68b98b602aee4c214afa2a170541c3 100644
--- a/src/lib/sefht/node_fragment.h
+++ b/src/lib/sefht/node_fragment.h
@@ -39,56 +39,98 @@
 
 #define INDENT_TEXT "\t"
 
-typedef struct SH_NodeFragment SH_NodeFragment;
+typedef /*@abstract@*/ struct SH_NodeFragment SH_NodeFragment;
 
 
-SH_Fragment *
+/*@null@*/
+/*@only@*/
+SH_Fragment /*@alt SH_NodeFragment@*/ *
 SH_NodeFragment_new (const char * tag,
-                     SH_Data * data,
-                     struct SH_Status * status);
+                     /*@dependent@*/ SH_Data * data,
+                     /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
 
 void
-SH_NodeFragment_free (SH_NodeFragment * fragment);
-
-SH_Fragment *
-SH_NodeFragment_copy (SH_NodeFragment * fragment,
-                      struct SH_Status * status);
-
-SH_Fragment *
-SH_NodeFragment_deepcopy (SH_NodeFragment * fragment,
-                          struct SH_Status * status);
+SH_NodeFragment_free (/*@only@*/ SH_NodeFragment * fragment)
+	/*@modifies fragment@*/
+	/*@releases fragment@*/;
+
+/*@null@*/
+/*@only@*/
+SH_Fragment /*@alt SH_NodeFragment@*/ *
+SH_NodeFragment_copy (const SH_NodeFragment * fragment,
+                      /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
+
+/*@null@*/
+/*@only@*/
+SH_Fragment /*@alt SH_NodeFragment@*/ *
+SH_NodeFragment_deepcopy (const SH_NodeFragment * fragment,
+                          /*@out@*/ /*@null@*/
+                          struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
 
 bool
-SH_Fragment_is_NodeFragment (SH_Fragment * fragment);
+SH_Fragment_is_NodeFragment (const SH_Fragment * fragment)
+	/*@*/;
 
+/*@null@*/
+/*@only@*/
 char *
-SH_NodeFragment_get_tag (SH_NodeFragment * fragment,
-                         struct SH_Status * status);
-
+SH_NodeFragment_get_tag (const SH_NodeFragment * fragment,
+                         /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
+
+/*@null@*/
+/*@observer@*/
 SH_Fragment *
-SH_NodeFragment_get_child (SH_NodeFragment * fragment,
+SH_NodeFragment_get_child (const SH_NodeFragment * fragment,
                            size_t index,
-                           struct SH_Status * status);
+                           /*@out@*/ /*@null@*/
+                           struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
 
 bool
-SH_NodeFragment_is_child (SH_NodeFragment * fragment,
-                          SH_Fragment * child);
+SH_NodeFragment_is_child (const SH_NodeFragment * fragment,
+                          const SH_Fragment * child)
+	/*@*/;
 
 bool
-SH_NodeFragment_is_descendant (SH_NodeFragment * fragment,
-                               SH_Fragment * child);
+SH_NodeFragment_is_descendant (const struct SH_NodeFragment * fragment,
+                          const struct SH_Fragment * child)
+	/*@*/;
 
 bool
-SH_NodeFragment_append_child (SH_NodeFragment * fragment,
-                              SH_Fragment * child,
-                              struct SH_Status * status);
-
+SH_NodeFragment_append_child (struct SH_NodeFragment * fragment,
+                              /*@only@*/ struct SH_Fragment * child,
+                              /*@out@*/ /*@null@*/
+                              struct SH_Status * status)
+	/*@modifies fragment@*/
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
+
+/*@null@*/
+/*@only@*/
 SH_Text *
-SH_NodeFragment_to_html (SH_NodeFragment * fragment,
+SH_NodeFragment_to_html (const SH_NodeFragment * fragment,
                          enum HTML_MODE mode,
                          unsigned int indent_base,
                          unsigned int indent_step,
-                         char * indent_char,
-                         struct SH_Status * status);
+                         const char * indent_char,
+                         /*@out@*/ /*@null@*/ struct SH_Status * status)
+	/*@globals fileSystem@*/
+	/*@modifies fileSystem@*/
+	/*@modifies status@*/;
 
 #endif /* __NODE_FRAGMENT_H__ */