diff --git a/resources/simplex/simplex.py b/resources/simplex/simplex.py
index 3ff0e608b8bd49caf2036843538afd87c7f797d2..d5965e0cda5f320d21fc41798235fad671f7f25f 100644
--- a/resources/simplex/simplex.py
+++ b/resources/simplex/simplex.py
@@ -54,6 +54,7 @@ class Simplex():
         self._obj_constant_index = None
         self._basic_var_indexes = None
         self._nonbasic_var_indexes = None
+        self._description = None
 
     def read_data_from_json(self, json_file_location):
         logger.info('')
@@ -66,12 +67,16 @@ class Simplex():
                 json_data = json.load(json_file)
 
             logger.info('Read in JSON data: {0}'.format(json_data))
-            logger.info('')
+
+            try:
+                self._parse_json_data(json_data)
+            except (KeyError, TypeError, ValueError) as err:
+                logger.error('Invalid JSON data read in. {0}'.format(err))
 
         except FileNotFoundError:
             logger.info('Could not locate file at location "{0}".'.format(json_file_location))
 
-    def parse_json_data(self, json_data):
+    def _parse_json_data(self, json_data):
         """
         Attempts to parse passes JSON data into simplex format.
         :param json_data: JSON data to attempt to parse.
@@ -116,10 +121,25 @@ class Simplex():
         else:
             non_basic_vars = None
 
-        # Data has been parsed. Now attempt to set it.
-        self.set_simplex_values(matrix_a, vector_b, vector_c, basic_vars=basic_vars, non_basic_vars=non_basic_vars)
+        # Check if "description" key exists.
+        if 'description' in json_data:
+            description = json_data['description']
+        elif 'Description' in json_data:
+            description = json_data['Description']
+        else:
+            description = None
 
-    def set_simplex_values(self, matrix_a, vector_b, vector_c, basic_vars=None, non_basic_vars=None):
+        # Data has been parsed. Now attempt to set it.
+        self.set_simplex_values(
+            matrix_a,
+            vector_b,
+            vector_c,
+            basic_vars=basic_vars,
+            non_basic_vars=non_basic_vars,
+            description=description,
+        )
+
+    def set_simplex_values(self, matrix_a, vector_b, vector_c, basic_vars=None, non_basic_vars=None, description=None):
         """
         Sets values for simplex.
         :param matrix_a: Matrix of constraint equation coefficients.
@@ -127,6 +147,7 @@ class Simplex():
         :param vector_c: Vector of objective function coefficients.
         :param basic_vars: Optional array of basic variable column indexes.
         :param non_basic_vars: Optional array of non-basic variable column indexes.
+        :param description: Optional string to describe simplex.
         """
         # Reset all values to None.
         self._matrix_a = None
@@ -135,6 +156,7 @@ class Simplex():
         self._obj_constant_index = None
         self._basic_var_indexes = None
         self._nonbasic_var_indexes = None
+        self._description = None
 
         # Check that values are of expected types.
         if not isinstance(matrix_a, list) or not isinstance(vector_b, list) or not isinstance(vector_c, list):
@@ -192,10 +214,14 @@ class Simplex():
             else:
                 raise TypeError('The "non_basic_vars" argument is expected to be of type list.')
 
-        # Finally, determine/set basic and nonbasic variables.
+        # Determine/set basic and nonbasic variables.
         self._determine_basic_variables()
         self._determine_nonbasic_variables()
 
+        # Determine description.
+        if description is not None:
+            self._description = description
+
     def _determine_basic_variables(self):
         """
         Determines (and if needed, sets) all basic variables for given constraints.
@@ -303,8 +329,10 @@ class Simplex():
         logger.info('Printing Simplex Tableau.')
         logger.info('')
 
-        tableau_length = (len(self._obj_func) * 5) + 9
+        tableau_length = (len(self._obj_func) * 5) + 4
 
+        if self._description is not None:
+            logger.info('{0}'.format(self._description))
         logger.info('-' * tableau_length)
         for row_index in range(len(self._matrix_a)):
             print_string = '|'