diff --git a/Framework/Particles/ParticleClassNames.xml b/Framework/Particles/ParticleClassNames.xml
index 64b459798727a926bc50d0436a362b955178b56d..98772d67e38f568a91cf1dea6cc4dc91198e4bb4 100644
--- a/Framework/Particles/ParticleClassNames.xml
+++ b/Framework/Particles/ParticleClassNames.xml
@@ -9,5 +9,14 @@
   <particle id="-11" classname="Positron"> </particle>
   <particle id="22" classname="Gamma"> </particle>
 
+  <particle id="130" classname="K0Long"> </particle>
+  <particle id="310" classname="K0Short"> </particle>
+
+  <particle id="2112" classname="Neutron"> </particle>
+  <particle id="-2112" classname="AntiNeutron"> </particle>
+
+  <particle id="2212" classname="Proton"> </particle>
+  <particle id="-2212" classname="AntiProton"> </particle>
+
 </chapter>
 
diff --git a/Framework/Particles/ParticleData.xml b/Framework/Particles/ParticleData.xml
index e32cb637984b7407c3b409473ee1de17ad924a13..16e7878abe42147c0d2ec3a285465c975ecec93c 100644
--- a/Framework/Particles/ParticleData.xml
+++ b/Framework/Particles/ParticleData.xml
@@ -4716,14 +4716,15 @@
           m0="9.89860" mWidth="0.01000" mMin="9.85500" mMax="9.89500"> 
  <channel onMode="1" bRatio="1.0000000" meMode="91" products="21 21"/> 
 </particle> 
- 
+-->
+
 <particle id="13122" name="Lambda(1405)0" antiName="Lambda(1405)bar0" spinType="2" chargeType="0" colType="0" 
           m0="1.40510" mWidth="0.05000" mMin="1.32000" mMax="1.80000"> 
  <channel onMode="1" bRatio="0.3333000" products="3222 -211"/> 
  <channel onMode="1" bRatio="0.3333000" products="3112 211"/> 
  <channel onMode="1" bRatio="0.3334000" products="3212 111"/> 
 </particle> 
- 
+<!-- 
 <particle id="14122" name="Lambda_c(2593)+" antiName="Lambda_c(2593)-" spinType="2" chargeType="3" colType="0" 
           m0="2.59225" mWidth="0.00260" mMin="2.57000" mMax="2.63000"> 
  <channel onMode="1" bRatio="0.2400000" products="4222 -211"/> 
diff --git a/Framework/Particles/pdxml_reader.py b/Framework/Particles/pdxml_reader.py
index 494ae8fa5ff7db0a40727d93def9e2ff3c3b7d87..943a24a6862a3084e498f130e027b76cd68d3cb9 100755
--- a/Framework/Particles/pdxml_reader.py
+++ b/Framework/Particles/pdxml_reader.py
@@ -62,16 +62,16 @@ def class_names(filename):
 # 
 # Automatically produce a string qualifying as C++ class name
 # 
-            
+# This function produces names of type "DELTA_PLUS_PLUS"
+# 
 def c_identifier(name):
     orig = name
     name = name.upper()
-    for c in "() ":
+    for c in "() /":
         name = name.replace(c, "_")
     
     name = name.replace("BAR", "_BAR")
     name = name.replace("0", "_0")
-    name = name.replace("/", "_")
     name = name.replace("*", "_STAR")
     name = name.replace("'", "_PRIME")
     name = name.replace("+", "_PLUS")
@@ -91,6 +91,70 @@ def c_identifier(name):
         raise Exception("could not generate C identifier for '{:s}'".format(orig))
 
 
+##############################################################
+# 
+# Automatically produce a string qualifying as C++ class name
+# 
+# This function produces names of type "DeltaPlusPlus"
+# 
+def c_identifier_cammel(name):
+    orig = name
+    name = name[0].upper() + name[1:].lower() # all lower case
+#    name = "".join(c.upper() if i in indices else c for i, c in enumerate(s)) # first letter upper case
+    for c in "() /": # replace funny characters
+        name = name.replace(c, "_")
+    
+    name = name.replace("bar", "Bar")
+    name = name.replace("*", "Star")
+    name = name.replace("'", "Prime")
+    name = name.replace("+", "Plus")
+    name = name.replace("-", "Minus")
+
+    # move "Bar" to end of name
+    ibar = name.find('Bar')
+    if (ibar>0 and ibar<len(name)-3) :
+        name = name[:ibar] + name[ibar+3:] + str('Bar')
+    print (str(ibar) + " " + name + " " + str(len(name)))
+        
+            
+    # cleanup "_"s
+    while True:
+        tmp = name.replace("__", "_")
+        if tmp == name:
+            break
+        else:
+            name = tmp
+    name.strip("_")
+
+    # remove all "_", if this does not by accident concatenate two number
+    istart = 0
+    while True:
+        i = name.find('_', istart)
+        if (i<1 or i>len(name)-1):
+            break
+        istart = i
+        if (name[i-1].isdigit() and name[i+1].isdigit()):
+            # there is a number on both sides
+            break
+        name = name[:i] + name[i+1:]
+        # and last, for example: make NuE out of Nue
+        if (name[i-1].islower() and name[i].islower()) :
+            if (i<len(name)-1) :
+                name = name[:i] + name[i].upper() + name[i+1:]
+            else :
+                name = name[:i] + name[i].upper()
+
+
+    print ("generate C identifier for '{:s}' name='{:s}'".format(orig, name))
+    
+    # check if name is valid C++ identifier
+    pattern = re.compile(r'^[a-zA-Z_][a-zA-Z_0-9]*$')
+    if pattern.match(name):
+        return name
+    else:
+        raise Exception("could not generate C identifier for '{:s}' name='{:s}'".format(orig, name))
+
+
     
 # ########################################################
 # 
@@ -105,7 +169,7 @@ def build_pythia_db(filename, classnames):
         if (pdg in classnames):
             c_id = classnames[pdg]
         else:
-            c_id = c_identifier(name)
+            c_id = c_identifier_cammel(name) # the cammel case names
         
         #~ print(name, c_id, sep='\t', file=sys.stderr)
         #~ enums += "{:s} = {:d}, ".format(c_id, corsika_id)