Prima di controllare tutto il codice, hai fatto un po' di debugging, linea per linea, controllando i valori dei dati per capire dove può essere il problema?