public <T extends Arguments> ICommand<?, ?> getCommandHandler(String tcCommand, Class toInterface, T toArgs)
    {
        List<ICommand<T, ?>> loCommandObjects = (List<ICommand<T, ?>>)Application.getInstance().getObjectCache().getObject(m_oInterface, tcCommand);
        if (loCommandObjects != null && loCommandObjects.size() > 0)
        {
            ICommand<T, ?> loCommand = loCommandObjects.get(0);
            try
            {
                // TODO: Make this not require a new instance (flyweight)
                loCommand = loCommand.getClass().newInstance();
                loCommand.setArguments(toArgs);
            }
            catch (InstantiationException ex)
            {
                new Goliath.Exceptions.Exception(ex);
            }
            catch (IllegalAccessException ex)
            {
                new Goliath.Exceptions.Exception(ex);
            }
            return loCommand;
        }
        throw new InvalidParameterException("No command handler available for the command " + tcCommand, "tcCommand", tcCommand);
    }