diff --git a/student-distrib/keyboard.c b/student-distrib/keyboard.c
index 3047f6e86ca824ed9c8a4a7d39f31e2c7fd75604..17abc762995977052388473944325151a7685818 100644
--- a/student-distrib/keyboard.c
+++ b/student-distrib/keyboard.c
@@ -146,10 +146,10 @@ void KB_init(void) {
     // initialize modifier flags
 
      enter_flag[0] = enter_flag[1] = enter_flag[2] = 0;
+      ctrl_flag[0] =  ctrl_flag[1] =  ctrl_flag[2] = 0;
 
      caps_flag = 0;
      alt_flag = 0;
-     ctrl_flag = 0;
      shift_flag = 0;
 
     enable_irq(KB_IRQ);
@@ -298,13 +298,13 @@ void KB_handler(void) {
 
         case 0x1D : //ctrl pressed
 
-            ctrl_flag = 1;
+            ctrl_flag[visible_terminal] = 1;
             send_eoi(KB_IRQ);
             return;
 
         case 0x9D : //ctrl released
 
-            ctrl_flag = 0;
+            ctrl_flag[visible_terminal] = 0;
             send_eoi(KB_IRQ);
             return;
 
@@ -352,9 +352,10 @@ void KB_handler(void) {
 
     // 0x15 = scancode for L
     // check if ctrl-L is pressed
-    if(ctrl_flag && !shift_flag && pressed_key == 0x15)
+    if(ctrl_flag[visible_terminal] /*&& !shift_flag*/ && pressed_key == 0x15)
     {
-        clear();
+        //clear();
+        clear_memory();
         reset_cursor();
         send_eoi(KB_IRQ);
         return;
@@ -384,6 +385,7 @@ void KB_handler(void) {
     }
 
     page_table[0xB8] = ((uint32_t)0xB8000) | USER | READ_WRITE | PRESENT;
+    flush_tlb();
 
     //memcpy( (void*)TERM_VID, (const void*) terminal[visible_terminal].vid_mem, _4_KB );
 
diff --git a/student-distrib/keyboard.h b/student-distrib/keyboard.h
index 2679cec0680ac120a88bbe2586d182ca66cd92cb..3b658b33d2f0a39f401a746cb3cc1c61d3231a09 100644
--- a/student-distrib/keyboard.h
+++ b/student-distrib/keyboard.h
@@ -16,10 +16,10 @@
 #define ASCII_SIZE      51
 
 // keyboard modifier flags
-uint8_t caps_flag;
-uint8_t ctrl_flag;
-uint8_t shift_flag;
-uint8_t alt_flag;
+		 uint8_t caps_flag;
+		 uint8_t shift_flag;
+		 uint8_t alt_flag;
+         uint8_t ctrl_flag[3];
 volatile uint8_t enter_flag[3];
 
 /************************ KB driver functions ************************/
diff --git a/student-distrib/lib.c b/student-distrib/lib.c
index a30956f339443c31a7767db4339043f56eb6fcdf..325f335d821f627eeebec73b06a5fa09fc0dce71 100644
--- a/student-distrib/lib.c
+++ b/student-distrib/lib.c
@@ -17,9 +17,31 @@ static char* video_mem = (char *)VIDEO;
  * Function: Clears video memory */
 void clear(void) {
     int32_t i;
+
     for (i = 0; i < NUM_ROWS * NUM_COLS; i++) {
         *(uint8_t *)(video_mem + (i << 1)) = ' ';
-        *(uint8_t *)(video_mem + (i << 1) + 1) = ATTRIB;
+        *(uint8_t *)(video_mem + (i << 1) + 1) = ATTRIB;    
+    }
+}
+
+void clear_memory(void)
+{
+    int32_t i;
+    uint8_t * video_memory;
+
+    if(running_terminal == running_terminal)
+        video_memory = (uint8_t *) video_mem;
+    else
+        video_memory = (uint8_t *) terminal[visible_terminal].vid_mem;
+
+    for (i = 0; i < NUM_ROWS * NUM_COLS; i++) {
+        *(uint8_t *)(video_memory + (i << 1)) = ' ';
+        *(uint8_t *)(video_memory + (i << 1) + 1) = ATTRIB;    
+    }
+
+    for (i = 0; i < NUM_ROWS * NUM_COLS; i++) {
+        *(uint8_t *)(terminal[visible_terminal].vid_mem + (i << 1)) = ' ';
+        *(uint8_t *)(terminal[visible_terminal].vid_mem + (i << 1) + 1) = ATTRIB;
     }
 }
 
diff --git a/student-distrib/lib.h b/student-distrib/lib.h
index 98e587c77bf4bc26fc30f9ecac3f9d80d4089910..d22f01ad8d267846c21635bfc90d8dc53e5fc44a 100644
--- a/student-distrib/lib.h
+++ b/student-distrib/lib.h
@@ -15,6 +15,7 @@ int8_t *itoa(uint32_t value, int8_t* buf, int32_t radix);
 int8_t *strrev(int8_t* s);
 uint32_t strlen(const int8_t* s);
 void clear(void);
+void clear_memory(void);
 void reset_cursor(void);
 void update_cursor(int32_t term_id);
 int32_t get_screen_x(void);