diff --git a/student-distrib/paging.c b/student-distrib/paging.c
index de330a322808d157f9e48990d4763a2598310cb9..d451d094cb2fd9e74e6aeec4e779ae858d6d5f27 100644
--- a/student-distrib/paging.c
+++ b/student-distrib/paging.c
@@ -22,7 +22,7 @@ void paging_initi(void){
     }
 
     /* First page table entry need to be 0 */
-    page_table[0] = 0x0;
+    // page_table[0] = 0x0;
 
     /* Set page table for video memory */
     page_table[VIDEO_MEM + 0] |= USER | PRESENT;
@@ -80,18 +80,22 @@ void remap2(int32_t term_id){
  * Return Value: void
  * Function: Initialises page for video memory
  */
-uint8_t* remap_vidmem(uint32_t pid){
+void remap_vidmem(){
     
-    int32_t addr = VIDEO_MEM + pid * 4 + 3; //3 = offset for multiple terminals
+    page_directory[33] = (uint32_t)(uint32_t)page_table | USER | READ_WRITE | PRESENT;
 
-    page_table[addr] = VIDEO_ADDR | USER | READ_WRITE | PRESENT;
+    if(visible_terminal == running_terminal)
+
+        page_table[0] = ((uint32_t)0xB8000) | USER | READ_WRITE | PRESENT;
 
-    page_directory[0] = ((uint32_t)page_table) | USER | READ_WRITE | PRESENT;
+    else
+
+        page_table[0] = ((uint32_t)(0xB8000 + (running_terminal+1)*0x1000 )) | USER | READ_WRITE | PRESENT;
 
     // flush TLB
 	flush_tlb();
 
-    return (uint8_t*)(addr << 12);
+    return;
 }
 
 /* remap_program
diff --git a/student-distrib/paging.h b/student-distrib/paging.h
index 3bae8d9ed19b08f59e2290e7e9ed2f66cc89a716..8db45b5ef9ba012d2817d45e9f81eb20994a4369 100644
--- a/student-distrib/paging.h
+++ b/student-distrib/paging.h
@@ -62,7 +62,7 @@ extern void remap1(int32_t term_id);
 extern void remap2(int32_t term_id);
 
 
-extern uint8_t* remap_vidmem(uint32_t pid);
+extern void remap_vidmem();
 extern int32_t remap_proc(int32_t pid);
 extern void remap_program(uint32_t pid);
 extern void remap_term(int32_t term_id);
diff --git a/student-distrib/scheduler.c b/student-distrib/scheduler.c
index e642ad33ebf518931830be12d1688bab43c50bbb..23ad1dce5c7aa30720f14e2e37d7c34b3dee735a 100644
--- a/student-distrib/scheduler.c
+++ b/student-distrib/scheduler.c
@@ -52,6 +52,7 @@ void scheduler(void){
         return;
     }
 
+    remap_vidmem();
     remap2(running_terminal);
 
     pcb_t* next_pcb = terminal[running_terminal].pcb;
diff --git a/student-distrib/syscall.c b/student-distrib/syscall.c
index 778005ab055d42c62c28556c697a80b13b68d93d..82e01b04abce0d913f4576c40ce89f5df756d9d2 100644
--- a/student-distrib/syscall.c
+++ b/student-distrib/syscall.c
@@ -98,7 +98,7 @@ int32_t  execute(const uint8_t* command){
         return 0;
 
     printf("[EXE] running_terminal = %d\n", running_terminal);
-    printf("[EXE] strlen(command) = %d\n", strlen(command));
+    printf("[EXE] (command) = %s\n", command);
 
     // if cpu reaches its maximum control, abort
     if( total_prog_count >= MAX_PROCESS)
@@ -485,15 +485,14 @@ int32_t vidmap (uint8_t** screen_start){
     if ( addr < VID_STA || addr > VID_END)
         return -1;
 
-     terminal[ visible_terminal].pcb = current_pcb();
+    remap_vidmem();
 
-    *screen_start = remap_vidmem( terminal[ visible_terminal].pcb->pid);
+    *screen_start = (uint8_t *)(0x8400000);
 
     //screen_start =  terminal[ running_terminal].vid_mem;
 
-    flush_tlb();
 
-    return 0;
+    return 0x8400000;
 }
 
 /*
diff --git a/student-distrib/syscall.h b/student-distrib/syscall.h
index 940f1b702250b7b24251dc2a3825565385b52a09..206269693e9a2fc43859d71fe96eb87590d7c8d8 100644
--- a/student-distrib/syscall.h
+++ b/student-distrib/syscall.h
@@ -37,7 +37,7 @@ extern int32_t sigreturn (void);
 //from paging.h
 void     flush_tlb(void);
 void     remap_program(uint32_t pid);
-uint8_t* remap_vidmem(uint32_t pid);
+//uint8_t* remap_vidmem(uint32_t pid);
 
 //from proc.h
 int32_t  parse_cmd(const uint8_t* command, uint8_t* cmd, uint8_t (*argv)[MAX_ARGUMENT_SIZE]); /* Function for parsing commands */