SoftwareSerial interrupt conflict?

Hello Gurus, I have a timer2 interrupt of 2mSec driving my entire clock motion control program (multiple stepper motors and multi LED display). The whole thing is synched to 50Hz mains for long term accuracy with DS 1302 chip during power out. Everything works just fine. But when I include SoftwareSerial in order to add A GPS module a problem arises. Just adding the .begin creates unwanted interaction with the timer interrupt. I presume SoftwareSerial involves the use of other interrupts. Is there a way around this problem? Theres no point posting code just yet. A few suggestions would be appreciated. (IDE 1.0)

Is there a way around this problem?

Of course. http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=11&products_id=196

Software serial uses interrupts, yes. But hardly at the rate that should slow down a 50 Hz device. Perhaps more information ... like code.

http://www.gammon.com.au/interrupts

Pin change interrupts (which Software Serial uses) are higher priority than timer interrupts.

Thanks for replies.
Actually the 2mSec interrupt is used to drive steppers at 500 pps(fast) 10pps(normal run) and a synchronised 60 led array. All my routines in loop are run once every 2mSec for timer2
Just including soft serial.begin in setup() with no other calls to SoftSerial causes the 10pps motor to vary significantly.(to say nothing of what happens to the leds)
Here’s the gist( very much redacted) of the code:

SoftwareSerial GPS_comms = SoftwareSerial(A0,A1); // RX, TX
//----------------------------------------- setup -------------------------------------------
void setup(){
  Serial.begin(57600);
[color=yellow]  //GPS_comms.begin(4800);[/color]
  Serial.println("Hello");

  attachInterrupt(0,mainsInterrupt,RISING); // interrupt on digital pin 2
  //setup timer2 control registers
  TCCR2A = B00000000;    //normal operation, free running count up 
  TCCR2B = B00000110;    //divide by 256 for 62500Hz (16uSec)
  TIMSK2 = B00000010;    //interrupt on OCR2A compare
  OCR2A = 125;           // next interrupt after 2mSec


}
//-------------------------------------- timer 2 interrupt ------------------------------------
ISR (TIMER2_COMPA_vect){
  doRoutinesFlag=1;      //trigger for main loop
  OCR2A =OCR2A+125;
  if(intCount < 5){
    intCount +=1;         // reset to zero by mains intrpt
  }
  else if(intCount ==5){
    powerOnFlag=0;       // mains has fail so adjust power on flag
  }
  else if(intCount == 4){
    OCR2A +=20;          // add small value to ensure external intrpt triggers the next main loop 

  }

}

//-------------------------------------- mainsInterrupt ---------------------------------------
void mainsInterrupt(){ 
  TCNT2=0;             // resync timer to mains interrupt
  OCR2A =125;          // set next timer intrpt to 2mSec
  intCount = 0;        // was previously normally 4 (or 5 for extended power outage)
  doRoutinesFlag=1;    // trigger for main loop
  powerOnFlag=1;       //mains is back so adjust power on flag
}
//-------------------------------------- updateTime -----------------------------------------

//-------------------------------------- packBCD --------------------------------------------

//----------------------------------------sendByte --------------------------------------------

//-------------------------------------- read DS1302 -----------------------------------------

//-------------------------------------- writeHC595 ------------------------------------------

//------------------------------------- read keyboard ----------------------------------------

//--------------------------------- advance TargetCounters ----------------------------------------

//------------------------------------- moveMinuteHand ---------------------------------------

//------------------------------------- moveHourHand ---------------------------------------

//-------------------------------------- homeSwitchM -----------------------------------------

//-------------------------------------- homeSwitchH -----------------------------------------

//========================================= main loop =================================
void loop(){
  byte temp3;
 //GPS_read();
  if( doRoutinesFlag==1){      // everything following done one time only
    doRoutinesFlag=0;

 ALL OTHER STUFF HERE
}
//=====================================displayKbdMode===============================================

 
//-------------------------------------display7221--------------------------

 
//------------ flash digit -------------

HERE is test GPS code to extract time. Works fine as stand alone.
  char keyPhrase[7]="$GPRMC";

void GPS_read(){
 
  if(flag==0){                // don't read while processing in case serial data changes

  //  tempK=GPS_comms.read();

    if(tempK != -1){

      rxBuffer[x]=tempK;
      x++;

      if (tempK==13){
        flag=1;
        x=0;
        y=0;
      }
    }
  }

  if(flag==1){  
    for(byte a=1;a<7;a++){
      if(rxBuffer[a]==keyPhrase[a-1]){
        y++;
      }

    }
    if(y==6){ 
      hour[0]=rxBuffer[8];
      hour[1]=rxBuffer[9];
      hour[2]=0;        //string end character needed for the atoi function

      minute[0]=rxBuffer[10];
      minute[1]=rxBuffer[11];
      minute[2]=0;

      second[0]=rxBuffer[12];
      second[1]=rxBuffer[13];
      second[2]=0;

      z=atoi(hour);
      z=(z+10)%24;   //UTC +10hours for Victoria

      Serial.print(z);
      Serial.print(" : ");

      z=atoi(minute);

      Serial.print(z);
      Serial.print(" : ");

      z=atoi(second);

      Serial.print(z);
      Serial.print("\n");

    }
    flag=0;
  }

}

If you want precise stepping I suggest getting the timer to generate the pulses (and not an interrupt). Then it won't matter whether or not software serial is being used. You have 3 timers and (depending on your exact requirements) 2 hardware outputs per timer.

I'm currently working on generating video using this method, and the video sync pulses have to be very precise. The hardware output is working so far.