diff --git a/sefht.geany b/sefht.geany
index 5bbbe47b572d6466fc12a1e52737cec8033c56da..a14e19abae447b5da39d15d8d2756481c9976a39 100644
--- a/sefht.geany
+++ b/sefht.geany
@@ -28,7 +28,7 @@ long_line_behaviour=1
 long_line_column=72
 
 [files]
-current_page=54
+current_page=35
 FILE_NAME_0=139;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2FREADME;0;8
 FILE_NAME_1=134;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitignore;0;8
 FILE_NAME_2=1737;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fconfigure.ac;0;8
@@ -61,10 +61,10 @@ FILE_NAME_28=1867;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp
 FILE_NAME_29=3036;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8
 FILE_NAME_30=1159;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.h;0;8
 FILE_NAME_31=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_html.h;0;8
-FILE_NAME_32=13741;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_32=14059;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_33=1148;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_34=1124;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag_data.h;0;8
-FILE_NAME_35=15732;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8
+FILE_NAME_35=13076;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8
 FILE_NAME_36=1682;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.h;0;8
 FILE_NAME_37=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr_data.h;0;8
 FILE_NAME_38=924;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fstatus.h;0;8
@@ -84,7 +84,7 @@ FILE_NAME_51=994;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fpr
 FILE_NAME_52=2447;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
 FILE_NAME_53=3880;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_tag.c;0;8
 FILE_NAME_54=29231;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_attr.c;0;8
-FILE_NAME_55=667;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
+FILE_NAME_55=547;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
 FILE_NAME_56=201;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitlab-ci.yml;0;4
 FILE_NAME_57=71;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Fupload.sh.in;0;8
 FILE_NAME_58=806;Sh;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Frelease.sh.in;0;4
diff --git a/src/lib/sefht/validator_attr.c b/src/lib/sefht/validator_attr.c
index 5f42049fe7cd4f3a99a721085c33680d16670d3d..72101f872d56e5a9552c438ad9a70ed0212e23fb 100644
--- a/src/lib/sefht/validator_attr.c
+++ b/src/lib/sefht/validator_attr.c
@@ -565,14 +565,13 @@ remove_attr (struct SH_Validator * validator,
 {
 	struct attr_info attr_data;
 	struct attr_info * new_attrs;
-	size_t index2;
 
 	/* preserve data as realloc may fail */
 	attr_data = validator->attrs[index];
 
-	for (index2 = index; index2 < validator->attr_n-1; index2++)
+	for (size_t i = index; i < validator->attr_n-1; i++)
 	{
-		validator->attrs[index2] = validator->attrs[index2+1];
+		validator->attrs[i] = validator->attrs[i+1];
 	}
 
 	new_attrs = realloc (validator->attrs,
@@ -583,11 +582,9 @@ remove_attr (struct SH_Validator * validator,
 	{
 		set_status (status, E_ALLOC, 3, "realloc failed");
 
-		for (index2 = index; index2 < validator->attr_n-1;
-		     index2++)
+		for (size_t i = validator->attr_n-1; i > index; i--)
 		{
-			validator->attrs[index2+1] =
-			validator->attrs[index2];
+			validator->attrs[i] = validator->attrs[i-1];
 		}
 		validator->attrs[index] = attr_data;
 
diff --git a/src/lib/sefht/validator_tag.c b/src/lib/sefht/validator_tag.c
index 9a24acf32f6600d6747f6629839df3d12bf123fa..e52ca80278b22747d2db5be7278c596b6fe71319 100644
--- a/src/lib/sefht/validator_tag.c
+++ b/src/lib/sefht/validator_tag.c
@@ -595,7 +595,6 @@ remove_tag (struct SH_Validator * validator, Tag id,
 	{
 		struct tag_info * new_tags;
 		char * name;
-		size_t index2;
 
 		/* don't free name yet, as realloc may fail */
 		name = tags[index].name;
@@ -606,9 +605,9 @@ remove_tag (struct SH_Validator * validator, Tag id,
 			return FALSE;
 		}
 
-		for (index2 = index; index2 < tag_n-1; index2++)
+		for (size_t i = index; i < tag_n-1; i++)
 		{
-			tags[index2] = tags[index2+1];
+			tags[i] = tags[i+1];
 		}
 
 		new_tags = realloc (tags, sizeof (struct tag_info)
@@ -617,14 +616,14 @@ remove_tag (struct SH_Validator * validator, Tag id,
 		{
 			set_status (status, E_ALLOC, 3, "realloc failed");
 
-			for (index2 = index; index2 < tag_n-1; index2++)
+			for (size_t i = tag_n-1; i > index; i++)
 			{
-				tags[index2+1] = tags[index2];
+				tags[i] = tags[i-1];
 			}
 
 /* bad code to silence splint, should never be executed. */
 #ifdef S_SPLINT_S
-			tags = (void *) 0x12345;
+			new_tags = (void *) 0x12345;
 #endif
 
 			return FALSE;
diff --git a/todo.txt b/todo.txt
index 3c9b4df92fb45ea9bfa7d898c5791f2863890eb2..ace9c8e080c683bcc9d87b73068a03012289049e 100644
--- a/todo.txt
+++ b/todo.txt
@@ -22,6 +22,5 @@ Fragment:
 - support for mapping special chars -> html entities
 
 Validator:
-- bugfix: remove_attr: failure recovery, fix move back loop
 - remove unnecessary ids
 - tests missing for deregister_tag