timer1 stuck at 0 after overflow!

Hi Guys, i would like to thank you in advance for helping with this problem.

I am setting the input capture peripheral on timer 1 of the atmega328.

In my application the timer will overflow, so I activated the overflow interrupt to increase a variable and add 2^16 to the result.

Problem:
When timer 1 overflows, the variable increases as expected, however timer 1 stops counting and the result is always displayed as zero. Therefore my result is always 0+(n*2^16).

What am I doing wrong?

#
/*
 * InputCapture
 * uses timer hardware to measure pulses on pin 8 on Mega328
 */

const int inputCapturePin = 8;     // input pin fixed to internal Timer
unsigned long int results;
int i=0;                           // Timer 1 overflow counter

void setup() 
{
  Serial.begin(36621);             // 9600bps at 4.194304MHz
  pinMode(inputCapturePin, INPUT); // ICP pin (digital pin 8 on Arduino) as input
  
 // TCCR1B = (1<<CS10);
  TCCR1A = 0 ;                     // Normal counting mode
  TCCR1B |= _BV(TOIE1);            // enable input capture
    
  bitSet(TIMSK1,ICIE1);            // enable input capture interrupt for timer 1 
  bitSet(TIMSK1, TOIE1);           // enable timer 1 overflow flag
}

//Print timer 1 total counts since last pulse
void loop() 
{
  Serial.println(results);   // duration in microseconds
}

//**********Interrupts************************************************************

//ICR interrupt vector
ISR(TIMER1_CAPT_vect)
{
  TCCR1B = _BV(WGM12) | _BV(CS10); // Timer 1 clock source = FOsc
  //TCCR1B|=(1<<CS10) | (1<<CS12); // Timer 1 clock source = FOsc/1024
  results = (ICR1+(i*65536));      // Save the input capture value 
  i=0;                             // Timer1 overflow counter
  TCNT1 = 0;                       // reset timer 1 counter
// TCCR1B ^= _BV(ICES1);           // toggle bit to trigger on the other edge
}

//Overflow interrupt vector
ISR(TIMER1_OVF_vect) 
{     
  i++;                             //Increment timer 1 overflow counter
  //bitSet(TIMSK1, TOIE1); 
}

results is used by loop() and the interrupt handler. loop() has no idea that results can be changed, because results is not volatile.

It should be.