Index: WAeUP_SRP/base/WAeUPTool.py
===================================================================
--- WAeUP_SRP/base/WAeUPTool.py	(revision 2432)
+++ WAeUP_SRP/base/WAeUPTool.py	(revision 2433)
@@ -1298,9 +1298,9 @@
             for field in f2t[pt]['fields']:
                 d[field] = mapping.get(field,'')
-            if pt == "StudyCourse":
-                for von,zu in (('entry_mode','current_mode'),
-                               ('entry_session','current_session')):
-                    if mapping.get(zu,None) is None and mapping.get(von,None) is not None:
-                        d[zu] = mapping[von]
+            # if pt == "StudyCourse":
+            #     for von,zu in (('entry_mode','current_mode'),
+            #                    ('entry_session','current_session')):
+            #         if mapping.get(zu,None) is None and mapping.get(von,None) is not None:
+            #             d[zu] = mapping[von]
             sub_doc.edit(mapping = d)
 
@@ -1472,4 +1472,13 @@
                     em = 'not ignorable key(s): "%s" found in heading' % ", ".join(diff2schema)
                     return em
+                if mode == "create":
+                    required_keys = [layout.getIdUnprefixed(id) 
+                                     for id,widget in layout.objectItems()
+                                     if widget.is_required]
+                    #import pdb;pdb.set_trace()
+                    if not set(required_keys).issubset(set(import_keys)):
+                        diff2import = set(required_keys).difference(set(import_keys))
+                        em = 'required key(s): "%s" not found in heading' % ", ".join(diff2import)
+                        return em
                 s = ','.join(['"%s"' % fn for fn in import_keys])
                 open("%s/import/%s_not_imported%s.csv" % (i_home,filename,current),"a").write(s + ',"Error"'+ '\n')
@@ -1484,5 +1493,4 @@
             error_string = ""
             for k in import_keys:
-                #import pdb;pdb.set_trace()
                 if not validators[k](ds,mode=mode):
                     error_string += " %s : %s" % (k,
@@ -1490,8 +1498,11 @@
                                                                            ds.getErrorMapping(k)))
             if not error_string:
-                item.update(dm)
-                item['id'],error = importer(item)
+                temp_item = item.copy()
+                temp_item.update(dm)
+                item['id'],error = importer(temp_item)
                 if error:
                     error_string += error
+                else:
+                    item = temp_item
             if error_string:
                 item['Error'] = error_string
Index: WAeUP_SRP/base/Widgets.py
===================================================================
--- WAeUP_SRP/base/Widgets.py	(revision 2432)
+++ WAeUP_SRP/base/Widgets.py	(revision 2433)
@@ -488,4 +488,8 @@
     def _getLGAs(self):
         voc = getattr(self.portal_vocabularies,self.vocabulary)
+        if getattr(self,'_v_states',None) is not None and\
+           getattr(self,'_v_lgas',None) is not None and\
+           getattr(self,'_v_d',None) is not None:
+            return (_v_d,_v_states,_v_lgas)
         states = []
         lgas  = []
@@ -506,5 +510,7 @@
                 lgas.append(lga)
             d[k] = v
-
+        self._v_d = d
+        self._v_state = state
+        self._v_lga = lga
         return (d,states,lgas)
 
@@ -521,34 +527,27 @@
         v = v.lower()
         combined,states,lgas = self._getLGAs()
-        one_field = False
-        if len(v) == 0:
-            pass
-        elif not self.state_field and not self.lga_field:
-            one_field = True
-            if v not in combined.keys():
+        datamodel = datastructure.getDataModel()
+        if not self.state_field and not self.lga_field:
+            if len(v) == 0 and self.is_required:
+                datastructure.setError(widget_id, "%s required" % widget_id)
+                return 0
+            elif v not in combined.keys():
                 datastructure.setError(widget_id, "'%s' not a valid lga key" % v)
                 return 0
-        else:
+            datamodel[self.fields[0]] = v
+        else:
+            state = datastructure.get(self.state_field,"").lower()
+            lga = datastructure.get(self.lga_field,"").lower()
             if widget_id == self.state_field:
-                if v not in states:
+                if state not in states:
                     datastructure.setError(widget_id, "'%s' not a valid state" % v)
                     return 0
             elif widget_id == self.lga_field:
-                if "_".join(re.split('\W+',v)) not in lgas:
+                if lga not in lgas:
                     datastructure.setError(widget_id, "'%s' not a valid lga" % v)
                     return 0
-                if datastructure[self.state_field]:
-                    v = datastructure[self.state_field] + '_' + v
-
-        if self.is_required and not len(v):
-            datastructure.setError(widget_id, "lga required")
-            return 0
-
-        datamodel = datastructure.getDataModel()
-        if one_field:
-            datamodel[self.fields[0]] = v
-        else:
-            state = datastructure[self.state_field].lower()
-            lga = "_".join(datastructure[self.lga_field].lower().split())
+            if len(state) == 0 or len(lga) == 0:
+                datastructure.setError(widget_id, "state AND lga must be given")
+                return 0
             datamodel[self.fields[0]] =   state + "_" + lga
         return 1
