diff --git a/DDCore/include/DD4hep/IDDescriptor.h b/DDCore/include/DD4hep/IDDescriptor.h
index 906148cdbd92a1ba70aa0363783e23e48cb0de76..c42d281bd8e1b354e3a83a0ddfd329f34745c46b 100644
--- a/DDCore/include/DD4hep/IDDescriptor.h
+++ b/DDCore/include/DD4hep/IDDescriptor.h
@@ -35,7 +35,7 @@ namespace DD4hep {
      *  @date    2012/07/31
      */
     struct IDDescriptor : public Ref_t  {
-      public:
+    public:
       typedef unsigned long long int VolumeID;
       //typedef std::pair<int,int>          Field;
       struct Field  {
@@ -43,9 +43,12 @@ namespace DD4hep {
 	VolumeID mask;
 	VolumeID encode(int value)  const  {
 	  VolumeID v = value;
+	  //FGxx return  ( (  v  << first )  & mask  ) ;
 	  return mask|((v<<(64-second))>>first);
+
 	}
 	int decode(VolumeID value)  const  {
+	  //FGxx return  ( mask & value ) >> first  ;
 	  return (~mask&value)>>(64-second-first);
 	}
       };
diff --git a/DDCore/src/IDDescriptor.cpp b/DDCore/src/IDDescriptor.cpp
index 671b2549994aa6f05d037f39e9b4c39af56481a1..0b738b3b601e7c8349dbc1654a1b4ab549c61b54 100644
--- a/DDCore/src/IDDescriptor.cpp
+++ b/DDCore/src/IDDescriptor.cpp
@@ -39,6 +39,8 @@ namespace {
     o->maxBit = 0;
     o->fieldIDs.clear();
     o->fieldMap.clear();
+    o->description = dsc ;
+
     for(Elements::const_iterator i=elements.begin();i!=elements.end();++i)  {
       const string& s = *i;
       f.clear();
@@ -48,7 +50,10 @@ namespace {
       field.first  = f.size() == 3 ? ::atoi(f[1].c_str()) : pos;
       field.second = f.size() == 3 ? ::atoi(f[2].c_str()) : ::atoi(f[1].c_str());
       field.second = ::abs(field.second);
+
+      //FG:   field.mask = ( ( 0x0001LL << (field.second) ) - 1 ) << field.first ;
       field.mask   = ~((~0x0ull<<(64-field.second))>>(64-field.second)<<(64-field.first-field.second));
+
       pos = field.first + ::abs(field.second);
       if ( pos>o->maxBit ) o->maxBit = pos;
       o->fieldIDs.push_back(make_pair(o->fieldMap.size(),f[0]));