UserData *Container::reInsert(UserData *ud,HPOINTER icon)
{
    PRECORDCORE parent;
    
    parent = (PRECORDCORE)WinSendMsg(cont,CM_QUERYRECORD,MPFROMP(ud),MPFROM2SHORT(CMA_PREV,CMA_ITEMORDER));
    
    if (parent == NULL)
        parent = (PRECORDCORE)CMA_FIRST;
    
    // make a backup of our object
    UserData keep;
    memcpy(&keep,ud,sizeof(UserData));

    // remove AND delete (takes out any kids too!)
    WinSendMsg(cont,CM_REMOVERECORD,MPFROMP(&ud),MPFROM2SHORT(1,CMA_FREE));
    
    ud = allocateRecords(1);
    ud->setName(keep.getName());
    ud->setSkipped(keep.getSkipped());
    ud->setCollapsed(keep.getCollapsed());
    ud->setCull(keep.getCull());
    ud->setStart(keep.getStart());
    ud->setType(keep.getType());
    ud->setParent(keep.getParent());
    ud->setIcons(icon,icon);
    
    RECORDINSERT ri;   
    memset(&ri,0,sizeof(RECORDINSERT));
    ri.cb = sizeof(RECORDINSERT);
    if (!keep.getParent() || !keep.getParent()->getCollapsed())
        ri.fInvalidateRecord = TRUE;
    ri.pRecordParent = (PRECORDCORE)ud->getParent();
    ri.pRecordOrder = (RECORDCORE*)parent;
    ri.cRecordsInsert = 1;                  // number of records to insert
    
    // re-insert
    WinSendMsg(cont,CM_INSERTRECORD,MPFROMP((PRECORDCORE)ud),MPFROMP(&ri));
    setItemFocus(ud);
    
    return ud;
}