Index: sasmodels/conversion_table.py
===================================================================
--- sasmodels/conversion_table.py	(revision 4b4eee18ebf09f9b4153e830fe7ed926d912f33f)
+++ sasmodels/conversion_table.py	(revision 298621bc333b762ca16da41e880ca3caac59cbea)
@@ -5,10 +5,29 @@
 names for each parameter in sasmodels.  This is used by :mod:`convert` to
 determine the equivalent parameter set when comparing a sasmodels model to
-the models defined in SasView 3.1.
+the models defined in previous versions of SasView and sasmodels. This is now
+versioned based on the version number of SasView.
+
+When any sasmodels parameter or model name is changed, this must be modified to
+account for that.
+
+Usage:
+<old_Sasview_version> : {
+    <new_model_name> : [
+        <old_model_name> ,
+        {
+            <new_param_name_1> : <old_param_name_1>,
+            ...
+            <new_param_name_n> : <old_param_name_n>
+        }
+    ]
+}
+
+Any future parameter and model name changes can and should be given in this
+table for future compatibility.
 """
 
 CONVERSION_TABLE = {
-    "4.1.0" : {},
-    "4.0.1" : {
+    "4.0.1" : {},
+    "3.1.2" : {
     "adsorbed_layer": [
         "Core2ndMomentModel",
Index: sasmodels/convert.py
===================================================================
--- sasmodels/convert.py	(revision 4b4eee18ebf09f9b4153e830fe7ed926d912f33f)
+++ sasmodels/convert.py	(revision 298621bc333b762ca16da41e880ca3caac59cbea)
@@ -153,12 +153,13 @@
     two variants in sasview.
     """
-    for sasmodels_name, [sasview_name, _] in CONVERSION_TABLE.get(version).items():
+    for sasmodels_name, [sasview_name, _] in \
+            CONVERSION_TABLE.get(version).items():
         if sasview_name == model_name:
             return sasmodels_name
     return None
 
-
-def _hand_convert(name, oldpars, version='4.0.1'):
-    if name == 'core_shell_parallelepiped' and version == '4.0.1':
+def _hand_convert(name, oldpars, version='3.1.2'):
+    base_version = '3.1.2'
+    if name == 'core_shell_parallelepiped' and version == base_version:
         # Make sure pd on rim parameters defaults to zero
         # ... probably not necessary.
@@ -166,5 +167,5 @@
         oldpars['rimB.width'] = 0.0
         oldpars['rimC.width'] = 0.0
-    elif name == 'core_shell_ellipsoid:1' and version == '4.0.1':
+    elif name == 'core_shell_ellipsoid:1' and version == base_version:
         # Reverse translation (from new to old), from core_shell_ellipsoid.c
         #    equat_shell = equat_core + thick_shell
@@ -185,5 +186,5 @@
         oldpars['polar_core'] = polar_core / equat_core
         oldpars['polar_shell'] = (polar_shell-polar_core)/(equat_shell-equat_core)
-    elif name == 'hollow_cylinder' and version == '4.0.1':
+    elif name == 'hollow_cylinder' and version == base_version:
         # now uses radius and thickness
         thickness = oldpars['radius'] - oldpars['core_radius']
@@ -192,5 +193,5 @@
             pd = oldpars['radius.width']*oldpars['radius']/thickness
             oldpars['radius.width'] = pd
-    elif name == 'multilayer_vesicle' and version == '4.0.1':
+    elif name == 'multilayer_vesicle' and version == base_version:
         if 'scale' in oldpars:
             oldpars['volfraction'] = oldpars['scale']
@@ -206,9 +207,9 @@
         if 'scale.units' in oldpars:
             oldpars['volfraction.units'] = oldpars['scale.units']
-    elif name == 'pearl_necklace' and version == '4.0.1':
+    elif name == 'pearl_necklace' and version == base_version:
         pass
         #_remove_pd(oldpars, 'num_pearls', name)
         #_remove_pd(oldpars, 'thick_string', name)
-    elif name == 'polymer_micelle' and version == '4.0.1':
+    elif name == 'polymer_micelle' and version == base_version:
         if 'ndensity' in oldpars:
             oldpars['ndensity'] /= 1e15
@@ -226,5 +227,5 @@
             if p + ".upper" in oldpars:
                 oldpars[p + ".upper"] /= 1e-13
-    elif name == 'spherical_sld' and version == '4.0.1':
+    elif name == 'spherical_sld' and version == base_version:
         oldpars["CONTROL"] = 0
         i = 0
@@ -232,5 +233,5 @@
             oldpars["CONTROL"] += 1
             i += 1
-    elif name == 'teubner_strey' and version == '4.0.1':
+    elif name == 'teubner_strey' and version == base_version:
         # basically undoing the entire Teubner-Strey calculations here.
         #    drho = (sld_a - sld_b)
@@ -288,5 +289,5 @@
         if ':' in newname:   # core_shell_ellipsoid:1
             model_info = load_model_info(newname[:-2])
-            # Know that the table exists and isn't multiplicity so grab it directly
+            # Know the table exists and isn't multiplicity so grab it directly
             # Can't use _get_translation_table since that will return the 'bare'
             # version.
@@ -305,5 +306,4 @@
         name = newname
     return newname, newpars
-
 
 # ========= BACKWARD CONVERSION sasmodels => sasview 3.x ===========
