private void process()
    {
        // Get the first command off the command queue and process it
        if (m_oCommandQueue != null && m_oCommandQueue.size() > 0)
        {
            // TODO: Optimise this method
            for (int i= this.getCommandProcessCount(); i>0 && m_oCommandQueue.size() > 0; i--)
            {
                ICommand<?, ?> loCommand;
                synchronized (m_oCommandQueue)
                {
                    loCommand = m_oCommandQueue.poll();
                    m_oCurrent = loCommand;
                }
                if (loCommand != null)
                {
                    try
                    {
                        loCommand.execute();
                    }
                    catch (Throwable ex)
                    {
                        Application.getInstance().log(ex);
                    }

                    // TODO: Implement this with asynchronous commands as well
                    addCompletedCommand(loCommand);
                    if (m_oCurrent == loCommand)
                    {
                        m_oCurrent = null;
                    }
                }
            }
        }
    }