Index: sansview/default_categories.json
===================================================================
--- sansview/default_categories.json	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
+++ sansview/default_categories.json	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -0,0 +1,1 @@
+{"Shapes": [["PearlNecklaceModel", true], ["HollowCylinderModel", true], ["CoreMultiShellModel", true], ["FCCrystalModel", true], ["ParallelepipedModel", true], ["FuzzySphereModel", true], ["LamellarPCrystalModel", true], ["BCCrystalModel", true], ["LamellarFFHGModel", true], ["CSParallelepipedModel", true], ["OnionExpShellModel", true], ["MultiShellModel", true], ["RaspBerryModel", true], ["CoreShellEllipsoidModel", true], ["CappedCylinderModel", true], ["CylinderModel", true], ["SphericalSLDModel", true], ["SCCrystalModel", true], ["StackedDisksModel", true], ["LamellarPSHGModel", true], ["CoreShellBicelleModel", true], ["LamellarPSModel", true], ["EllipsoidModel", true], ["SphereModel", true], ["VesicleModel", true], ["TriaxialEllipsoidModel", true], ["LamellarModel", true], ["BarBellModel", true], ["CoreShellCylinderModel", true], ["BinaryHSModel", true], ["FlexibleCylinderModel", true], ["EllipticalCylinderModel", true], ["FlexCylEllipXModel", true], ["LinearPearlsModel", true], ["CoreShellModel", true]], "Structure Factor": [["SquareWellStructure", true], ["HayterMSAStructure", true], ["HardsphereStructure", true], ["StickyHSStructure", true]], "Shape-Independent": [["TwoPowerLawModel", true], ["GelFitModel", true], ["DABModel", true], ["PowerLawAbsModel", true], ["PorodModel", true], ["GuinierModel", true], ["TeubnerStreyModel", true], ["StarPolymer", true], ["BEPolyelectrolyte", true], ["UnifiedPowerRgModel", true], ["GuinierPorodModel", true], ["MassSurfaceFractal", true], ["Core2ndMomentModel", true], ["RPA10Model", true], ["TwoLorentzianModel", true], ["DebyeModel", true], ["MassFractalModel", true], ["Poly_GaussCoil", true], ["CorrLengthModel", true], ["PolymerExclVolume", true], ["FractalModel", true], ["PeakLorentzModel", true], ["BroadPeakModel", true], ["PeakGaussModel", true], ["FractalCoreShellModel", true], ["SurfaceFractalModel", true], ["GaussLorentzGelModel", true], ["LorentzModel", true]], "Uncategorized": [["ReflectivityModel", true], ["ReflectivityIIModel", true], ["PringlesModel", true], ["LineModel", true]]}
Index: sansview/installer.iss
===================================================================
--- sansview/installer.iss	(revision 386b313d7d5cb3f20848b0a69a6e10f3d9ff6cf8)
+++ sansview/installer.iss	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -73,5 +73,5 @@
 Source: "dist\plugin_models\*";	DestDir: "{userdesktop}\..\.sasview\plugin_models";	Flags: recursesubdirs createallsubdirs
 Source: "dist\config\custom_config.py";	DestDir: "{userdesktop}\..\.sasview\config";	Flags: recursesubdirs createallsubdirs
-Source: "dist\default_categories.p";    DestDir: "{userdesktop}\..\.sasview";	DestName: "serialized_cat.p";
+Source: "dist\default_categories.json";    DestDir: "{userdesktop}\..\.sasview";	DestName: "serialized_cat.json";
 ;	NOTE: Don't use "Flags: ignoreversion" on any shared system files
 
Index: sansview/installer_generator.py
===================================================================
--- sansview/installer_generator.py	(revision d73a274571dca4caa2a33187a99cce66e65a758c)
+++ sansview/installer_generator.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -201,6 +201,6 @@
     msg += """Source: "dist\config\custom_config.py";\tDestDir: "{userdesktop}\..\.sasview\config";\t""" 
     msg += """Flags: recursesubdirs createallsubdirs\n"""
-    msg += """Source: "dist\default_categories.p";    DestDir: "{userdesktop}\..\.sasview";\t""" 
-    msg += """DestName: "serialized_cat.p";\n"""
+    msg += """Source: "dist\default_categories.json";    DestDir: "{userdesktop}\..\.sasview";\t""" 
+    msg += """DestName: "serialized_cat.json";\n"""
     msg += """;\tNOTE: Don't use "Flags: ignoreversion" on any shared system files"""
     return msg
Index: sansview/setup_exe.py
===================================================================
--- sansview/setup_exe.py	(revision 2f2d9d06d2bf050db011fe7fdf384273f9bdc61f)
+++ sansview/setup_exe.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -271,5 +271,5 @@
     data_files.append(('.', [f]))
 
-f = 'default_categories.p'
+f = 'default_categories.json'
 if os.path.isfile(f):
     data_files.append(('.', [f]))
Index: sansview/setup_mac.py
===================================================================
--- sansview/setup_mac.py	(revision 397b4e7bee45507aac74c79236ea2713caa022c6)
+++ sansview/setup_mac.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -55,5 +55,5 @@
 APP = ['sansview.py']
 DATA_FILES += ['images','test','media', 'custom_config.py', 'local_config.py',
-               'default_categories.p']
+               'default_categories.json']
 if os.path.isfile("BUILD_NUMBER"):
     DATA_FILES.append("BUILD_NUMBER")
Index: setup.py
===================================================================
--- setup.py	(revision 307fa4f330240a87696b5636406cecc1a51ec776)
+++ setup.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -46,5 +46,5 @@
     if os.path.isfile(f_path):
         os.remove(f_path)
-    f_path = os.path.join(sans_dir, "serialized_cat.p")
+    f_path = os.path.join(sans_dir, "serialized_cat.json")
     if os.path.isfile(f_path):
         os.remove(f_path)
@@ -321,5 +321,5 @@
 package_dir["sans.sansview"] = "sansview"
 package_data['sans.sansview'] = ['images/*', 'media/*', 'test/*', 
-                                 'default_categories.p']
+                                 'default_categories.json']
 packages.append("sans.sansview")
 
Index: src/sans/guiframe/CategoryInstaller.py
===================================================================
--- src/sans/guiframe/CategoryInstaller.py	(revision 64beda45515af03d8281abdc22547341d3c5b7ad)
+++ src/sans/guiframe/CategoryInstaller.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -12,8 +12,8 @@
 import sys
 import shutil
-import cPickle as pickle
+import json
 from collections import defaultdict
 
-USER_FILE = 'serialized_cat.p'
+USER_FILE = 'serialized_cat.json'
 
 class CategoryInstaller:
@@ -45,7 +45,7 @@
     
     @staticmethod
-    def _get_default_cat_p_dir():
+    def _get_default_cat_file_dir():
         """
-        returns the dir where default_cat.p should be
+        returns the dir where default_cat.j should be
         """
         # The default categories file is usually found with the code, except
@@ -53,5 +53,5 @@
         # py2exe (it will be in the exec dir).
         import sans.sansview
-        cat_file = "default_categories.p"
+        cat_file = "default_categories.json"
         
         possible_cat_file_paths = [
@@ -111,5 +111,5 @@
     def get_user_file():
         """
-        returns the user data file, eg .sasview/serialized_cat.p
+        returns the user data file, eg .sasview/serialized_cat.json
         """
         return os.path.join(CategoryInstaller._get_home_dir(),
@@ -120,8 +120,8 @@
         """
         returns the path of the default file
-        e.g. blahblah/default_categories.p
+        e.g. blahblah/default_categories.json
         """
         return os.path.join(\
-            CategoryInstaller._get_default_cat_p_dir(), "default_categories.p")
+            CategoryInstaller._get_default_cat_file_dir(), "default_categories.json")
         
     @staticmethod
@@ -129,5 +129,5 @@
         """
         the main method of this class
-        makes sure serialized_cat.p exists and if not
+        makes sure serialized_cat.json exists and if not
         compile it and install
         :param homefile: Override the default home directory
@@ -146,5 +146,6 @@
         else:
             cat_file = open(default_file, 'rb')
-        master_category_dict = pickle.Unpickler(cat_file).load()
+        master_category_dict = json.load(cat_file)
+#        master_category_dict = pickle.Unpickler(cat_file).load()
         (by_model_dict, model_enabled_dict) = \
                 CategoryInstaller._regenerate_model_dict(master_category_dict)
@@ -173,5 +174,5 @@
                                                           model_enabled_dict)
             
-            pickle.dump( master_category_dict,
+            json.dump( master_category_dict,
                          open(serialized_file, 'wb') )
             
Index: src/sans/guiframe/CategoryManager.py
===================================================================
--- src/sans/guiframe/CategoryManager.py	(revision 51f1460382d03af9a969830094572115961c474d)
+++ src/sans/guiframe/CategoryManager.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -15,5 +15,5 @@
 from wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin
 from collections import defaultdict
-import cPickle as pickle
+import json
 from sans.guiframe.events import ChangeCategoryEvent
 from sans.guiframe.CategoryInstaller import CategoryInstaller
@@ -294,5 +294,5 @@
         cat_file = open(CategoryInstaller.get_user_file(), 'wb')
 
-        pickle.dump( self.master_category_dict, cat_file )
+        json.dump(self.master_category_dict, cat_file )
         
         cat_file.close()
@@ -303,12 +303,14 @@
         """
         try:
-    		file = CategoryInstaller.get_user_file()
-    		if os.path.isfile(file):
-	            cat_file = open(file, 'rb')
-	            self.master_category_dict = pickle.load(cat_file)
-	        else:
-	        	cat_file = open(CategoryInstaller.get_default_file(), 'rb')
-        		self.master_category_dict = pickle.load(cat_file)
-        	cat_file.close()
+            file = CategoryInstaller.get_user_file()
+            if os.path.isfile(file):
+                cat_file = open(file, 'rb')
+#               self.master_category_dict = pickle.load(cat_file)
+                self.master_category_dict = json.load(cat_file)
+            else:
+                cat_file = open(CategoryInstaller.get_default_file(), 'rb')
+#        		self.master_category_dict = pickle.load(cat_file)
+                self.master_category_dict = json.load(cat_file)
+            cat_file.close()
         except IOError:
             print 'Problem reading in category file. Please review'
Index: src/sans/guiframe/customdir.py
===================================================================
--- src/sans/guiframe/customdir.py	(revision 5777106e8a4a0a62fe2ee0fbaf7c0aa19c0bb92b)
+++ src/sans/guiframe/customdir.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -35,7 +35,7 @@
         os.makedirs(dir)
     file = os.path.join(dir, "custom_config.py")
-    u_dir = _find_usersasview_dir()
-    cat_file = os.path.join(u_dir, "serialized_cat.p")
-    # Place example user models as needed
+    cat_file = CategoryInstaller.get_user_file()
+    # If the user category file doesn't exist copy the default to
+    # the user directory
     if not os.path.isfile(cat_file):
         try:
Index: src/sans/perspectives/fitting/basepage.py
===================================================================
--- src/sans/perspectives/fitting/basepage.py	(revision 34dbaf435f0d0ef9233804cfba05de06edf85cbb)
+++ src/sans/perspectives/fitting/basepage.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -10,6 +10,5 @@
 import math
 import string
-import cPickle as pickle
-#import shutil
+import json
 from collections import defaultdict
 from wx.lib.scrolledpanel import ScrolledPanel
@@ -3585,7 +3584,6 @@
             if not os.path.isfile(categorization_file):
                 categorization_file = CategoryInstaller.get_default_file()
-            cat_file = open(categorization_file, 'rb')
-                            
-            self.master_category_dict = pickle.load(cat_file)
+            cat_file = open(categorization_file, 'rb')                           
+            self.master_category_dict = json.load(cat_file)
             self._regenerate_model_dict()
             cat_file.close()
Index: src/sans/perspectives/fitting/models.py
===================================================================
--- src/sans/perspectives/fitting/models.py	(revision 5777106e8a4a0a62fe2ee0fbaf7c0aa19c0bb92b)
+++ src/sans/perspectives/fitting/models.py	(revision 27b7accfe21e1b3456e646ee01adff844993eae3)
@@ -948,5 +948,4 @@
 
     CategoryInstaller.check_install(model_list=cat_model_list)
-    
     def findModels(self):
         return self.__modelmanager.findModels()
