Did you try/hear about Selenide (http://selenide.org/)?
It's pretty simple wrapper, that gives you a "lazy proxy" version of WebElement (SelenideElement), so you don't need to use all these bulky and limiting agility @FindBy-s.
It also gives more "readable" explicit waits of style:
element.shouldHave(text("foo"));
over Selenium's: