Structure for SmoothingGroups

I’m developping an OpenGL Delphi Component that already knows to determine smoothing groups given an certain spearation angle between 2 faces.

The though part comes when i have to compute normals, as i have to consider the smooting groups. I store for each face the list of pointers to the neighbouring faces having the same SmoothingGroup (in fact I store faces by SmoothingGroups)

The question is : Can i store more efficiently my information?

I have implemented my own rotation procedure(i need it to do some collision detection) that actually changes the values of each vertex instead of multiplying them by a rotation matrix and so I have to recompute normals (allthough I never tryied to multiply the normal vectors too, and that might be easier and faster).

Using this solution i have some speed problems with highpolycount objects. Do you think that
I should change the way i store data or is it the fact that for each frame i recompute the normals the cause of the lowFPS?