Index: /issm/trunk-jpl/src/m/classes/qmu.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/qmu.py	(revision 25459)
+++ /issm/trunk-jpl/src/m/classes/qmu.py	(revision 25460)
@@ -1,5 +1,3 @@
 import numpy as np
-
-from checkfield import checkfield
 from collections import OrderedDict
 from dakota_method import *
@@ -21,5 +19,5 @@
     def __init__(self):  # {{{
         self.isdakota = 0
-        self.output   = 0
+        self.output = 0
         self.variables = OrderedStruct()
         self.correlation_matrix = []
@@ -32,4 +30,5 @@
         self.variablepartitions = []
         self.variablepartitions_npart = []
+        self.variablepartitions_nt = []
         self.responsedescriptors = []
         self.responsepartitions = []
@@ -128,10 +127,13 @@
         return s
     # }}}
+
     def extrude(self, md):  # {{{
         return self
     #}}}
+
     def setdefaultparameters(self):  # {{{
         return self
     #}}}
+
     def checkconsistency(self, md, solution, analyses):  # {{{
         #Early return
@@ -166,8 +168,8 @@
                 variable.checkconsistency(md, solution, analyses)
 
-        # Go through variables and check that we have normal uncertains first, 
-        # then uniform uncertains and finally histogram_bin_uncertain. Indeed, 
-        # Dakota will order them this waym, and when we send partitions for 
-        # scaled variables, they better show up in the order Dakota is feeding 
+        # Go through variables and check that we have normal uncertains first,
+        # then uniform uncertains and finally histogram_bin_uncertain. Indeed,
+        # Dakota will order them this waym, and when we send partitions for
+        # scaled variables, they better show up in the order Dakota is feeding
         # them to us in InputUpdateFromDakotax!
         fv = fieldnames(self.variables)
@@ -194,4 +196,5 @@
         return md
     # }}}
+
     def marshall(self, prefix, md, fid):  # {{{
         WriteData(fid, prefix, 'object', self, 'fieldname', 'isdakota', 'format', 'Boolean')
Index: /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py
===================================================================
--- /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py	(revision 25459)
+++ /issm/trunk-jpl/src/m/contrib/defleurian/netCDF/export_netCDF.py	(revision 25460)
@@ -158,10 +158,16 @@
                 if ncvar is not None:
                     FillVar(ncvar, Var)
-            # this is a multi layered group thta should not be an "else"
+            # this is an issm class
             elif isclass(type(md.__dict__[group].__dict__[field])):
                 classtype = getmodule(type(md.__dict__[group])).__name__
                 NCgroup.__setattr__('classtype', classtype)
                 Subgroup = NCgroup.createGroup(str(field))
-                classtype = getmodule(type(md.__dict__[group].__dict__[field])).__name__
+                classname = type(md.__dict__[group].__dict__[field]).__name__
+                modulename = getmodule(type(md.__dict__[group].__dict__[field])).__name__
+                if classname == modulename:
+                    #when module and class name have the same name
+                    classtype = classname
+                else:
+                    classtype = modulename + '.' + classname
                 Subgroup.__setattr__('classtype', classtype)
                 subfields = dict.keys(md.__dict__[group].__dict__[field].__dict__)
Index: /issm/trunk-jpl/src/m/io/loadvars.py
===================================================================
--- /issm/trunk-jpl/src/m/io/loadvars.py	(revision 25459)
+++ /issm/trunk-jpl/src/m/io/loadvars.py	(revision 25460)
@@ -17,8 +17,8 @@
     """LOADVARS - function to load variables from a file
 
-    This function loads one or more variables from a file. The names of the 
-    variables must be supplied. If more than one variable is specified, it may 
-    be done with a list of names or a dictionary of name as keys. The output 
-    type will correspond to the input type. All the variables in the file may 
+    This function loads one or more variables from a file. The names of the
+    variables must be supplied. If more than one variable is specified, it may
+    be done with a list of names or a dictionary of name as keys. The output
+    type will correspond to the input type. All the variables in the file may
     be loaded by specifying only the file name.
 
@@ -304,7 +304,13 @@
             for subgroup in NCData.groups[group].groups:
                 classe = str(group) + '.' + str(subgroup)
-                class_dict[classe] = [str(getattr(NCData.groups[group].groups[subgroup], 'classtype')), ]
+                submodule = str(getattr(NCData.groups[group].groups[subgroup], 'classtype')).split('.')[-1]
+                class_dict[classe] = [submodule, ]
                 if class_dict[classe][0] not in ['dict', 'list', 'cell']:
-                    class_dict[classe].append(__import__(class_dict[classe][0]))
+                    try:
+                        class_dict[classe].append(__import__(class_dict[classe][0]))
+                    except ModuleNotFoundError:
+                        #submodule probably has a different name
+                        modulename = str(getattr(NCData.groups[group].groups[subgroup], 'classtype')).split('.')[0]
+                        class_dict[classe].append(__import__(modulename))
                 class_tree[classe] = [group, subgroup]
         else:
