diff --git a/src/backends/glr.c b/src/backends/glr.c
index b91f7c45a9f3daa5b5bd2efdeae11b0a5b5b82f1..9828c2b30fc2a53eab1d2de5fd77b6f0893b6065 100644
--- a/src/backends/glr.c
+++ b/src/backends/glr.c
@@ -307,15 +307,17 @@ char * h_glr_get_short_name(HAllocator *mm__,
 
 int h_glr_extract_params(void ** params, char* raw_params) {
 
-	params = NULL;
+	*params = NULL;
 
     int param_0 = -1;
     int success = 0;
+    uintptr_t param;
 
     success = sscanf(raw_params + 1, "%d", &param_0);
 
     if(success) {
-    	*params = (void *)(unsigned long long) param_0;
+    	param = (uintptr_t) param_0;
+    	*params = (void *)param;
     }
 
     return success;
diff --git a/src/backends/lalr.c b/src/backends/lalr.c
index 2f0f27e5caa58cd79c7cc0058e61847721eac75f..cdf721000d721d8354d3dc41e7788f31bc26dfe2 100644
--- a/src/backends/lalr.c
+++ b/src/backends/lalr.c
@@ -438,15 +438,17 @@ char * h_lalr_get_short_name(HAllocator *mm__,
 
 int h_lalr_extract_params(void ** params, char* raw_params) {
 
-	params = NULL;
+	*params = NULL;
 
     int param_0 = -1;
     int success = 0;
+    uintptr_t param;
 
     success = sscanf(raw_params + 1, "%d", &param_0);
 
     if(success) {
-    	*params = (void *)(unsigned long long) param_0;
+    	param = (uintptr_t) param_0;
+    	*params = (void *)param;
     }
 
     return success;
diff --git a/src/backends/llk.c b/src/backends/llk.c
index cf7e2aba92dc25425526d9943ddc444928fb91d8..b06f431975f7dbc7793343d2eb1f58190cfcf345 100644
--- a/src/backends/llk.c
+++ b/src/backends/llk.c
@@ -672,15 +672,17 @@ char * h_llk_get_short_name(HAllocator *mm__,
 
 int h_llk_extract_params(void ** params, char * raw_params) {
 
-	params = NULL;
+	*params = NULL;
 
     int param_0 = -1;
     int success = 0;
+    uintptr_t param;
 
     success = sscanf(raw_params + 1, "%d", &param_0);
 
     if(success) {
-    	*params = (void *)(unsigned long long) param_0;
+    	param = (uintptr_t) param_0;
+    	*params = (void *)param;
     }
 
     return success;
diff --git a/src/hammer.c b/src/hammer.c
index a67fc7f850408ef8d8382217e64514508852355a..bcf48fe46cbfb495b2692704c0f49c530e95f59e 100644
--- a/src/hammer.c
+++ b/src/hammer.c
@@ -340,24 +340,26 @@ HParserBackendWithParams * h_get_backend_with_params_by_name(const char *name_wi
 	size_t name_len, params_len;
 	size_t len = strlen(name_with_params);
 
-    params_as_string = strstr(name_with_params, "(");
+	result = h_new(HParserBackendWithParams, 1);
 
-    if(params_as_string) {
-    	params_len = strlen(params_as_string);
-    	name_len = len - params_len;
-    } else {
-    	name_len = len;
-    }
+	if (result) {
 
-	name_with_no_params = h_new(char, name_len+1);
-	memset(name_with_no_params, 0, name_len+1);
-	strncpy(name_with_no_params, name_with_params, name_len);
 
-	HParserBackend backend = h_query_backend_by_name(name_with_no_params);
+	    params_as_string = strstr(name_with_params, "(");
 
-	result = h_new(HParserBackendWithParams, 1);
+	    if(params_as_string) {
+	    	params_len = strlen(params_as_string);
+	    	name_len = len - params_len;
+	    } else {
+	    	name_len = len;
+	    }
+
+		name_with_no_params = h_new(char, name_len+1);
+		memset(name_with_no_params, '\0', name_len+1);
+		strncpy(name_with_no_params, name_with_params, name_len);
+
+		HParserBackend backend = h_query_backend_by_name(name_with_no_params);
 
-	if (result) {
 
 	    result->backend = backend;
 
@@ -366,7 +368,7 @@ HParserBackendWithParams * h_get_backend_with_params_by_name(const char *name_wi
 	    if(params_as_string) {
 	    	//store the raw string containing the param(s)
 	    	char * raw_params_string = h_new(char, params_len+1);
-	    	memset(name_with_no_params, 0, params_len+1);
+	    	memset(raw_params_string, '\0', params_len+1);
 	    	strncpy(raw_params_string, params_as_string, params_len);
 	    	result->raw_params = raw_params_string;
 
diff --git a/src/hammer.h b/src/hammer.h
index fc14125b914cbaf7c174a95dd724d11dd59ed767..15064cfa08c24458fa801997a3ad39a2727ecbeb 100644
--- a/src/hammer.h
+++ b/src/hammer.h
@@ -56,7 +56,7 @@ typedef enum HParserBackend_ {
 
 typedef struct HParserBackendWithParams_ {
   /* Name of backend (for loading backends from modules */
-  char *name;
+  const char *name;
   /* The backend (if backend is to be loaded from an external module set to invalid (?))*/
   HParserBackend backend;
   /*
@@ -67,7 +67,7 @@ typedef struct HParserBackendWithParams_ {
    */
   void *params;
   /*raw substring the params were extracted from*/
-  char *raw_params;
+  const char *raw_params;
   /* Allocator to use to free this (and the params if necessary) */
   HAllocator *mm__;
 } HParserBackendWithParams;
diff --git a/src/t_names.c b/src/t_names.c
index 3d614139f001f889767e386c459241efa08232fe..ae6296ef59878688c12294c730c47adc2c7676c0 100644
--- a/src/t_names.c
+++ b/src/t_names.c
@@ -41,7 +41,39 @@ static void test_tt_backend_short_name(void) {
   g_check_maybe_string_eq(name, glr_name);
 }
 
+/*TODO create proper test(s) with test name matching what is being tested.
+ * As is this is just what I am using to drive development
+ * and check I am not making silly mistakes */
+static void test_tt_query_backend_by_name(void) {
+	HParserBackend be;
+
+	be = h_query_backend_by_name(packrat_name);
+	g_check_inttype("%d", HParserBackend, be, ==, PB_PACKRAT);
+	be = h_query_backend_by_name(regular_name);
+	g_check_inttype("%d", HParserBackend, be, ==, PB_REGULAR);
+
+
+	HParserBackendWithParams * be_w_p = NULL;
+
+	be_w_p = h_get_backend_with_params_by_name(glr_name);
+	g_check_inttype("%d", HParserBackend, be_w_p->backend, ==, PB_GLR);
+	g_check_maybe_string_eq(be_w_p->name, glr_name);
+
+    be_w_p = h_get_backend_with_params_by_name("glr(1)");
+    printf("%d be enum val \n", be_w_p->backend);
+    g_check_inttype("%d", HParserBackend, be_w_p->backend, ==, PB_GLR);
+    printf("%s be name \n", be_w_p->name);
+    g_check_maybe_string_eq(be_w_p->name, glr_name);
+    printf("%s raw params string \n", be_w_p->raw_params);
+    g_check_maybe_string_eq(be_w_p->raw_params, "(1)");
+    printf("%p as void pointer \n", be_w_p->params);
+    g_check_cmp_size((uintptr_t)be_w_p->params, ==, 1);
+    printf("%zu param as uintptr_t \n", (uintptr_t)be_w_p->params);
+
+}
+
 void register_names_tests(void) {
   g_test_add_func("/core/names/tt_backend_short_name", test_tt_backend_short_name);
   g_test_add_func("/core/names/tt_backend_description", test_tt_backend_description);
-}
+  g_test_add_func("/core/names/tt_query_backend_by_name", test_tt_query_backend_by_name);
+ }