Index: kernel/generic/src/console/cmd.c
===================================================================
--- kernel/generic/src/console/cmd.c	(revision e535eeb8ca65f325690f9d79d60ea2f3c9e9da35)
+++ kernel/generic/src/console/cmd.c	(revision 1624aae856f80d18d27a0bc580a4428f2df511cb)
@@ -837,21 +837,24 @@
 	bool pointer = false;
 	int rc;
-
-	if (((char *)argv->buffer)[0] == '*') {
+	
+	if (((char *) argv->buffer)[0] == '*') {
 		rc = symtab_addr_lookup((char *) argv->buffer + 1, &addr);
 		pointer = true;
-	} else if (((char *) argv->buffer)[0] >= '0' && 
-		   ((char *)argv->buffer)[0] <= '9') {
-		rc = EOK;
-		addr = atoi((char *)argv->buffer);
-	} else {
+	} else if (((char *) argv->buffer)[0] >= '0' &&
+		   ((char *) argv->buffer)[0] <= '9') {
+		uint64_t value;
+		rc = str_uint64((char *) argv->buffer, NULL, 0, true, &value);
+		if (rc == EOK)
+			addr = (uintptr_t) value;
+	} else
 		rc = symtab_addr_lookup((char *) argv->buffer, &addr);
-	}
-
+	
 	if (rc == ENOENT)
 		printf("Symbol %s not found.\n", argv->buffer);
+	else if (rc == EINVAL)
+		printf("Invalid address.\n");
 	else if (rc == EOVERFLOW) {
 		symtab_print_search((char *) argv->buffer);
-		printf("Duplicate symbol, be more specific.\n");
+		printf("Duplicate symbol (be more specific) or address overflow.\n");
 	} else if (rc == EOK) {
 		if (pointer)
@@ -859,7 +862,6 @@
 		printf("Writing %#" PRIx64 " -> %p\n", arg1, addr);
 		*(uint32_t *) addr = arg1;
-	} else {
+	} else
 		printf("No symbol information available.\n");
-	}
 	
 	return 1;
Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision e535eeb8ca65f325690f9d79d60ea2f3c9e9da35)
+++ kernel/generic/src/console/kconsole.c	(revision 1624aae856f80d18d27a0bc580a4428f2df511cb)
@@ -455,17 +455,36 @@
 			printf("No symbol information available.\n");
 			return false;
-		}
-		
-		if (isaddr)
-			*result = (unative_t) symaddr;
-		else if (isptr)
-			*result = **((unative_t **) symaddr);
-		else
-			*result = *((unative_t *) symaddr);
+		case EOK:
+			if (isaddr)
+				*result = (unative_t) symaddr;
+			else if (isptr)
+				*result = **((unative_t **) symaddr);
+			else
+				*result = *((unative_t *) symaddr);
+			break;
+		default:
+			printf("Unknown error.\n");
+			return false;
+		}
 	} else {
 		/* It's a number - convert it */
-		*result = atoi(text);
-		if (isptr)
-			*result = *((unative_t *) *result);
+		uint64_t value;
+		int rc = str_uint64(text, NULL, 0, true, &value);
+		switch (rc) {
+		case EINVAL:
+			printf("Invalid number.\n");
+			return false;
+		case EOVERFLOW:
+			printf("Integer overflow.\n");
+			return false;
+		case EOK:
+			*result = (unative_t) value;
+			if (isptr)
+				*result = *((unative_t *) *result);
+			break;
+		default:
+			printf("Unknown error.\n");
+			return false;
+		}
 	}
 	
