Assymetric blink with 2 LED's

This program is supposed to blink (with milis) 2 LED's in assymetric fashion: green LED for example 400ms on and 100ms off. The red LED 900ms on and 100ms off.
For some reason after about one minute both LED's remain on.
What could be wrong in this code that prevents the LED's to keep blinking?

int greenLED = 12;
int redLED = 13;
int ledStateRed = LOW;
int ledStateGreen = LOW;
unsigned long previousMillisRed = 0;
unsigned long previousMillisGreen = 0;
int longIntervalRed = 900;
int shortIntervalRed = 100;
int longIntervalGreen = 400;
int shortIntervalGreen = 100;
long intervalRed;
long intervalGreen;
int redLEDtimer;
int greenLEDtimer;

 void setup () {
  pinMode (redLED,OUTPUT);
  pinMode (greenLED, OUTPUT);
  redLEDtimer = millis ();
  greenLEDtimer = millis ();
 }

void toggleRedLED ()
{
  if (digitalRead ( redLED) == LOW) {
    digitalWrite (redLED, HIGH);
  }
  else {
    digitalWrite (redLED, LOW);
  }
   redLEDtimer = millis ();
}

void toggleGreenLED()
{
  if (digitalRead (greenLED) == LOW){
     digitalWrite (greenLED, HIGH);}
 else {
  digitalWrite (greenLED, LOW);
  }
 greenLEDtimer = millis ();
}

void loop (){
 unsigned long currentMillis = millis ();
 if (currentMillis-previousMillisRed >= intervalRed){
     previousMillisRed = currentMillis;

     if (ledStateRed == LOW) {
         ledStateRed = HIGH ;
         intervalRed = longIntervalRed;
     }   else {
         ledStateRed = LOW;
       int  intervalRed = shortIntervalRed;
     }
     digitalWrite ( redLED, ledStateRed);
 }
 if (currentMillis-previousMillisGreen >= intervalGreen){
     previousMillisGreen = currentMillis;

     if (ledStateGreen == LOW) {
         ledStateGreen = HIGH ;
         intervalGreen = longIntervalGreen;
     }   else {
         ledStateGreen = LOW;
       int  intervalGreen = shortIntervalGreen;
     }
     digitalWrite ( greenLED, ledStateGreen);
 }
}

I think I found it: redLEDtimer should be unsigned long instead of int; same for greenLEDtimer..