Key pressing changes over time

I’m having problems making a simple game that flies a plane and makes soundwaves. When I push the arrow key it makes the plane go faster by a small amount but after awhile pushing the arrow seems to change the speed by more than it should. My guess is that its accumulating lag of some kind but I’m not sure how to fix it. Here’s my code

//Move the plane according to its rotation
trace(speed);
plane._x+=speed*Math.cos(plane._rotation*Math.PI/180);
plane._y+=speed*Math.sin(plane._rotation*Math.PI/180);

//Increase wave counter
waveCount++;

//Make soundwaves
if(waveCount % waveMod == 0)
{
    showMovie("sound",plane._x,plane._y);
}

//Put me back on the stage!
if(plane._x > stageWidth)
{
    plane._x = 0;
    cleanUp();
}
else if(plane._y > stageHeight)
{
    plane._y = 0;
    cleanUp();
}
else if(plane._y < 0)
{
    plane._y = stageHeight;
    cleanUp();
}

//Function for generating movieclips
function showMovie(linkageId, xpos, ypos) 
{
    var linkageId :String;
    var xpos:Number;
    var ypos:Number;
    myMovie = this.createEmptyMovieClip("myMovie", this.getNextHighestDepth());
    myMovie._x = xpos+xOffset;
    myMovie._y = ypos+yOffset;
    myMovie.attachMovie(linkageId,e,this.getNextHighestDepth());
}

//Function for getting rid of excess soundwaves
function cleanUp()
{
    for(var mc in this)
    {
        if(mc == 'myMovie')
            removeMovieClip(this[mc]);
    }
}

//Function for turning keypresses into plane movements
myListener.onKeyDown = function() 
{
    if (Key.getCode() == Key.LEFT && speed > minSpeed) 
    {
        speed -= .001;
    } 
    else if (Key.getCode() == Key.RIGHT && speed < maxSpeed) 
    {
        speed += .001;
    } 
    if (Key.getCode() == Key.UP && plane._rotation > -90) 
    {
        plane._rotation -= .001;
    } 
    else if (Key.getCode() == Key.DOWN && plane._rotation <90) 
    {
        plane._rotation += .001;
    }
};
var myListener:Button = new Button();
Key.addListener(myListener);

[/QUOh