mergeVals = [row.getValue(fld) for fld in mergeFlds]
   inter[(source, target)] = mergeVals
   reversed = (target, source)
   # if reversed in inter:
     # inter[(source, target)] = inter[reversed]
     # inter[reversed] = mergeVals
   # else:
     # inter[(source, target)] = mergeVals
 del readCursor, row
 common.progress('creating output fields')
 outFlds = [('M_' + fld)[:10] for fld in mergeFlds]
 existFlds = common.fieldList(interLayer)
 for i in range(len(outFlds)):
   if outFlds[i] in existFlds:
     common.warning('Field %s already exists, contents will be overwritten' % outFlds[i])
     arcpy.DeleteField_management(interLayer, outFlds[i])
   else:
     arcpy.AddField_management(interLayer, outFlds[i], common.fieldType(type(mergeVals[i]))) # uses mergeVals from previous cycle... dragons
 common.progress('writing output')
 writeCursor = arcpy.UpdateCursor(interLayer)
 for row in writeCursor:
   reversed = (row.getValue(toFld), row.getValue(fromFld))
   if reversed in inter:
     values = inter[reversed]
     for i in range(len(values)):
       row.setValue(outFlds[i], values[i])
   else:
     for i in range(len(outFlds)):
       row.setNull(outFlds[i])
   writeCursor.updateRow(row)
 del writeCursor, row
common.progress("starting route search")
connRows = arcpy.SearchCursor(TMP_RSING_LAY, "", "", "", sorter)
prevOID = None
prevDID = None
prevImp = None
start = True
sequence = False  # if a sequence of identical tuples of O_ID, D_ID has been detected
for connRow in connRows:
    oID = connRow.getValue(oIDFld)
    dID = connRow.getValue(dIDFld)
    impedVal = connRow.getValue(impedance)
    if start:  # start at the second row
        start = False
        # add fields to output table and open cursor
        common.progress("preparing output table")
        arcpy.AddField_management(outputPath, common.NEIGH_FROM_FLD, common.fieldType(type(oID)))
        arcpy.AddField_management(outputPath, common.NEIGH_TO_FLD, common.fieldType(type(dID)))
        arcpy.AddField_management(outputPath, impedance, common.fieldType(type(impedVal)))
        common.progress("opening output table")
        outputRows = arcpy.InsertCursor(outputPath)
        common.progress("writing output")
    else:
        if oID == prevOID and dID == prevDID:  # same as previous, detect sequence
            sequence = True
        else:
            if sequence:  # end of sequence, disregard it
                sequence = False
            else:  # unique record - add neighbour record
                outRow = outputRows.newRow()
                outRow.setValue(common.NEIGH_FROM_FLD, prevOID)
                outRow.setValue(common.NEIGH_TO_FLD, prevDID)