diff --git a/source/hl.h b/source/hl.h
index 4af59eb..22ae2a7 100644
--- a/source/hl.h
+++ b/source/hl.h
@@ -16,6 +16,10 @@ typedef enum {
 	REGION
 } token_type_t;
 
+typedef void (*attribute_callback_t) (const char * const string,
+                                      const int          length,
+                                            void * const attributes);
+
 typedef struct {
 	char                 * key;
 	attribute_callback_t   callback;
@@ -33,10 +37,6 @@ typedef struct {
 	char         * syntax;
 } token_t;
 
-typedef void (*attribute_callback_t) (const char * const string,
-                                      const int          length,
-                                            void * const attributes);
-
 // GLOBALS
 
 token_t * token_table[1000];
@@ -225,6 +225,9 @@ void render_string(const char * const string,
 // -------------------------
 // ### Library Mangement ###
 // -------------------------
+hl_group_t * keyword_hl = NULL;
+hl_group_t * preprocessor_hl = NULL;
+hl_group_t * symbol_hl = NULL;
 
 int hl_init(void) {
 	return 0;
diff --git a/source/hl_c.inc b/source/hl_c.inc
new file mode 100644
index 0000000..8ce987f
--- /dev/null
+++ b/source/hl_c.inc
@@ -0,0 +1,17 @@
+const char * c_keywords[] = {
+  "register",     "volatile",     "auto",         "const",        "static",       "extern",       "if",           "else",
+  "do",           "while",        "for",          "continue",     "switch",       "case",         "default",      "break",
+  "enum",         "union",        "struct",       "typedef",      "goto",         "void",         "return",       "sizeof",
+  "char",         "short",        "int",          "long",         "signed",       "unsigned",     "float",        "double",
+  NULL
+};
+
+const char * preprocessor_keywords[] = {
+  "#include",     "#pragma",      "#define",      "#undef",       "#ifdef",       "#ifndef",      "#elifdef",     "#elifndef",
+  "#if",          "#elif",        "#else",        "#endif",       "#embed",       "#line",        "#error",       "#warning",
+  NULL
+};
+
+new_char_tokens("&|()[]{}*,", symbol_hl);
+new_keyword_tokens(c_keywords, keyword_hl);
+new_keyword_tokens(preprocessor_keywords, preprocessor_hl);
diff --git a/source/main.c b/source/main.c
index 6afc7a1..5027f93 100644
--- a/source/main.c
+++ b/source/main.c
@@ -10,31 +10,6 @@
 static char * buffer      = NULL;
 static size_t buffer_size = 0;
 
-typedef struct {
-	char * attribute;
-	char * foreground_color;
-	char * background_color;
-} terminal_hl_t;
-
-void cterm_render_callback(const char * const string,
-                           const int          length,
-                           void       * const attributes) {
-	if(!length){
-		fputs(TERMINAL_STYLE_BOLD, stdout);
-		putchar(*string);
-		fputs(TERMINAL_RESET, stdout);
-		return;
-	}
-
-	terminal_hl_t * term_hl = (terminal_hl_t*)attributes;
-	fputs(term_hl->attribute, stdout);
-	fputs(term_hl->foreground_color, stdout);
-	for (int i = 0; i < length; i++) {
-		putchar(*(string+i));
-	}
-	fputs(TERMINAL_RESET, stdout);
-}
-
 int main(int      argc,
          char * * argv) {
 	UNUSED(argc);
@@ -59,62 +34,9 @@ int main(int      argc,
 	buffer[buffer_size - 1] = '\0';
 
 	// Highlight init
-	hl_init();
-	const char * c_keywords[] = {
-	  "register",     "volatile",     "auto",         "const",        "static",       "extern",       "if",           "else",
-	  "do",           "while",        "for",          "continue",     "switch",       "case",         "default",      "break",
-	  "enum",         "union",        "struct",       "typedef",      "goto",         "void",         "return",       "sizeof",
-	  "char",         "short",        "int",          "long",         "signed",       "unsigned",     "float",        "double",
-	  NULL
-	};
-
-	const char * preprocessor_keywords[] = {
-	  "#include",     "#pragma",      "#define",      "#undef",       "#ifdef",       "#ifndef",      "#elifdef",     "#elifndef",
-	  "#if",          "#elif",        "#else",        "#endif",       "#embed",       "#line",        "#error",       "#warning",
-	  NULL
-	};
-
-
+	terminal_hl_init();
 	//
-	display_t * cterm = &(display_t) {
-		.key = "cterm",
-		.callback = cterm_render_callback
-	};
-	//
-	terminal_hl_t terminal_keyword_hl = (terminal_hl_t) {
-		.attribute = TERMINAL_STYLE_BOLD,
-		.foreground_color = TERMINAL_COLOR_FG_GREEN,
-		.background_color = NULL
-	};
-	hl_group_t keyword_hl = (hl_group_t) {
-		.link = NULL,
-		.attributes = (void*)&terminal_keyword_hl
-	};
-	//
-	terminal_hl_t terminal_preprocessor_hl = (terminal_hl_t) {
-		.attribute = TERMINAL_STYLE_BOLD,
-		.foreground_color = TERMINAL_COLOR_FG_BLUE,
-		.background_color = NULL
-	};
-	hl_group_t preprocessor_hl = (hl_group_t) {
-		.link = NULL,
-		.attributes = (void*)&terminal_preprocessor_hl
-	};
-	//
-	terminal_hl_t terminal_symbol_hl = (terminal_hl_t) {
-		.attribute = TERMINAL_STYLE_BOLD,
-		.foreground_color = TERMINAL_COLOR_FG_YELLOW,
-		.background_color = NULL
-	};
-	hl_group_t symbol_hl = (hl_group_t) {
-		.link = NULL,
-		.attributes = (void*)&terminal_symbol_hl
-	};
-	//
-	new_display_mode(cterm);
-	new_char_tokens("&|()[]{}*,", &symbol_hl);
-	new_keyword_tokens(c_keywords, &keyword_hl);
-	new_keyword_tokens(preprocessor_keywords, &preprocessor_hl);
+	#include "hl_c.inc";
 	//
 	render_string(buffer, "cterm");
 	putchar('\n');
diff --git a/source/terminal_hl.h b/source/terminal_hl.h
new file mode 100644
index 0000000..5d4e2c7
--- /dev/null
+++ b/source/terminal_hl.h
@@ -0,0 +1,67 @@
+typedef struct {
+	char * attribute;
+	char * foreground_color;
+	char * background_color;
+} terminal_hl_t;
+
+void cterm_render_callback(const char * const string,
+                           const int          length,
+                           void       * const attributes) {
+	if(!length){
+		fputs(TERMINAL_STYLE_BOLD, stdout);
+		putchar(*string);
+		fputs(TERMINAL_RESET, stdout);
+		return;
+	}
+
+	terminal_hl_t * term_hl = (terminal_hl_t*)attributes;
+	fputs(term_hl->attribute, stdout);
+	fputs(term_hl->foreground_color, stdout);
+	for (int i = 0; i < length; i++) {
+		putchar(*(string+i));
+	}
+	fputs(TERMINAL_RESET, stdout);
+}
+
+display_t * cterm = &(display_t) {
+	.key = "cterm",
+	.callback = cterm_render_callback
+};
+
+
+int terminal_hl_init(void){
+	hl_init();
+	new_display_mode(cterm);
+	//
+	terminal_hl_t terminal_keyword_hl = (terminal_hl_t) {
+		.attribute = TERMINAL_STYLE_BOLD,
+		.foreground_color = TERMINAL_COLOR_FG_GREEN,
+		.background_color = NULL
+	};
+	keyword_hl = (hl_group_t) {
+		.link = NULL,
+		.attributes = (void*)&terminal_keyword_hl
+	};
+	//
+	terminal_hl_t terminal_preprocessor_hl = (terminal_hl_t) {
+		.attribute = TERMINAL_STYLE_BOLD,
+		.foreground_color = TERMINAL_COLOR_FG_BLUE,
+		.background_color = NULL
+	};
+	preprocessor_hl = (hl_group_t) {
+		.link = NULL,
+		.attributes = (void*)&terminal_preprocessor_hl
+	};
+	//
+	terminal_hl_t terminal_symbol_hl = (terminal_hl_t) {
+		.attribute = TERMINAL_STYLE_BOLD,
+		.foreground_color = TERMINAL_COLOR_FG_YELLOW,
+		.background_color = NULL
+	};
+	symbol_hl = (hl_group_t) {
+		.link = NULL,
+		.attributes = (void*)&terminal_symbol_hl
+	};
+
+	return 0;
+}