Index: sasmodels/compare.py
===================================================================
--- sasmodels/compare.py	(revision ea7504385b3e91f10b68265b8e6a5a5519f04260)
+++ sasmodels/compare.py	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -41,5 +41,5 @@
 from .data import plot_theory, empty_data1D, empty_data2D
 from .direct_model import DirectModel
-from .convert import revert_pars, constrain_new_to_old
+from .convert import revert_name, revert_pars, constrain_new_to_old
 
 USAGE = """
@@ -347,5 +347,5 @@
 def eval_sasview(model_info, data):
     """
-    Return a model calculator using the SasView fitting engine.
+    Return a model calculator using the pre-4.0 SasView models.
     """
     # importing sas here so that the error message will be that sas failed to
@@ -366,11 +366,11 @@
         composition_type, parts = model_info['composition']
         if composition_type == 'product':
-            from sas.sascalc.fit.MultiplicationModel import MultiplicationModel
-            P, S = [get_model(p) for p in model_info['oldname']]
+            from sas.models.MultiplicationModel import MultiplicationModel
+            P, S = [get_model(revert_name(p)) for p in parts]
             model = MultiplicationModel(P, S)
         else:
             raise ValueError("sasview mixture models not supported by compare")
     else:
-        model = get_model(model_info['oldname'])
+        model = get_model(revert_name(model_info))
 
     # build a smearer with which to call the model, if necessary
Index: sasmodels/convert.json
===================================================================
--- sasmodels/convert.json	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
+++ sasmodels/convert.json	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -0,0 +1,705 @@
+{
+  "adsorbed_layer": [
+    "Core2ndMomentModel", 
+    {
+      "scale": "scale", 
+      "second_moment": "second_moment", 
+      "density_shell": "density_poly", 
+      "sld_solvent": "sld_solv", 
+      "radius": "radius_core", 
+      "volfraction": "volf_cores", 
+      "background": "background", 
+      "adsorbed_amount": "ads_amount", 
+      "sld_shell": "sld_poly"
+    }
+  ], 
+  "barbell": [
+    "BarBellModel", 
+    {
+      "sld": "sld_barbell", 
+      "length": "len_bar", 
+      "bell_radius": "rad_bell", 
+      "radius": "rad_bar", 
+      "sld_solvent": "sld_solv"
+    }
+  ], 
+  "bcc_paracrystal": [
+    "BCCrystalModel", 
+    {
+      "sld": "sldSph", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "be_polyelectrolyte": [
+    "BEPolyelectrolyte", 
+    {
+      "ionization_degree": "alpha", 
+      "polymer_concentration": "c", 
+      "salt_concentration": "cs", 
+      "virial_param": "h", 
+      "background": "background", 
+      "contrast_factor": "k", 
+      "bjerrum_length": "lb", 
+      "monomer_length": "b"
+    }
+  ], 
+  "binary_hard_sphere": [
+    "BinaryHSModel", 
+    {
+      "sld_sm": "ss_sld", 
+      "sld_lg": "ls_sld", 
+      "volfraction_sm": "vol_frac_ss", 
+      "radius_lg": "l_radius", 
+      "radius_sm": "s_radius", 
+      "volfraction_lg": "vol_frac_ls", 
+      "sld_solvent": "solvent_sld"
+    }
+  ], 
+  "broad_peak": [
+    "BroadPeakModel", 
+    {
+      "peak_pos": "q_peak", 
+      "scale": null, 
+      "lorentz_length": "length_l", 
+      "porod_scale": "scale_p", 
+      "lorentz_exp": "exponent_l", 
+      "lorentz_scale": "scale_l", 
+      "porod_exp": "exponent_p"
+    }
+  ], 
+  "capped_cylinder": [
+    "CappedCylinderModel", 
+    {
+      "sld": "sld_capcyl", 
+      "length": "len_cyl", 
+      "cap_radius": "rad_cap", 
+      "radius": "rad_cyl", 
+      "sld_solvent": "sld_solv"
+    }
+  ], 
+  "core_multi_shell": [
+    "CoreMultiShellModel", 
+    {
+      "thick_shell": "thick_shell", 
+      "radius": "rad_core0", 
+      "sld": "sld_core0", 
+      "sld_shell": "sld_in_shell", 
+      "sld_solvent": "sld_solv", 
+      "n": "n_shells"
+    }
+  ], 
+  "core_shell_bicelle": [
+    "CoreShellBicelleModel", 
+    {
+      "phi": "axis_phi", 
+      "sld_core": "core_sld", 
+      "sld_rim": "rim_sld", 
+      "face_thickness": "face_thick", 
+      "sld_solvent": "solvent_sld", 
+      "rim_thickness": "rim_thick", 
+      "sld_face": "face_sld", 
+      "theta": "axis_theta"
+    }
+  ], 
+  "core_shell_cylinder": [
+    "CoreShellCylinderModel", 
+    {
+      "theta": "axis_theta", 
+      "phi": "axis_phi", 
+      "sld_shell": "shell_sld", 
+      "sld_solvent": "solvent_sld", 
+      "sld_core": "core_sld"
+    }
+  ], 
+  "core_shell_ellipsoid": [
+    "CoreShellEllipsoidModel", 
+    {
+      "phi": "axis_phi", 
+      "sld_core": "sld_core", 
+      "polar_shell": "polar_shell", 
+      "sld_solvent": "sld_solvent", 
+      "equat_shell": "equat_shell", 
+      "equat_core": "equat_core", 
+      "theta": "axis_theta", 
+      "polar_core": "polar_core", 
+      "sld_shell": "sld_shell"
+    }
+  ], 
+  "core_shell_ellipsoid_xt": [
+    "CoreShellEllipsoidXTModel", 
+    {
+      "phi": "axis_phi", 
+      "sld_core": "sld_core", 
+      "x_core": "X_core", 
+      "sld_solvent": "sld_solvent", 
+      "t_shell": "T_shell", 
+      "x_polar_shell": "XpolarShell", 
+      "theta": "axis_theta", 
+      "sld_shell": "sld_shell"
+    }
+  ], 
+  "core_shell_parallelepiped": [
+    "CSParallelepipedModel", 
+    {
+      "phi": "parallel_phi", 
+      "psi": "parallel_psi", 
+      "sld_core": "sld_pcore", 
+      "sld_c": "sld_rimC", 
+      "sld_b": "sld_rimB", 
+      "sld_solvent": "sld_solv", 
+      "a_side": "shortA", 
+      "sld_a": "sld_rimA", 
+      "b_side": "midB", 
+      "crim_thickness": "rimC", 
+      "theta": "parallel_theta", 
+      "arim_thickness": "rimA", 
+      "c_side": "longC", 
+      "brim_thickness": "rimB"
+    }
+  ], 
+  "core_shell_sphere": [
+    "CoreShellModel", 
+    {
+      "sld_shell": "shell_sld", 
+      "sld_solvent": "solvent_sld", 
+      "sld_core": "core_sld"
+    }
+  ], 
+  "correlation_length": [
+    "CorrLengthModel", 
+    {
+      "porod_scale": "scale_p", 
+      "lorentz_scale": "scale_l", 
+      "exponent_p": "exponent_p", 
+      "exponent_l": "exponent_l", 
+      "cor_length": "length_l"
+    }
+  ], 
+  "cylinder": [
+    "CylinderModel", 
+    {
+      "sld": "sldCyl", 
+      "theta": "cyl_theta", 
+      "phi": "cyl_phi", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "dab": [
+    "DABModel", 
+    {
+      "length": "length"
+    }
+  ], 
+  "ellipsoid": [
+    "EllipsoidModel", 
+    {
+      "phi": "axis_phi", 
+      "r_equatorial": "radius_b", 
+      "sld": "sldEll", 
+      "theta": "axis_theta", 
+      "r_polar": "radius_a", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "elliptical_cylinder": [
+    "EllipticalCylinderModel", 
+    {
+      "phi": "cyl_phi", 
+      "psi": "cyl_psi", 
+      "theta": "cyl_theta", 
+      "sld": "sldCyl", 
+      "axis_ratio": "r_ratio", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "fcc_paracrystal": [
+    "FCCrystalModel", 
+    {
+      "sld": "sldSph", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "flexible_cylinder": [
+    "FlexibleCylinderModel", 
+    {
+      "sld": "sldCyl", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "flexible_cylinder_elliptical": [
+    "FlexCylEllipXModel", 
+    {
+      "sld": "sldCyl", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "fractal": [
+    "FractalModel", 
+    {
+      "sld_block": "sldBlock", 
+      "radius": "radius", 
+      "cor_length": "cor_length", 
+      "sld_solvent": "sldSolv", 
+      "fractal_dim": "fractal_dim"
+    }
+  ], 
+  "fractal_core_shell": [
+    "FractalCoreShellModel", 
+    {
+      "sld_shell": "shell_sld", 
+      "sld_solvent": "solvent_sld", 
+      "sld_core": "core_sld"
+    }
+  ], 
+  "fuzzy_sphere": [
+    "FuzzySphereModel", 
+    {
+      "sld": "sldSph", 
+      "fuzziness": "fuzziness", 
+      "radius": "radius", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "gauss_lorentz_gel": [
+    "GaussLorentzGelModel", 
+    {
+      "gauss_scale_factor": "scale_g", 
+      "dynamic_cor_length": "dyn_colength", 
+      "static_cor_length": "stat_colength", 
+      "background": "background", 
+      "lorentz_scale_factor": "scale_l"
+    }
+  ], 
+  "gaussian_peak": [
+    "PeakGaussModel", 
+    {
+      "sigma": "B"
+    }
+  ], 
+  "gel_fit": [
+    "GelFitModel", 
+    {
+      "gyration_radius": "radius", 
+      "lorentzian_scale": "lScale", 
+      "fractal_exp": "FractalExp", 
+      "cor_length": "zeta", 
+      "guinier_scale": "gScale"
+    }
+  ], 
+  "guinier": [
+    "GuinierModel", 
+    {
+      "rg": "rg"
+    }
+  ], 
+  "guinier_porod": [
+    "GuinierPorodModel", 
+    {
+      "s": "dim", 
+      "rg": "rg", 
+      "m": "m", 
+      "scale": "scale", 
+      "background": "background"
+    }
+  ], 
+  "hardsphere": [
+    "HardsphereStructure", 
+    {
+      "radius_effective_pd": "effect_radius_pd", 
+      "radius_effective": "effect_radius", 
+      "radius_effective_pd_n": "effect_radius_pd_n"
+    }
+  ], 
+  "hardsphere2": [
+    "HardsphereStructure", 
+    {}
+  ], 
+  "hardsphere3": [
+    "HardsphereStructure", 
+    {}
+  ], 
+  "hardsphere4": [
+    "HardsphereStructure", 
+    {}
+  ], 
+  "hayter_msa": [
+    "HayterMSAStructure", 
+    {
+      "salt_concentration": "saltconc", 
+      "radius_effective_pd": "effect_radius_pd", 
+      "radius_effective": "effect_radius", 
+      "radius_effective_pd_n": "effect_radius_pd_n"
+    }
+  ], 
+  "hollow_cylinder": [
+    "HollowCylinderModel", 
+    {
+      "phi": "axis_phi", 
+      "scale": "scale", 
+      "core_radius": "core_radius", 
+      "sld_solvent": "sldSolv", 
+      "length": "length", 
+      "radius": "radius", 
+      "background": "background", 
+      "sld": "sldCyl", 
+      "theta": "axis_theta"
+    }
+  ], 
+  "hollow_rectangular_prism": [
+    "RectangularHollowPrismModel", 
+    {
+      "b2a_ratio": "b2a_ratio", 
+      "a_side": "short_side", 
+      "sld": "sldPipe", 
+      "c_side": "c2a_ratio", 
+      "sld_solvent": "sldSolv", 
+      "thickness": "thickness"
+    }
+  ], 
+  "hollow_rectangular_prism_thin_walls": [
+    "RectangularHollowPrismInfThinWallsModel", 
+    {
+      "sld": "sldPipe", 
+      "b2a_ratio": "b2a_ratio", 
+      "a_side": "short_side", 
+      "c_side": "c2a_ratio", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "lamellar": [
+    "LamellarModel", 
+    {
+      "sld": "sld_bi", 
+      "sld_solvent": "sld_sol", 
+      "thickness": "bi_thick"
+    }
+  ], 
+  "lamellar_hg": [
+    "LamellarFFHGModel", 
+    {
+      "sld": "sld_tail", 
+      "sld_solvent": "sld_solvent", 
+      "sld_head": "sld_head", 
+      "tail_length": "t_length", 
+      "head_length": "h_thickness"
+    }
+  ], 
+  "lamellar_hg_stack_caille": [
+    "LamellarPSHGModel", 
+    {
+      "Caille_parameter": "caille", 
+      "Nlayers": "n_plates", 
+      "sld_head": "sld_head", 
+      "tail_length": "deltaT", 
+      "head_length": "deltaH", 
+      "sld": "sld_tail", 
+      "sld_solvent": "sld_solvent"
+    }
+  ], 
+  "lamellar_stack_caille": [
+    "LamellarPSModel", 
+    {
+      "sld": "sld_bi", 
+      "Caille_parameter": "caille", 
+      "Nlayers": "N_plates", 
+      "sld_solvent": "sld_sol", 
+      "thickness": "delta"
+    }
+  ], 
+  "lamellar_stack_paracrystal": [
+    "LamellarPCrystalModel", 
+    {
+      "sld": "sld_layer", 
+      "spacing_polydisp": "pd_spacing", 
+      "sld_solvent": "sld_solvent"
+    }
+  ], 
+  "line": [
+    "LineModel", 
+    {
+      "slope": "B", 
+      "scale": null, 
+      "background": null, 
+      "intercept": "A"
+    }
+  ], 
+  "linear_pearls": [
+    "LinearPearlsModel", 
+    {
+      "sld": "sld_pearl", 
+      "sld_solvent": "sld_solv", 
+      "edge_sep": "edge_separation"
+    }
+  ], 
+  "lorentz": [
+    "LorentzModel", 
+    {
+      "cor_length": "length"
+    }
+  ], 
+  "mass_fractal": [
+    "MassFractalModel", 
+    {
+      "cutoff_length": "co_length", 
+      "radius": "radius", 
+      "mass_dim": "mass_dim"
+    }
+  ], 
+  "mass_surface_fractal": [
+    "MassSurfaceFractal", 
+    {
+      "cluster_rg": "cluster_rg", 
+      "mass_dim": "mass_dim", 
+      "radius": "radius", 
+      "surface_dim": "surface_dim", 
+      "primary_rg": "primary_rg"
+    }
+  ], 
+  "mono_gauss_coil": [
+    "DebyeModel", 
+    {
+      "radius_gyration": "rg", 
+      "scale": "scale", 
+      "background": "background"
+    }
+  ], 
+  "multilayer_vesicle": [
+    "MultiShellModel", 
+    {
+      "sld": "shell_sld", 
+      "thick_solvent": "w_thickness", 
+      "thick_shell": "s_thickness", 
+      "radius": "core_radius", 
+      "sld_solvent": "core_sld"
+    }
+  ], 
+  "onion": [
+    "OnionExpShellModel", 
+    {
+      "A": "A_shell", 
+      "core_sld": "sld_core0", 
+      "core_radius": "rad_core0", 
+      "out_sld": "sld_out_shell", 
+      "n": "n_shells", 
+      "solvent_sld": "sld_solv", 
+      "thickness": "thick_shell", 
+      "in_sld": "sld_in_shell"
+    }
+  ], 
+  "parallelepiped": [
+    "ParallelepipedModel", 
+    {
+      "phi": "parallel_phi", 
+      "psi": "parallel_psi", 
+      "sld_solvent": "sldSolv", 
+      "a_side": "short_a", 
+      "b_side": "short_b", 
+      "sld": "sldPipe", 
+      "theta": "parallel_theta", 
+      "c_side": "long_c"
+    }
+  ], 
+  "peak_lorentz": [
+    "PeakLorentzModel", 
+    {
+      "peak_pos": "q0", 
+      "peak_hwhm": "B"
+    }
+  ], 
+  "pearl_necklace": [
+    "PearlNecklaceModel", 
+    {
+      "scale": "scale", 
+      "string_thickness": "thick_string", 
+      "sld_string": "sld_string", 
+      "sld_solvent": "sld_solv", 
+      "edge_separation": "edge_separation", 
+      "number_of_pearls": "num_pearls", 
+      "radius": "radius", 
+      "background": "background", 
+      "sld": "sld_pearl"
+    }
+  ], 
+  "poly_gauss_coil": [
+    "Poly_GaussCoil", 
+    {
+      "radius_gyration": "rg", 
+      "polydispersity": "poly_m", 
+      "scale": "scale", 
+      "background": "background"
+    }
+  ], 
+  "polymer_excl_volume": [
+    "PolymerExclVolume", 
+    {
+      "rg": "rg", 
+      "scale": "scale", 
+      "background": "background", 
+      "porod_exp": "m"
+    }
+  ], 
+  "polymer_micelle": [
+    "MicelleSphCoreModel", 
+    {
+      "sld_corona": "rho_corona", 
+      "sld_solvent": "rho_solv", 
+      "sld_core": "rho_core"
+    }
+  ], 
+  "porod": [
+    "PorodModel", 
+    {
+      "scale": "scale", 
+      "background": "background"
+    }
+  ], 
+  "power_law": [
+    "PowerLawAbsModel", 
+    {
+      "scale": "scale", 
+      "background": "background", 
+      "power": "m"
+    }
+  ], 
+  "pringle": [
+    "PringlesModel", 
+    {
+      "scale": "scale", 
+      "solvent_sld": "sld_solvent", 
+      "thickness": "thickness", 
+      "beta": "beta", 
+      "radius": "radius", 
+      "background": "background", 
+      "alpha": "alpha", 
+      "pringle_sld": "sld_pringle"
+    }
+  ], 
+  "rectangular_prism": [
+    "RectangularPrismModel", 
+    {
+      "sld": "sldPipe", 
+      "b2a_ratio": "b2a_ratio", 
+      "a_side": "short_side", 
+      "c_side": "c2a_ratio", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "rpa": [
+    "RPAModel", 
+    {
+      "case_num": "lcase_n"
+    }
+  ], 
+  "sc_paracrystal": [
+    "SCCrystalModel", 
+    {
+      "sld": "sldSph", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "sphere": [
+    "SphereModel", 
+    {
+      "sld": "sldSph", 
+      "radius": "radius", 
+      "sld_solvent": "sldSolv"
+    }
+  ], 
+  "spherical_sld": [
+    "SphereSLDModel", 
+    {
+      "radius_core": "rad_core", 
+      "sld_solvent": "sld_solv"
+    }
+  ], 
+  "squarewell": [
+    "SquareWellStructure", 
+    {
+      "radius_effective_pd": "effect_radius_pd", 
+      "radius_effective": "effect_radius", 
+      "radius_effective_pd_n": "effect_radius_pd_n"
+    }
+  ], 
+  "stacked_disks": [
+    "StackedDisksModel", 
+    {
+      "phi": "axis_phi", 
+      "sld_layer": "layer_sld", 
+      "sld_core": "core_sld", 
+      "theta": "axis_theta", 
+      "sld_solvent": "solvent_sld", 
+      "n_stacking": "n_stacking"
+    }
+  ], 
+  "star_polymer": [
+    "StarPolymer", 
+    {
+      "arms": "arms", 
+      "rg_squared": "R2"
+    }
+  ], 
+  "stickyhardsphere": [
+    "StickyHSStructure", 
+    {
+      "radius_effective_pd": "effect_radius_pd", 
+      "radius_effective": "effect_radius", 
+      "radius_effective_pd_n": "effect_radius_pd_n"
+    }
+  ], 
+  "surface_fractal": [
+    "SurfaceFractalModel", 
+    {
+      "cutoff_length": "co_length", 
+      "radius": "radius", 
+      "surface_dim": "surface_dim"
+    }
+  ], 
+  "teubner_strey": [
+    "TeubnerStreyModel", 
+    {
+      "a2": "scale"
+    }
+  ], 
+  "triaxial_ellipsoid": [
+    "TriaxialEllipsoidModel", 
+    {
+      "phi": "axis_phi", 
+      "req_minor": "semi_axisA", 
+      "rpolar": "semi_axisC", 
+      "req_major": "semi_axisB", 
+      "solvent_sld": "sldSolv", 
+      "psi": "axis_psi", 
+      "sld": "sldEll", 
+      "theta": "axis_theta"
+    }
+  ], 
+  "two_lorentzian": [
+    "TwoLorentzianModel", 
+    {
+      "lorentz_scale_1": "scale_1", 
+      "lorentz_scale_2": "scale_2", 
+      "lorentz_exp_1": "exponent_1", 
+      "lorentz_exp_2": "exponent_2", 
+      "lorentz_length_2": "length_2", 
+      "lorentz_length_1": "length_1", 
+      "background": "background"
+    }
+  ], 
+  "two_power_law": [
+    "TwoPowerLawModel", 
+    {
+      "coefficent_1": "coef_A", 
+      "power_2": "power2", 
+      "power_1": "power1", 
+      "background": "background", 
+      "crossover": "qc"
+    }
+  ], 
+  "vesicle": [
+    "VesicleModel", 
+    {
+      "sld": "shell_sld", 
+      "sld_solvent": "solv_sld"
+    }
+  ]
+}
Index: sasmodels/convert.py
===================================================================
--- sasmodels/convert.py	(revision 2a3e1f507e690f45c1529e7d23d9f8fccf7e5008)
+++ sasmodels/convert.py	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -2,5 +2,7 @@
 Convert models to and from sasview.
 """
+from os.path import join as joinpath, abspath, dirname
 import warnings
+import json
 
 # List of models which SasView versions don't contain the explicit 'scale' argument.
@@ -26,4 +28,5 @@
 ]
 
+# Convert new style names for polydispersity info to old style names
 PD_DOT = [
     ("", ""),
@@ -33,4 +36,38 @@
     ("_pd_type", ".type"),
     ]
+
+CONVERSION_TABLE = None
+
+def _read_conversion_table():
+    global CONVERSION_TABLE
+    if CONVERSION_TABLE is None:
+        path = joinpath(dirname(abspath(__file__)), "convert.json")
+        with open(path) as fid:
+            CONVERSION_TABLE = json_load_byteified(fid)
+
+def json_load_byteified(file_handle):
+    return _byteify(
+        json.load(file_handle, object_hook=_byteify),
+        ignore_dicts=True
+    )
+
+def _byteify(data, ignore_dicts = False):
+    # if this is a unicode string, return its string representation
+    if isinstance(data, unicode):
+        return data.encode('utf-8')
+    # if this is a list of values, return list of byteified values
+    if isinstance(data, list):
+        return [ _byteify(item, ignore_dicts=True) for item in data ]
+    # if this is a dictionary, return dictionary of byteified keys and values
+    # but only if we haven't already byteified it
+    if isinstance(data, dict) and not ignore_dicts:
+        return {
+            _byteify(key, ignore_dicts=True): _byteify(value, ignore_dicts=True)
+            for key, value in data.iteritems()
+        }
+    # if it's anything else, return it in its original form
+    return data
+
+
 def _convert_pars(pars, mapping):
     """
@@ -114,10 +151,31 @@
     return newpars
 
+def revert_name(model_info):
+    _read_conversion_table()
+    oldname, oldpars = CONVERSION_TABLE.get(model_info['id'], [None, {}])
+    return oldname
+
+def _get_old_pars(model_info):
+    _read_conversion_table()
+    oldname, oldpars = CONVERSION_TABLE.get(model_info['id'], [None, {}])
+    return oldpars
+
 def revert_pars(model_info, pars):
     """
     Convert model from new style parameter names to old style.
     """
-    mapping = model_info['oldpars']
-    oldpars = _revert_pars(_unscale_sld(pars), mapping)
+    if model_info['composition'] is not None:
+        composition_type, parts = model_info['composition']
+        if composition_type == 'product':
+            P, S = parts
+            oldpars = {'scale':'scale_factor'}
+            oldpars.update(_get_old_pars(P))
+            oldpars.update(_get_old_pars(S))
+        else:
+            raise NotImplementedError("cannot convert to sasview sum")
+    else:
+        oldpars = _get_old_pars(model_info)
+    oldpars = _revert_pars(_unscale_sld(pars), oldpars)
+
 
     # Note: update compare.constrain_pars to match
Index: sasmodels/generate.py
===================================================================
--- sasmodels/generate.py	(revision 9ef9dd9f11c54d995dd94b650a4563230b868352)
+++ sasmodels/generate.py	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -153,12 +153,4 @@
     parameter list.  *demo* is mostly needed to set the default
     polydispersity values for tests.
-
-    *oldname* is the name of the model in sasview before sasmodels
-    was split into its own package, and *oldpars* is a dictionary
-    of *parameter: old_parameter* pairs defining the new names for
-    the parameters.  This is used by *compare* to check the values
-    of the new model against the values of the old model before
-    you are ready to add the new model to sasmodels.
-
 
 An *model_info* dictionary is constructed from the kernel meta data and
@@ -692,7 +684,4 @@
       implementing the kernel for the module, or None if they are not
       defined in python
-    * *oldname* is the model name in pre-4.0 Sasview
-    * *oldpars* is the *{new: old}* parameter translation table
-      from pre-4.0 Sasview
     * *composition* is None if the model is independent, otherwise it is a
       tuple with composition type ('product' or 'mixture') and a list of
@@ -723,6 +712,4 @@
         demo=getattr(kernel_module, 'demo', None),
         source=getattr(kernel_module, 'source', []),
-        oldname=getattr(kernel_module, 'oldname', None),
-        oldpars=getattr(kernel_module, 'oldpars', {}),
         tests=getattr(kernel_module, 'tests', []),
         )
Index: sasmodels/models/cylinder.py
===================================================================
--- sasmodels/models/cylinder.py	(revision 6ef42936b03a4811d7838d1ba343eeb957f3f445)
+++ sasmodels/models/cylinder.py	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -138,10 +138,4 @@
             phi_pd=10, phi_pd_n=5)
 
-# For testing against the old sasview models, include the converted parameter
-# names and the target sasview model name.
-oldname = 'CylinderModel'
-oldpars = dict(theta='cyl_theta', phi='cyl_phi', sld='sldCyl', sld_solvent='sldSolv')
-
-
 qx, qy = 0.2 * np.cos(2.5), 0.2 * np.sin(2.5)
 tests = [[{}, 0.2, 0.042761386790780453],
Index: sasmodels/product.py
===================================================================
--- sasmodels/product.py	(revision 3c6d5bcf47d2cda970035497bf883c4386f4fb94)
+++ sasmodels/product.py	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -42,10 +42,4 @@
     if len(set(p.name for p in pars)) != len(pars):
         raise ValueError("Duplicate parameters in %s and %s"%(p_id))
-    # For comparison with sasview, determine the old parameters.
-    oldname = [p_info['oldname'], s_info['oldname']]
-    oldpars = {'scale':'scale_factor'}
-    oldpars.update(p_info['oldpars'])
-    oldpars.update(s_info['oldpars'])
-
     model_info = {}
     model_info['id'] = '*'.join((p_id, s_id))
@@ -63,6 +57,4 @@
     #model_info['source'] = []
     # Iq, Iqxy, form_volume, ER, VR and sesans
-    model_info['oldname'] = oldname
-    model_info['oldpars'] = oldpars
     model_info['composition'] = ('product', [p_info, s_info])
     process_parameters(model_info)
Index: sasmodels/sasview_model.py
===================================================================
--- sasmodels/sasview_model.py	(revision 787be866d11d3e33f22f7b4ac9d0ee1a15146903)
+++ sasmodels/sasview_model.py	(revision f2473145a6baa12aa3ab15421a80d2f5d004935c)
@@ -32,8 +32,4 @@
 
     Returns a class that can be used directly as a sasview model.t
-
-    Defaults to using the new name for a model.  Setting
-    *namestyle='oldname'* will produce a class with a name
-    compatible with SasView.
     """
     model_info = core.load_model_info(model_name)
@@ -60,5 +56,4 @@
 
         self.name = model_info['name']
-        self.oldname = model_info['oldname']
         self.description = model_info['description']
         self.category = None
