diff --git a/modules/io/src/mol/sdf_reader.cc b/modules/io/src/mol/sdf_reader.cc
index f402fc3c0b0d1cd96c4469252666715e746e930d..c8394ab77f00bd7f4b0596e8804775c7698fd00f 100644
--- a/modules/io/src/mol/sdf_reader.cc
+++ b/modules/io/src/mol/sdf_reader.cc
@@ -199,6 +199,8 @@ void SDFReader::ParseAndAddAtom(const String& line, int line_num,
   }
 
   String ele=boost::trim_copy(s_ele);
+  String upper_ele=ele;
+  std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper);
   String aname=boost::lexical_cast<String>(anum);
   
   Real charge=0.0;  
@@ -215,7 +217,7 @@ void SDFReader::ParseAndAddAtom(const String& line, int line_num,
 
   LOG_DEBUG("adding atom " << aname << " (" << s_ele << ") @" << apos);
 
-  mol::AtomHandle atom=editor.InsertAtom(curr_residue_, aname,apos, ele);  
+  mol::AtomHandle atom=editor.InsertAtom(curr_residue_, aname, apos, upper_ele);
   atom.SetHetAtom(hetatm);
   atom.SetCharge(charge);
 }
diff --git a/modules/io/tests/test_io_sdf.cc b/modules/io/tests/test_io_sdf.cc
index 0dcbf5fd688dd876ccb3df8335053b42492de7b9..df84041b0f47b79b8b19cdf865b1543f05666ce0 100644
--- a/modules/io/tests/test_io_sdf.cc
+++ b/modules/io/tests/test_io_sdf.cc
@@ -68,7 +68,7 @@ BOOST_AUTO_TEST_CASE(simple_sdf)
   mol::AtomHandle ah2=eh.GetAtomList()[5];
 
   BOOST_CHECK_EQUAL(ah.GetElement(),  "N");
-  BOOST_CHECK_EQUAL(ah2.GetElement(), "Cl");
+  BOOST_CHECK_EQUAL(ah2.GetElement(), "CL");
   BOOST_CHECK_CLOSE(ah.GetRadius(),  Real(1.55), Real(1e-2));
   BOOST_CHECK_CLOSE(ah2.GetRadius(), Real(1.75), Real(1e-2));
   BOOST_CHECK_CLOSE(ah.GetMass(),  Real(14.007), Real(1e-4));
diff --git a/modules/mol/alg/pymod/ligand_scoring.py b/modules/mol/alg/pymod/ligand_scoring.py
index ff0fbfb78d5fd1583d0f4a298ee8efc7f4e822ba..d03caf265ca819cf49c5cf22ea1b144fd0a38371 100644
--- a/modules/mol/alg/pymod/ligand_scoring.py
+++ b/modules/mol/alg/pymod/ligand_scoring.py
@@ -738,12 +738,12 @@ def _ResidueToGraph(residue, by_atom_index=False):
     :type by_atom_index: :class:`bool`
     :rtype: :class:`~networkx.classes.graph.Graph`
 
-    Nodes are labeled with the Atom's lowercase :attr:`~ost.mol.AtomHandle.element`.
+    Nodes are labeled with the Atom's uppercase :attr:`~ost.mol.AtomHandle.element`.
     """
     nxg = networkx.Graph()
 
     for atom in residue.atoms:
-        nxg.add_node(atom.name, element=atom.element.lower())
+        nxg.add_node(atom.name, element=atom.element.upper())
 
     # This will list all edges twice - once for every atom of the pair.
     # But as of NetworkX 3.0 adding the same edge twice has no effect, so we're good.
diff --git a/modules/mol/base/doc/editors.rst b/modules/mol/base/doc/editors.rst
index 6205ba44bb7556e3de5bc2fc6dbcc2161e1dfa5b..71577df3659a187de0de1d57683cf155a16ceb86 100644
--- a/modules/mol/base/doc/editors.rst
+++ b/modules/mol/base/doc/editors.rst
@@ -118,7 +118,9 @@ The basic functionality of editors is implemented in the EditorBase class.
   .. method:: InsertAtom(residue, atom_name, pos, element="", occupancy=1.0, \
                          b_factor=0.0, is_hetatm=False)
   
-    Insert new atom and add it to residue. For atoms with alternative atom locations use :meth:`InsertAltAtom`. If the element parameter is a valid 
+    Insert new atom and add it to residue. By convention, this should be the
+    chemical symbol in upper case. For atoms with alternative atom locations
+    use :meth:`InsertAltAtom`. If the element parameter is a valid
     element, the atom properties mass, charge, and radius are set to default 
     values for that element. If element is an empty string (or an invalid 
     element), the properties are set to rather meaningless default values. You 
diff --git a/modules/mol/base/doc/entity.rst b/modules/mol/base/doc/entity.rst
index 1cd9ce38812e0ff0c0b2daaa063a2192ce9928e4..5e778d670030a26e19533f4a679c5fbcde9cd2d3 100644
--- a/modules/mol/base/doc/entity.rst
+++ b/modules/mol/base/doc/entity.rst
@@ -908,8 +908,10 @@ The Handle Classes
      
   .. attribute:: element
   
-    The atom's element. Note that this may return an empty string. Also 
-    available as :meth:`GetElement`. Read-only.
+    The atom's element. By convention in Openstructure, this is the chemical
+    symbol in uppercase, but this is not strictly enforced and may be a non-
+    existing element or an empty string. Also available as :meth:`GetElement`.
+    Read-only.
     
     :type: str