diff --git a/source/hl.h b/source/hl.h
index 50cf627..8cae9f6 100644
--- a/source/hl.h
+++ b/source/hl.h
@@ -43,8 +43,11 @@ typedef struct {
 
 // GLOBALS
 
-token_t * token_table[1000];
-int token_table_top = 0;
+vector_t token_table = {
+	.data          = NULL,
+	.element_size  = sizeof(token_t *),
+	.element_count = 0UL
+};
 
 display_t * display_table = NULL;
 
@@ -66,7 +69,7 @@ int free_token(token_t * token) {
 }
 
 int append_token(token_t * token) {
-	token_table[token_table_top++] = token;
+	vector_push(&token_table, token);
 
 	return 0;
 }
@@ -198,8 +201,10 @@ void render_string(const char * const string,
 		int token_index = 0;
 		int offset;
 
-		for (; token_index < token_table_top; token_index++) {
-			f = token_fits(token_table[token_index], string, s - string, &offset);
+		for (; token_index < token_table.element_count; token_index++) {
+			token_t * t = vector_get(&token_table,
+			                          token_index);
+			f = token_fits(t, string, s - string, &offset);
 			if (f) {
 				break;
 			}
@@ -212,13 +217,17 @@ void render_string(const char * const string,
 		//
 		if (f) {
 			for (int i = 0; i < offset; i++) {
+				token_t * t = vector_get(&token_table,
+				                          token_index);
 				display->callback(s + i,
 				                  0,
-				                  token_table[token_index]->hl->attributes);
+				                  t->hl->attributes);
 			}
+			token_t * t = vector_get(&token_table,
+			                          token_index);
 			display->callback(s + offset,
 			                  f,
-			                  token_table[token_index]->hl->attributes);
+			                  t->hl->attributes);
 			s += f + offset;
 		} else {
 			display->callback(s,
@@ -241,8 +250,8 @@ int hl_init(void) {
 }
 
 int hl_deinit(void) {
-	for (int i = 0; i < token_table_top; i++) {
-		free_token(token_table[i]);
+	for (int i = 0; i < token_table.element_count; i++) {
+		free_token(vector_get(&token_table, i));
 	}
 
 	return 0;