diff --git a/as/as.c b/as/as.c
index 36d9637..5f0a001 100644
--- a/as/as.c
+++ b/as/as.c
@@ -60,14 +60,16 @@
 
 bool is_ident(char c)
 {
-	return c && (isalpha(c) || isdigit(c));
+	return c && (isalpha(c) || isdigit(c)
+				 || c == '_' || c == '-'
+				 || c == '$' || c == '.');
 }
 
 uint32_t skip_ws(char **code)
 {
 	uint32_t len = 0;
 
-	for (; isspace(**code); (*code)++, len++)
+	for (; **code == ' ' || **code == '\t'; (*code)++, len++)
 	{}
 
 	return len;
@@ -108,7 +110,7 @@
 
 	skip_ws(code);
 
-	if (**code == ':')
+	if (*code != start && **code == ':')
 	{
 		**code = 0;
 		(*code)++;
@@ -127,12 +129,19 @@
 	for (; isalpha(**code); (*code)++)
 	{}
 
-	**code = 0;
-
 	if (start == *code)
 		return NULL;
 
-	(*code)++;
+	// If code is incremented when it points to \0, it will wrap to the next line
+	// returned by strtok(), which causes a bug where instructions followed immediately
+	// by a newline and no arguments causes the next instruction to parse the entire
+	// program as its argument (not good)
+	if (**code)
+	{
+		**code = 0;
+		(*code)++;
+	}
+
 	return start;
 }
 
@@ -140,7 +149,6 @@
 {
 	return c == ';' ||
 		c == '\n' ||
-		c == '\r' ||
 		c == '\0';
 }
 
@@ -388,16 +396,26 @@
 	{
 		skip_ws(&line);
 
-		printf("\033[36m%.9s\033[0m\n", line);
+		printf("line: \033[36m%.12s\033[0m  ", line);
 		
-		char *label = parse_label(&line),
-			*mn = parse_inst(&line);
+		char *label = parse_label(&line);
+		char *mn = parse_inst(&line);
+		printf(" skipping %d ", skip_ws(&line));
+		//printf("\033[33m%s\033[0m\n", line);
+		
+		bool no_argument = false;
+		printf("eol is %c ($%x)\n", *line, *line);
+		if (is_eol(*line))
+		{
+			no_argument = true;
+			printf("... no argument\n");
+		}
 		int32_t mnemonic = -1;
 
 		if (label)
 		{
 			map_set(labels, label, (void *)pc);
-			printf("Set label %s at %lu\n", label, pc);
+			printf("Set label %s at $%lx\n", label, pc);
 		}
 
 		if (mn)
@@ -416,12 +434,13 @@
 			inst_t arg;
 			// printf("Parsing '%s'\n", line);
 #define INST(_mn, am, op, len) \
-			if (mnemonic == _mn && parse_arg(line, am, &arg)) \
-			{												  \
-				arg.opcode = op;							  \
-				pc += len;									  \
-				print_inst(&arg);							  \
-			}												  \
+			if ((no_argument && (_mn == AM_IMP || _mn == AM_ACC))		\
+				 || (mnemonic == _mn && parse_arg(line, am, &arg)))		\
+			{															\
+				arg.opcode = op;										\
+				pc += len;												\
+				print_inst(&arg);										\
+			}															\
 			else
 
 			INSTRUCTIONS
diff --git a/as/test/test.s b/as/test/test.s
index edca24a..66ca095 100644
--- a/as/test/test.s
+++ b/as/test/test.s
@@ -1,5 +1,22 @@
+;;; This file is meant to test the parsing capabilities of the assembler.
+;;; It should contain every address mode to its parsing, as well as a
+;;; range of instructions to test.
+
+;;; When the assembler supports macros, those will be tested here as well.
+
 start:
 	lda #$32 					; Store $32 in a
 	tax							; Transfer a to x
 	stx $200					; Store x at $200
 	jmp ($FFAA)					; Jump to the address at $FFAA
+second_label:
+	lda $30, X
+	inc
+	adc #$3
+	bne start
+	jsr another_subroutine
+	tax
+	hlt
+
+another_subroutine:
+	ret
