Keyboard movement, multiple keys pressed

Hi, Im having a problem getting responsive keyboard movement.

I have a key_up listener which fails to trigger when 3 keys are down.

E.g. Imagine up and right keys are being pressed to move up + right. The user wants to change to moving up + left. The user presses the left key before lifting thg right key.

I have a key_up listener to detect when a key is no longer being pressed. However in this scenario it fails to trigger when 3 keys are pressed.

Even in this online example, there is the same problem, look how unresponsive it is when chaging from up right to up left really quickly.

http://www.freeactionscript.com/2009/02/multiple-key-press-detection/

Does anyone know a way to solve this?
Below is my code:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandlerDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyDownHandlerUp);

var upStatus:Boolean = false;
var leftStatus:Boolean = false;
var rightStatus:Boolean = false;
var downStatus:Boolean = false;

var lastKey:int;


function keyDownHandlerDown(event:KeyboardEvent,repeat:Boolean = false):void 
    {
        if ((event.keyCode != lastKey)||(repeat == true)||((event.keyCode == lastKey)&&(upStatus == false)&&(downStatus == false)&&(leftStatus == false)&&(rightStatus == false)))
            {
                if (repeat == false)
                    {
                        if (event.keyCode == Keyboard.LEFT)
                            {
                                leftStatus = true;
                            }
                        else if (event.keyCode == Keyboard.RIGHT)
                            {
                                rightStatus = true;
                            }
                        else if (event.keyCode == Keyboard.UP)
                            {
                                upStatus = true;
                            }
                        else if (event.keyCode == Keyboard.DOWN)
                            {
                                downStatus = true;
                            }    
                    }
                
                if ((upStatus == false)&&(downStatus == false)&&(leftStatus == true)&&(rightStatus == false))
                    {
                        stopMove();
                        moveIt(0,panRectangle.y);
                    }
                else if ((upStatus == false)&&(downStatus == false)&&(leftStatus == false)&&(rightStatus == true))
                    {
                        stopMove();
                        moveIt(house.width - WIDTH,panRectangle.y);
                    }
                else if ((upStatus == false)&&(downStatus == true)&&(leftStatus == false)&&(rightStatus == false))
                    {
                        stopMove();
                        moveIt(panRectangle.x,house.height - HEIGHT);
                    }
                else if ((upStatus == true)&&(downStatus == false)&&(leftStatus == false)&&(rightStatus == false))
                    {
                        stopMove();
                        moveIt(panRectangle.x,0);
                    }
                else if ((upStatus == false)&&(downStatus == true)&&(leftStatus == true)&&(rightStatus == false))
                    {
                        stopMove();
                        moveIt(undefined,undefined,"DL");
                    }
                else if ((upStatus == true)&&(downStatus == false)&&(leftStatus == true)&&(rightStatus == false))
                    {
                        stopMove();
                        moveIt(undefined,undefined,"UL");
                    }
                else if ((upStatus == true)&&(downStatus == false)&&(leftStatus == false)&&(rightStatus == true)) 
                    {
                        stopMove();
                        moveIt(undefined,undefined,"UR");
                    }
                else if ((upStatus == false)&&(downStatus == true)&&(leftStatus == false)&&(rightStatus == true))
                    {
                        stopMove();
                        moveIt(undefined,undefined,"DR");
                    }
                
                lastKey = event.keyCode;
            }
    }
    
function keyDownHandlerUp(event:KeyboardEvent):void 
    {
        stopAutoMove();
        if (event.keyCode == Keyboard.LEFT)
            {
                leftStatus = false;
            }
        else if (event.keyCode == Keyboard.RIGHT)
            {
                rightStatus = false;
            }
        else if (event.keyCode == Keyboard.UP)
            {
                upStatus = false;
            }
        else if (event.keyCode == Keyboard.DOWN)
            {
                downStatus = false;
            }
            
        keyDownHandlerDown(event,true);
    }