diff --git a/src/dynamic-srv.py b/src/dynamic-srv.py
index 666a92eb83452d34bbbe1c561e66c6a59e72c156..662b39574bbff223a201f331a428cc6d0c31d9f0 100755
--- a/src/dynamic-srv.py
+++ b/src/dynamic-srv.py
@@ -7,7 +7,7 @@ import sys
 import os
 sys.path.insert(0, os.path.abspath('.'))
 
-from UserDict import UserDict
+from collections import UserDict
 import PyTango
 import numpy as np
 import importlib
@@ -217,6 +217,9 @@ class Dynamic(PyTango.Device_4Impl):
         self.myattrs = CaseLessDict()
         self.read_functions = CaseLessDict()
         self.write_functions = CaseLessDict()
+        #link to the Tango DB
+        self.db = PyTango.Database()
+        
         aux = self.FiltersScript.split('/')
         path = '/'.join(aux[:-1])
         if path:
@@ -247,11 +250,9 @@ class Dynamic(PyTango.Device_4Impl):
             self.set_state(PyTango.DevState.OFF)
             return
 
-    	#link to the Tango DB
-        self.db = PyTango.Database()
+        #creation of dynamic attributes from cfg script
         dynattrs = self.cfg_module.createDynAttrsDict()
-
-        #creation of dynamic attributes.                    
+              
         for attr in dynattrs:
             attr_obj = dynattrs[attr]
             
@@ -276,25 +277,16 @@ class Dynamic(PyTango.Device_4Impl):
                 PyTango.Except.throw_exception("Exist",
                             "Attribute "+attr_obj.name+ " already defined",
                             "NewAttribute")
-            tango_type = dataType2TangoType(attr_obj.type.upper())
-            permission = READ_ONLY
-            if attr_obj.flag == READ_ONLY:
-                permission = PyTango.AttrWriteType.READ
-            elif attr_obj.flag == READ_WRITE:
-                permission = PyTango.AttrWriteType.READ_WRITE
-            elif attr_obj.flag == WRITE_ONLY:
-                #FIXME: check if it is possible to have write only
-                permission = PyTango.AttrWriteType.READ_WRITE
-            
+
             # It's possible to define python methods for calculating the attribute value
             self.read_functions[attr_obj.name] = attr_obj.read_function
             self.write_functions[attr_obj.name] = attr_obj.write_function
             if attr_obj.dimension == 1:                
-                attr = PyTango.Attr(str(attr_obj.name), tango_type, permission)
+                attr = PyTango.Attr(str(attr_obj.name), attr_obj.datatype, attr_obj.permission)
                 if attr_obj.memorized == 1:
                     attr.set_memorized()
                 self.add_attribute(attr, self.read_Scalar,self.write_Scalar)
-                if tango_type == PyTango.ArgType.DevString:
+                if attr_obj.datatype == PyTango.ArgType.DevString:
                     self.myattrs[attr_obj.name] = ""
                 else:
                     self.myattrs[attr_obj.name] = 0
@@ -304,37 +296,37 @@ class Dynamic(PyTango.Device_4Impl):
                     dev_attr_props = self.db.get_device_attribute_property(self.get_name(),[attr_obj.name])
                     attr_prop = dev_attr_props[attr_obj.name]
                     for pr in attr_prop.keys():
-                        if (pr == '__value') and (tango_type == PyTango.ArgType.DevString):
+                        if (pr == '__value') and (attr_obj.datatype == PyTango.ArgType.DevString):
                             self.myattrs[attr_obj.name] = attr_prop['__value'][0]
-                        elif (pr == '__value') and (tango_type == PyTango.ArgType.DevFloat):
+                        elif (pr == '__value') and (attr_obj.datatype == PyTango.ArgType.DevFloat):
                             self.myattrs[attr_obj.name] = float(attr_prop['__value'][0])
-                        elif (pr == '__value') and (tango_type == PyTango.ArgType.DevDouble):
+                        elif (pr == '__value') and (attr_obj.datatype == PyTango.ArgType.DevDouble):
                             self.myattrs[attr_obj.name] = float(attr_prop['__value'][0])
-                        elif (pr == '__value') and (tango_type == PyTango.ArgType.DevBoolean):
+                        elif (pr == '__value') and (attr_obj.datatype == PyTango.ArgType.DevBoolean):
                             self.myattrs[attr_obj.name] = bool(attr_prop['__value'][0] == "True")
                         elif (pr == '__value'):
                             self.myattrs[attr_obj.name] = int(attr_prop['__value'][0])
             elif isinstance(attr_obj.dimension, tuple):
                 sizx = attr_obj.dimension[0]
                 sizy = attr_obj.dimension[1]
-                attr = PyTango.ImageAttr(str(attr_obj.name), tango_type, permission,sizx, sizy)
+                attr = PyTango.ImageAttr(str(attr_obj.name), attr_obj.datatype, attr_obj.permission,sizx, sizy)
                 self.add_attribute(attr, self.read_Image, self.write_Image)
                 if attr_obj.default:
                     self.myattrs[attr_obj.name] = eval(attr_obj.default)
-                elif tango_type == PyTango.ArgType.DevString:
+                elif attr_obj.datatype == PyTango.ArgType.DevString:
                     self.myattrs[attr_obj.name] = [[],[]]
                 else:
-                    self.myattrs[attr_obj.name] = np.zeros((sizy,sizx),fromPyTango2NumpyType(tango_type))
+                    self.myattrs[attr_obj.name] = np.zeros((sizy,sizx),fromPyTango2NumpyType(attr_obj.datatype))
             else :
                 self.debug_stream("Creation of attribute %s, dimension = %s" % (attr_obj.name, str(attr_obj.dimension)))
-                attr = PyTango.SpectrumAttr(str(attr_obj.name), tango_type, permission,attr_obj.dimension)
+                attr = PyTango.SpectrumAttr(str(attr_obj.name), attr_obj.datatype, attr_obj.permission,attr_obj.dimension)
                 self.add_attribute(attr, self.read_Spectrum, self.write_Spectrum)
                 if attr_obj.default:
                     self.myattrs[attr_obj.name] = eval(attr_obj.default)
-                elif tango_type == PyTango.ArgType.DevString:
+                elif attr_obj.datatype == PyTango.ArgType.DevString:
                     self.myattrs[attr_obj.name] = []
                 else:
-                    self.myattrs[attr_obj.name] = np.zeros(attr_obj.dimension, fromPyTango2NumpyType(tango_type))
+                    self.myattrs[attr_obj.name] = np.zeros(attr_obj.dimension, fromPyTango2NumpyType(attr_obj.datatype))
                     
         self.set_state(PyTango.DevState.ON)
                 
@@ -438,14 +430,18 @@ class Dynamic(PyTango.Device_4Impl):
 #    argin:  DevVarStringArray    Name - of the new scalar attribute\nDOUBLE, SHORT, LONG for the type of the attribute\n
 #------------------------------------------------------------------
     def NewScalar(self, argin):
-        #print "In ", self.get_name(), "::NewScalar()"
+        #print "In ", self.get_name(), "::NewScalar()
         (name,typ) = processInputStringArray(argin)
+
         attr = PyTango.Attr(name, typ,
                                         PyTango.AttrWriteType.READ_WRITE)
-        if self.myattrs.has_key(name):
+        if name in self.myattrs:
             PyTango.Except.throw_exception("Exist","Attribute "+name+ " already defined","NewAttribute")
         self.add_attribute(attr, self.read_Scalar, self.write_Scalar,None)
         self.myattrs[name] = 0
+        # init missing entries in dictionaries
+        self.read_functions[name] = ""
+        self.write_functions[name] = ""
 
 
 #------------------------------------------------------------------
@@ -462,13 +458,14 @@ class Dynamic(PyTango.Device_4Impl):
                                         PyTango.AttrWriteType.READ_WRITE,
                                         siz                                        
                                         )
-        if self.myattrs.has_key(name):
+        if name in self.myattrs:
             PyTango.Except.throw_exception("Exist","Attribute "+name+ " already defined","NewAttribute")                                        
         self.add_attribute(attr, self.read_Spectrum, self.write_Spectrum,None)
-        self.myattrs[name] = np.zeros(siz,fromPyTango2NumpyType(typ))                                        
+        self.myattrs[name] = np.zeros(siz,fromPyTango2NumpyType(typ))
+        # init missing entries in dictionaries
+        self.read_functions[name] = ""
+        self.write_functions[name] = ""                                    
                                                 
-
-
 #------------------------------------------------------------------
 #    NewImage command:
 #
@@ -482,11 +479,13 @@ class Dynamic(PyTango.Device_4Impl):
         attr = PyTango.ImageAttr(name, typ,
                                         PyTango.AttrWriteType.READ_WRITE,
                                         sizx, sizy)
-        if self.myattrs.has_key(name):
+        if name in self.myattrs:
             PyTango.Except.throw_exception("Exist","Attribute "+name+ " already defined","NewAttribute")                                        
         self.add_attribute(attr, self.read_Image, self.write_Image,None)
         self.myattrs[name] = np.zeros((sizy,sizx),fromPyTango2NumpyType(typ))
-        #print      self.myattrs[name].dtype   
+        # init missing entries in dictionaries
+        self.read_functions[name] = ""
+        self.write_functions[name] = ""  
 
 
 #------------------------------------------------------------------