diff --git a/src/rdf-mappings/map-tblBranch.py b/src/rdf-mappings/map-tblBranch.py
index 143cdc06b8c7c63dd95f5c39f6968b350475d981..e91065c658d34794a05b3fa81bdd7d2e8ab1653c 100644
--- a/src/rdf-mappings/map-tblBranch.py
+++ b/src/rdf-mappings/map-tblBranch.py
@@ -211,6 +211,39 @@ def create_visual_link(source_node, target_node=None, direction='current_to_next
     else:
         return None
     
+def create_seme_charge(charge_number, layer_node, pattern_seme, tinct=None):
+    """
+    If seme is set, create a new charge as part of the current layer. This new charge has the dhoh:Arrangement dhoh:Seme and 
+    also has the dhoh:hasChargeNumber dhoh:Multiple.
+
+    :param charge: The charge string used to construct the pattern and property names.
+    :param charge_number: The charge number used for constructing property names.
+    :param layer_node: The layer node to link the seme charge.
+    :param pattern_seme: The specific seme column in OMA from which the new charge is to be created
+    :return: The number of semes added.
+    """
+
+    seme_charge_node = URIRef(dho_blazon_n + str(uuid.uuid4()))
+
+    seme_charge_type = create_owl_class_from_string(pattern_seme, sub_class_of=dho_n.Charge)
+    g.add((seme_charge_node, RDF.type, seme_charge_type))
+    g.add((seme_charge_node, RDF.type, OWL.NamedIndividual))
+
+    # Add seme properties
+    g.add((seme_charge_node, dho_n.hasArrangement, dho_n.Seme))
+    g.add((seme_charge_node, dho_n.hasChargeNumber, dho_n.Multiple))
+
+    # Add tincture if set
+    if tinct is not None:
+        add_tincture(seme_charge_node, tinct)
+
+    # Link new seme charge to layer
+    charge_property = URIRef(dho_n + 'hasCharge' + str(charge_number + 1))
+    g.add((charge_property, RDFS.subPropertyOf, dho_n.hasCharge))
+    g.add((layer_node, charge_property, seme_charge_node))
+
+    return 1  # Number of semes added
+    
 def add_layer(layer_number, layer_content, field_node, previous_layer_node=None, last_charge_from_previous_layer=None, next_layer_node=None):
     """
     Adds a new layer as well as all charges that are stored in this layer, if this layer
@@ -219,6 +252,27 @@ def add_layer(layer_number, layer_content, field_node, previous_layer_node=None,
     Returns the URI of the newly created layer.
     """
 
+    charge_number = 1
+    next_charge_node = None
+    # Indicates if additional charges are being added to the layer -> number is to be added to charge_number at the end
+    semes_added = 0
+
+    # Add seme from field; in case the layer is empty, but field_seme is not empty, we need to create a new layer node
+    if not pd.isnull(row['field_seme']) and pd.isnull(layer_content):
+        if next_layer_node is None:
+            layer_node = URIRef(dho_blazon_n + str(uuid.uuid4()))
+        else:
+            layer_node = next_layer_node
+        
+        next_layer_node = None
+
+        g.add((layer_node, RDF.type, dho_n.Layer))
+        g.add((layer_node, RDF.type, OWL.NamedIndividual))
+
+        semes_added += create_seme_charge(charge_number, layer_node, pattern_seme=row['field_seme'], tinct=row['field_seme_Tinct'])
+
+        return layer_node, None, next_layer_node
+
     if not pd.isnull(layer_content):
         if next_layer_node is None:
             layer_node = URIRef(dho_blazon_n + str(uuid.uuid4()))
@@ -231,8 +285,8 @@ def add_layer(layer_number, layer_content, field_node, previous_layer_node=None,
         g.add((layer_node, RDF.type, OWL.NamedIndividual))
         layer_charge_list = layer_content.split(', ')
 
-        charge_number = 1
-        next_charge_node = None
+        if not pd.isnull(row['field_seme']):
+            semes_added += create_seme_charge(charge_number, layer_node, pattern_seme=row['field_seme'], tinct=row['field_seme_Tinct'])
 
         for charge in layer_charge_list:
             if next_charge_node is None:
@@ -316,12 +370,10 @@ def add_layer(layer_number, layer_content, field_node, previous_layer_node=None,
 
             # Add seme
             if charge + '_pattern_seme' in df_tblBranch.columns and not pd.isnull(row[charge + '_pattern_seme']):
-                seme_type = create_owl_class_from_string(row[charge + '_pattern_seme'], sub_class_of=dho_n.Seme)
-                g.add((charge_node, dho_n.hasSeme, seme_type))
+                semes_added += create_seme_charge(charge_number, layer_node, pattern_seme=row[charge + '_pattern_seme'])
 
             if charge + '_pattern_seme2' in df_tblBranch.columns and not pd.isnull(row[charge + '_pattern_seme2']):
-                seme_type = create_owl_class_from_string(row[charge + '_pattern_seme2'], sub_class_of=dho_n.Seme)
-                g.add((charge_node, dho_n.hasSeme, seme_type))
+                semes_added += create_seme_charge(charge_number, layer_node, pattern_seme=row[charge + '_pattern_seme2'])
             
             # Add modifiers and arrangements to charge
             if charge + '_line' in df_tblBranch.columns and not pd.isnull(row[charge + '_line']):
@@ -376,6 +428,7 @@ def add_layer(layer_number, layer_content, field_node, previous_layer_node=None,
             g.add((charge_property, RDFS.subPropertyOf, dho_n.hasCharge))
             g.add((layer_node, charge_property, charge_node))
 
+            charge_number = charge_number + semes_added
             charge_number += 1
             previous_charge_node = charge_node
         
@@ -511,21 +564,6 @@ for index, row in df_tblBranch.iterrows():
     add_tincture(field_node, row['field_Tinct1'], tinct_order_place='1')
     add_tincture(field_node, row['field_Tinct2'], tinct_order_place='2')
     add_tincture(field_node, row['field_Tinct3'], tinct_order_place='3')
-
-    # Create seme for field
-    if not pd.isnull(row['field_seme']):
-        field_seme_node = URIRef(dho_blazon_n + str(uuid.uuid4()))
-        seme_pattern = create_owl_class_from_string(row['field_seme'], sub_class_of=dho_n.Seme)
-
-        g.add((field_seme_node, RDF.type, dho_n.Seme))
-        g.add((field_seme_node, RDF.type, OWL.NamedIndividual))
-        g.add((field_seme_node, dho_n.hasSeme, seme_pattern))
-        add_tincture(field_seme_node, row['field_seme_Tinct'])
-        # seme_tincture = create_owl_class_from_string(row['field_seme_Tinct'], sub_class_of=dho_n.Tincture)
-        # g.add((field_seme_node, dho_n.hasTincture, seme_tincture))
-
-        # Link seme to field
-        g.add((field_node, dho_n.hasSeme, field_seme_node))
     
     # Link to marshalled Arms
     if not pd.isnull(row['Qtrs']) and row['Qtrs'] != 1: