diff --git a/xbanalysis/model/fbc_gene_product.py b/xbanalysis/model/fbc_gene_product.py
index efd547704b0f24e93b972cd059221cafac9b9614..2551c33eda299145c215bf22e9473020e2ad2277 100644
--- a/xbanalysis/model/fbc_gene_product.py
+++ b/xbanalysis/model/fbc_gene_product.py
@@ -8,5 +8,8 @@ class FbcGeneProduct:
 
     def __init__(self, s_fbc_gene_product):
         self.id = s_fbc_gene_product.name
-        self.name = s_fbc_gene_product.get('name', '')
+        if ('name' in s_fbc_gene_product) and (type(s_fbc_gene_product['name']) == str):
+            self.name = s_fbc_gene_product['name']
+        else:
+            self.name = self.id
         self.label = s_fbc_gene_product['label']
diff --git a/xbanalysis/model/fbc_objective.py b/xbanalysis/model/fbc_objective.py
index 4db5d45c8f4918c9ce01f69dd7b053ac60c57bc4..a0a8bd0d8b81b54eac6478ffb487cbf39910d113 100644
--- a/xbanalysis/model/fbc_objective.py
+++ b/xbanalysis/model/fbc_objective.py
@@ -10,10 +10,13 @@ class FbcObjective:
 
     def __init__(self, s_fbc_objective):
         self.id = s_fbc_objective.name
-        self.name = s_fbc_objective.get('name', '')
+        if ('name' in s_fbc_objective) and (type(s_fbc_objective['name']) == str):
+            self.name = s_fbc_objective['name']
+        else:
+            self.name = self.id
         self.direction = s_fbc_objective['type']
         self.active = s_fbc_objective['active']
-        self.coefficiants = {}
+        self.coefficients = {}
         for reac_ref in sbmlxdf.record_generator(s_fbc_objective['fluxObjectives']):
             params = sbmlxdf.extract_params(reac_ref)
-            self.coefficiants[params['reac']] = float(params['coef'])
+            self.coefficients[params['reac']] = float(params['coef'])
diff --git a/xbanalysis/model/xba_compartment.py b/xbanalysis/model/xba_compartment.py
index d243910390f842acb803df27ad14c07e5be9896e..6fabc0e718a91bb182d2122c54bf8dc26ee75db4 100644
--- a/xbanalysis/model/xba_compartment.py
+++ b/xbanalysis/model/xba_compartment.py
@@ -13,6 +13,10 @@ class XbaCompartment:
 
     def __init__(self, s_compartment):
         self.id = s_compartment.name
+        if ('name' in s_compartment) and (type(s_compartment['name']) == str):
+            self.name = s_compartment['name']
+        else:
+            self.name = self.id
         self.name = s_compartment.get('name', self.id)
         if 'size' in s_compartment:
             self.size = s_compartment['size']
diff --git a/xbanalysis/model/xba_function.py b/xbanalysis/model/xba_function.py
index 950bea166abd45635b76c06676256a3f7a8d208d..ba93f1f3a5b93929a0a0d8284af421430a1a430d 100644
--- a/xbanalysis/model/xba_function.py
+++ b/xbanalysis/model/xba_function.py
@@ -11,6 +11,10 @@ class XbaFunction:
 
     def __init__(self, s_function):
         self.id = s_function.name
+        if ('name' in s_function) and (type(s_function['name']) == str):
+            self.name = s_function['name']
+        else:
+            self.name = self.id
         self.name = s_function.get('name', self.id)
         self.math = s_function['math']
 
diff --git a/xbanalysis/model/xba_model.py b/xbanalysis/model/xba_model.py
index f4b3c5441114537d3cf198dbdc45d4f32fc3c601..f065b9c2d7ef7c30d1cce6301c4ca2cd5c150afe 100644
--- a/xbanalysis/model/xba_model.py
+++ b/xbanalysis/model/xba_model.py
@@ -33,18 +33,18 @@ class XbaModel:
             print(f'{sbml_file} seems not to be a valid SBML model')
             return
         model_dict = sbml_model.to_df()
+        self.id = model_dict['modelAttrs'].id
+        self.name = model_dict['modelAttrs'].get('name', self.id)
         self.unit_defs = {udid: XbaUnitDef(row)
                           for udid, row in model_dict['unitDefs'].iterrows()}
         self.compartments = {cid: XbaCompartment(row)
                              for cid, row in model_dict['compartments'].iterrows()}
         self.parameters = {pid: XbaParameter(row)
                            for pid, row in model_dict['parameters'].iterrows()}
+        self.functions = {}
         if 'funcDefs' in model_dict:
             self.functions = {fid: XbaFunction(row)
                               for fid, row in model_dict['funcDefs'].iterrows()}
-        else:
-            self.functions = {}
-
         self.species = {sid: XbaSpecies(row)
                         for sid, row in model_dict['species'].iterrows()}
         self.reactions = {rid: XbaReaction(row, self.species, self.functions, self.compartments)
diff --git a/xbanalysis/model/xba_parameter.py b/xbanalysis/model/xba_parameter.py
index b86a0c38fc2d8932c164cad181a636a1a0075475..b73c077fed3c372949c475b8638b0fb36cfe8e30 100644
--- a/xbanalysis/model/xba_parameter.py
+++ b/xbanalysis/model/xba_parameter.py
@@ -9,7 +9,10 @@ class XbaParameter:
 
     def __init__(self, s_parameter):
         self.id = s_parameter.name
-        self.name = s_parameter.get('name', self.id)
+        if ('name' in s_parameter) and (type(s_parameter['name']) == str):
+            self.name = s_parameter['name']
+        else:
+            self.name = self.id
         self.value = s_parameter['value']
         self.constant = s_parameter['constant']
         self.units = s_parameter['units']
diff --git a/xbanalysis/model/xba_reaction.py b/xbanalysis/model/xba_reaction.py
index 619520b1e09a0f3dafddf5e6bb5d2c90267b0d95..20cb42cade069cca7127560ae0e79c64f8faac06 100644
--- a/xbanalysis/model/xba_reaction.py
+++ b/xbanalysis/model/xba_reaction.py
@@ -14,7 +14,10 @@ class XbaReaction:
 
     def __init__(self, s_reaction, species, functions, compartments):
         self.id = s_reaction.name
-        self.name = s_reaction.get('name', self.id)
+        if ('name' in s_reaction) and (type(s_reaction['name']) == str):
+            self.name = s_reaction['name']
+        else:
+            self.name = self.id
         if ('sboterm' in s_reaction) and (type(s_reaction['sboterm']) is str):
             self.sboterm = SboTerm(s_reaction['sboterm'])
         self.reaction_string = s_reaction['reactionString']
diff --git a/xbanalysis/model/xba_species.py b/xbanalysis/model/xba_species.py
index 71706e7cd7f43d3da3d8dd9201a765ce19fe7f34..f8f9449eb626275a111f3af7390c6f05e864091a 100644
--- a/xbanalysis/model/xba_species.py
+++ b/xbanalysis/model/xba_species.py
@@ -12,7 +12,10 @@ class XbaSpecies:
 
     def __init__(self, s_species):
         self.id = s_species.name
-        self.name = s_species.get('name', self.id)
+        if ('name' in s_species) and (type(s_species['name']) == str):
+            self.name = s_species['name']
+        else:
+            self.name = self.id
         # set sboterm to 000247 to support Flux Balance Analysis
         self.sboterm = SboTerm(s_species.get('sboterm', 'SBO:0000247'))
         self.compartment = s_species['compartment']
@@ -20,8 +23,12 @@ class XbaSpecies:
         self.boundary = s_species['boundaryCondition']
         if 'initialConcentration' in s_species:
             self.initial_conc = s_species['initialConcentration']
-        if 'units' in s_species:
+        if 'substanceUnits' in s_species:
             self.units = s_species['substanceUnits']
+        if 'fbcCharge' in s_species:
+            self.charge = s_species['fbcCharge']
+        if 'fbcChemicalFormula' in s_species:
+            self.formula = s_species['fbcChemicalFormula']
         if 'xmlAnnotation' in s_species:
             attrs = sbmlxdf.extract_xml_attrs(s_species['xmlAnnotation'], ns=xml_gba_ns, token='molecule')
             if 'weight_Da' in attrs:
diff --git a/xbanalysis/model/xba_unit_def.py b/xbanalysis/model/xba_unit_def.py
index 5cd13264b0ddc70d79a89a86231c4b4b69926dda..72a118006cb59fc9138940a4dd408b1688fa654e 100644
--- a/xbanalysis/model/xba_unit_def.py
+++ b/xbanalysis/model/xba_unit_def.py
@@ -11,7 +11,10 @@ class XbaUnitDef:
 
     def __init__(self, s_unit_def):
         self.id = s_unit_def.name
-        self.name = s_unit_def.get('name', self.id)
+        if ('name' in s_unit_def) and (type(s_unit_def['name']) == str):
+            self.name = s_unit_def['name']
+        else:
+            self.name = self.id
         self.units = [XbaUnit(sbmlxdf.extract_params(u))
                       for u in sbmlxdf.record_generator(s_unit_def['units'])]
 
diff --git a/xbanalysis/problems/fba_problem.py b/xbanalysis/problems/fba_problem.py
index bebc68bf899fad87c14fbe219fd8a5611a7b93db..7c328c610cf8386e1f28129e4d33bc903d2f9942 100644
--- a/xbanalysis/problems/fba_problem.py
+++ b/xbanalysis/problems/fba_problem.py
@@ -1,3 +1,7 @@
+"""Implementation of FbaProblem Class.
+
+Peter Schubert, HHU Duesseldorf, September 2022
+"""
 import numpy as np
 import math
 from scipy import sparse
@@ -70,7 +74,7 @@ class FbaProblem:
             if fbc_obj.active is True:
                 # self.obj_id = fbc_obj.id
                 self.obj_dir = fbc_obj.direction
-                self.objective = fbc_obj.coefficiants
+                self.objective = fbc_obj.coefficients
                 break
 
         # lp problem will only be created once required.