diff --git a/Makefile b/Makefile
index bc20fe7..c24381a 100644
--- a/Makefile
+++ b/Makefile
@@ -167,6 +167,7 @@ filesystem/bin/%: crates/coreutils/src/bin/%.rs $(BUILD)/crt0.o $(BUILD)/libcore
 coreutils: \
 	filesystem/bin/basename \
 	filesystem/bin/cat \
+	filesystem/bin/clear \
 	filesystem/bin/cp \
 	filesystem/bin/du \
 	filesystem/bin/echo \
@@ -178,6 +179,7 @@ coreutils: \
 	filesystem/bin/ps \
 	filesystem/bin/pwd \
 	filesystem/bin/realpath \
+	filesystem/bin/reset \
 	filesystem/bin/rm \
 	filesystem/bin/rmdir \
 	filesystem/bin/seq \
@@ -242,7 +244,6 @@ filesystem/bin/launcher: crates/orbutils/src/launcher/main.rs crates/orbutils/sr
 	mkdir -p filesystem/bin
 	$(RUSTC) $(RUSTCFLAGS) --crate-type bin -o $@ $<
 
-
 bins: \
 	coreutils \
 	extrautils \
@@ -255,6 +256,7 @@ bins: \
   	filesystem/bin/ion \
 	filesystem/bin/launcher \
   	filesystem/bin/lua \
+  	filesystem/bin/luac \
   	filesystem/bin/login \
   	filesystem/bin/orbital \
 	filesystem/bin/std-test \
diff --git a/crates/coreutils b/crates/coreutils
index 19f100a..0b43f85 160000
--- a/crates/coreutils
+++ b/crates/coreutils
@@ -1 +1 @@
-Subproject commit 19f100aa7e4b1cf7a163a6b1349d98a68afdf386
+Subproject commit 0b43f851999a316c2f78980ff101ee9fab36b992
diff --git a/crates/extrautils b/crates/extrautils
index 422978f..f93cf59 160000
--- a/crates/extrautils
+++ b/crates/extrautils
@@ -1 +1 @@
-Subproject commit 422978f7a4c5d2ddf2ac3a2c4812c8835a42abd9
+Subproject commit f93cf59d3f7941b924fab36815cb37b2254e2d21
diff --git a/crates/orbutils b/crates/orbutils
index edc26ab..f04ee3b 160000
--- a/crates/orbutils
+++ b/crates/orbutils
@@ -1 +1 @@
-Subproject commit edc26ab40c4cdfbbf07cb57279dc43e5bbfa5f8e
+Subproject commit f04ee3b4a4e28299787f0516f0dc071ec89694fe
diff --git a/kernel/env/console.rs b/kernel/env/console.rs
index 0175091..c3ef32f 100644
--- a/kernel/env/console.rs
+++ b/kernel/env/console.rs
@@ -5,7 +5,7 @@ use collections::Vec;
 
 use common::event::{self, Event, EventOption};
 
-use core::mem;
+use core::{cmp, mem};
 
 use drivers::io::{Io, Pio};
 
@@ -128,11 +128,11 @@ impl Console {
                         display.rect(self.point_x, self.point_y, 8, 16, self.background);
                     }
 
-                    let row = self.sequence.get(0).map_or("", |p| &p).parse::<usize>().unwrap_or(0);
-                    self.point_y = row * 16;
+                    let row = self.sequence.get(0).map_or("", |p| &p).parse::<isize>().unwrap_or(1);
+                    self.point_y = cmp::max(0, row - 1) as usize * 16;
 
-                    let col = self.sequence.get(1).map_or("", |p| &p).parse::<usize>().unwrap_or(0);
-                    self.point_x = col * 8;
+                    let col = self.sequence.get(1).map_or("", |p| &p).parse::<isize>().unwrap_or(1);
+                    self.point_x = cmp::max(0, col - 1) as usize * 8;
 
                     if let Some(ref mut display) = self.display {
                         display.rect(self.point_x, self.point_y, 8, 16, self.foreground);
@@ -158,10 +158,15 @@ RAW MODE
         - stdin is not buffered, meaning that the stream of bytes goes directly to the program, without the user having to press enter.
 @MANEND
 */
-                'r' => self.raw_mode = true,
-                'R' => self.raw_mode = false,
+                'r' => {
+                    self.raw_mode = true;
+                    self.escape_sequence = false;
+                },
+                'R' => {
+                    self.raw_mode = false;
+                    self.escape_sequence = false;
+                },
                 _ => self.escape_sequence = false,
-
             }
 
             if !self.escape_sequence {
@@ -240,7 +245,7 @@ RAW MODE
                 if key_event.pressed {
                     if self.raw_mode {
                         match key_event.scancode {
-                            event::K_BKSP => self.command.push_str("\x08 \x08"),
+                            event::K_BKSP => self.command.push_str("\x08"),
                             event::K_UP => self.command.push_str("\x1B[A"),
                             event::K_DOWN => self.command.push_str("\x1B[B"),
                             event::K_RIGHT => self.command.push_str("\x1B[C"),
diff --git a/libc b/libc
index 161e972..f0e8c9f 160000
--- a/libc
+++ b/libc
@@ -1 +1 @@
-Subproject commit 161e972b602589a0f5bf361f938d0756f32bb30b
+Subproject commit f0e8c9f2d7113632909813fd4c631fbca05bd047
