diff --git a/extensions/chaeo/examples/transfer_labels_to_ilastik_object_classifier.py b/extensions/chaeo/examples/transfer_labels_to_ilastik_object_classifier.py
index 3a19b4251e34845e3fc677ebe919ac59b2bd1c03..46ea29889d20ec6b479dccc418144227be38b390 100644
--- a/extensions/chaeo/examples/transfer_labels_to_ilastik_object_classifier.py
+++ b/extensions/chaeo/examples/transfer_labels_to_ilastik_object_classifier.py
@@ -98,7 +98,7 @@ def generate_ilastik_object_classifier(
     Starting with a template project file, transfer input data and labels to a duplicate project file.
 
     :param template_ilp: absolute path to existing ilastik object classifier to use as a template
-    :param where: location of folder containing input data, segmentation maps, labels, and label descriptions
+    :param where: absolute path to folder containing input data, segmentation maps, labels, and label descriptions
     :poram stack_name: prefix of .tif and .csv files that contain classifier training data (e.g. train, test)
     :param lane: ilastik lane identifier
     :return: (str) name of new ilastik classifier project file
@@ -106,12 +106,12 @@ def generate_ilastik_object_classifier(
 
     # validate z-stack input data
     root = Path(where)
-    paths = {
-        'Raw Data': root / f'zstack_{stack_name}_raw.tif',
-        'Segmentation Image': root / f'zstack_{stack_name}_mask.tif',
+    rel_paths = {
+        'Raw Data': Path(f'zstack_{stack_name}_raw.tif'),
+        'Segmentation Image': Path(f'zstack_{stack_name}_mask.tif'),
     }
 
-    accessors = {k: generate_file_accessor(pa) for k, pa in paths.items()}
+    accessors = {k: generate_file_accessor(root / pa) for k, pa in rel_paths.items()}
 
     assert accessors['Raw Data'].chroma == 1
     assert accessors['Segmentation Image'].is_mask()
@@ -153,23 +153,39 @@ def generate_ilastik_object_classifier(
             return df_patches.loc[df_patches.zi == idx, 'annotation_class_id'].iat[0]
 
         for hg in ['Raw Data', 'Segmentation Image']:
-            set_ds(hg, 'filePath', paths[hg].__str__())
-            set_ds(hg, 'nickname', paths[hg].stem)
+            set_ds(hg, 'filePath', rel_paths[hg].__str__())
+            set_ds(hg, 'nickname', rel_paths[hg].stem)
             shape_zyx = [accessors[hg].shape_dict[ax] for ax in ['Z', 'Y', 'X']]
             set_ds(hg, 'shape', np.array(shape_zyx))
 
         # change key of label names
-        del h5['ObjectClassification/LabelNames']
+        if (k_ln := 'ObjectClassification/LabelNames') in h5.keys():
+            del h5[k_ln]
         ln = np.array(label_names)
-        h5.create_dataset('ObjectClassification/LabelNames', data=ln.astype('O'))
+        h5.create_dataset(k_ln, data=ln.astype('O'))
+
+        if (k_mn := 'ObjectClassification/MaxNumObj') in h5.keys():
+            del h5[k_mn]
+        # h5.create_dataset(k_mn, data=(len(label_names) - 1))
+        h5[k_mn] = len(label_names) - 1
+
+        del h5['currentApplet']
+        h5['currentApplet'] = 1
 
         # change object labels
-        la_groupname = f'ObjectClassification/LabelInputs/{lns}'
-        del h5[la_groupname]
-        lag = h5.create_group(la_groupname)
+        if (k_li := f'ObjectClassification/LabelInputs/{lns}') in h5.keys():
+            del h5[k_li]
+        lag = h5.create_group(k_li)
         for zi in range(0, nz):
             lag[f'{zi}'] = np.array([0., float(get_label(zi))])
 
+        # delete existing classification weights
+        if (k_rf := f'ObjectExtraction/RegionFeatures/{lane:04d}') in h5.keys():
+            del h5[k_rf]
+        if (k_cf := 'ObjectClassification/ClassificationForests') in h5.keys():
+            del h5[k_cf]
+
+
     return new_ilp
 
 def compare_object_maps(truth: GenericImageDataAccessor, inferred: GenericImageDataAccessor) -> pd.DataFrame:
@@ -218,6 +234,7 @@ if __name__ == '__main__':
         proj_name='auto_obj_before'
     )
 
+
     def infer_and_compare(ilp, suffix):
         # infer object labels from the same data used to train the classifier
         train_zstack_raw = generate_file_accessor(where_patch_stack / 'zstack_train_raw.tif')
@@ -234,6 +251,16 @@ if __name__ == '__main__':
         print('Truth and inferred labels match?')
         print(pd.value_counts(df_comp['truth_label'] == df_comp['inferred_label']))
 
+        # report out some things for debugging
+        rks = [
+            'ObjectClassification/MaxNumObj',
+            'ObjectClassification/LabelInputs/0000/0',
+            'currentApplet'
+        ]
+        with h5py.File(ilp, 'r') as h5:
+            for r in rks:
+                print(f'{r}: {h5[r][()]}')
+
     # infer object labels from the same data used to train the classifier
     infer_and_compare(auto_ilp, 'before')