diff --git a/offline/debugging/rbsm_console.py b/offline/debugging/rbsm_console.py
index 24588a70..f7101b26 100755
--- a/offline/debugging/rbsm_console.py
+++ b/offline/debugging/rbsm_console.py
@@ -29,28 +29,50 @@
 import signal
 signal.signal(signal.SIGINT, signal.SIG_DFL)
 
-screenCopy = None
+screen_copy = None
 
 #Create a dictionary of message headers
-#TODO create it from ../../real_time/rbsm_config.txt
-mid_to_str = {
-    0: "ENC_TICKS_LAST",
-    1: "ENC_TICKS_RESET",
-    5: "ENC_RESET_REQUEST",
-    6: "ENC_RESET_CONFIRM",
-    17: "MEGA_TELEOP_BRAKE_COMMAND",
-    18: "MEGA_AUTON_BRAKE_COMMAND",
-    19: "MEGA_STEER_COMMAND",
-    20: "MEGA_STEER_ANGLE",
-    21: "MEGA_BRAKE_STATE",
-    22: "MEGA_AUTON_STATE" ,
-    23: "MEGA_BATTERY_LEVEL",
-    24: "MEGA_STEER_FEEDBACK",
-    30: "COMP_HASH",
-    253: "MEGA_TIMESTAMP",
-    254: "ERROR",
-    255: "DEVICE_ID"
-}
+# startOfValues is the comment before start of values for dict
+# takeout is what needs to be taken out from the beginning of the values in dict
+# if it is in the rbsm_config.txt file
+def create_bit_to_str(start_of_values, takeout=""):
+    dict = {}
+    settings_file = None
+    try:
+        settings_file = open("../../real_time/rbsm_config.txt")
+    except:
+        print("Error! Unable to find real_time/rbsm_headers.txt\n")
+        sys.exit(1)
+    # when the correct headers found
+    headers_found = False
+    # when to stop looking for headers
+    end_headers = False
+    # go through each line to find the message headers
+    for line_num, line in enumerate(settings_file):
+        # to give right name takes out RBSM_MID_ if that is at beginning cause "RBSM_MID_" unneeded
+        if(line[0:len(takeout)] == takeout):
+            line = line[len(takeout):]
+        # key is in the part after , and value is before
+        if(headers_found):
+            definition = line.split(", ")
+            # if there are not enough values or too many, then line is assumed to be
+            # end of the parts with message headers
+            if(len(definition)!=2):
+                end_headers = True
+                break
+            # sets the key to equal the message header
+            dict[int(definition[1])] = definition[0]
+        elif(line[0:len(start_of_values)+3]=="// " + start_of_values):
+            # the string that is found is what symbolizes when message headers begin on
+            # next line
+            headers_found = True
+        # when the headers end do not care about anything else so breaks
+        if(end_headers):
+            break
+    return dict
+
+mid_to_str = create_bit_to_str("RBSM Headers", "RBSM_MID_")
+eid_to_str = create_bit_to_str("Error Message Bits", "RBSM_EID_")
 
 def redraw(state):
     screen = state["screen"]
@@ -70,10 +92,33 @@ def redraw(state):
                                                                             message_cache[mid]["update_time"])
             screen.addstr(row_id, 2, s)
 
-            # with open('someshit.txt', 'at') as f:
-            #     f.write(s + "\n")
-
             row_id = row_id + 1
+    
+        #adding space and then error
+        screen.addstr(row_id, 2, "")
+        screen.addstr(row_id+1, 2, "--------ERRORS---------")
+        # since last steps went through 2 rows adding 2 to row_id
+        row_id = row_id + 2
+        # finds which value is error
+        error = 254
+        for key in mid_to_str.keys():
+            if(mid_to_str[key]=="ERROR"):
+                error = key
+        # check if key is even in message_cache
+        if(error in message_cache.keys()):
+            error_message = message_cache[error]["data"]
+            # max bit that has associated error
+            maxBit = max(eid_to_str.keys())
+            for bit in xrange(maxBit+1):
+                if(error_message%2==1 and bit in eid_to_str.keys()):
+                    wipeScreenAndPost(screen, eid_to_str[bit], row_id)
+                    row_id = row_id + 1
+                # can eliminate previous bit by diving by 2
+                error_message = error_message/2
+        # adding -- so that if there is nothing between error and this then no error
+        wipeScreenAndPost(screen, "------------------------", row_id)
+        # to make sure row below BottomLine clean:
+        wipeScreenAndPost(screen, "", row_id+1)
 
 
     # update status line
@@ -86,6 +131,10 @@ def redraw(state):
 
     screen.refresh()
 
+def wipeScreenAndPost(screen, str, pos):
+    # long empty space to wipe line clean
+    screen.addstr(pos, 2, "                                                       ")
+    screen.addstr(pos, 2, str)
 
 def rbsm_worker(state):
     message_cache = state["message_cache"]
@@ -152,8 +201,6 @@ def command_worker(state):
         # standard ascii characters
         elif(new_char < 128) and len(state["command_line"]) < INPUTUPPERBOUND:
             state["command_line"] += chr(new_char)
-            with open('someshit.txt', 'at') as f:
-                f.write(state["command_line"])
 
         # redraw(state)
 
diff --git a/real_time/rbsm_config.txt b/real_time/rbsm_config.txt
index f996f898..031eebca 100644
--- a/real_time/rbsm_config.txt
+++ b/real_time/rbsm_config.txt
@@ -1,4 +1,7 @@
-//
+// note for maintaining this file:
+// before each set of values and keys, put "// name of category"
+// example: "// RBSM Headers"
+// this format is required by offline/debugging/rbsm_console.py (l.74)
 
 // RBSM Headers
 RBSM_MID_ENC_TICKS_RESET, 1