
Welcome to the Goal . com 50 ! In this special series , Goal . com editors worldwide vote for the top 50 players of 2010-11 . We count down to the announcement of the winner on August 22 with profiles of each and every player who made it into the top 50 ... Do n't Miss Goal . com 50 : Xavi ( 3 ) Goal . com 50 : Andres Iniesta ( 4 ) Goal . com 50 : Radamel Falcao ( 5 ) Goal . com 50 : Nemanja Vidic ( 6 ) On Wednesday night , Lionel Messi produced one of the finest individual performances seen on a football field in recent memory . Two fantastic goals and one quite wonderful assist swung a captivating Clasico against Real Madrid in Barcelona’s favour . And yet , after the game , nobody was talking about the Argentine forward . There were other talking points , of course . There was Marcelo’s foul on Cesc Fabregas , Jose Mourinho poking Barca assistant coach Tito Vilanova in the eye , David Villa’s slap on Mesut Ozil and a whole host of other ill-tempered incidents , not to mention an epic encounter between two superb sides . Nevertheless , Messi’s masterclass had been the difference between a magnificent Madrid and a Barca team struggling to keep the pace with their biggest rivals . Having netted a vital goal in the first leg at the Santiago Bernabeu , Leo won the return almost single-handedly . It was a performance worthy of acclaim and accolades aplenty , of extreme eulogy . Quite simply , though , there is now little left to say about Messi’s magic and marvel . As Pep Guardiola has oft opined : “ We are running out of words to describe Leo . ” Indeed , decisive displays have become the norm when it comes to this exceptional young man ; peerless performances are not only hoped for by Barcelona players and their fans , but expected . " There are no words to describe Messi . You have to see it - it is something you cannot describe because you have to see it to believe it . " - Barcelona boss Pep Guardiola The Camp Nou crowds have become accustomed to special stars . Diego Maradona , Johan Cruyff , Ronaldo , Rivaldo and Romario have all graced the turf at Barca 's famous old stadium . But none have done so quite as brilliantly – or consistently – as Messi . The new season has barely begun and Leo already has three goals in two games , having only just returned from his holidays – and a disappointing Copa America campaign with Argentina – ahead of the Supercopa’s first leg in Madrid . Last term , he hit 53 in just 55 games , racking up an incredible 24 assists along the way . MOMENT OF THE SEASON CHAMPIONS LEAGUE SEMI-FINAL L1 REAL MADRID 0-2 BARCELONA Just as he did in last week 's Spanish Supercopa , Messi proved the difference between Barca and Madrid as he decided this tie with a brilliant brace at the Bernabeu , including a stunning second which saw him beat no less than four Real players on a trademark slalom run towards goal and angled finish past Iker Casillas . Messi missed out as Barca began the 2010-11 campaign with a 3-1 defeat in the first leg of the Supercopa in Seville , having been away on international duty earlier in the week . Back for the Camp Nou clash , however , the Argentine blew away the Andalusians with a brilliant hat-trick to ensure Barca started the season as they have become accostumed of late – by winning trophies . Leo then took just three minutes to make his mark in La Liga , netting his side’s first of the campaign in a 3-0 win at Racing Santander . Be it Supercopa , Liga , Copa del Rey or Champions League , Messi made his mark . A brilliant brace against Panathinaikos was accompanied by two assists and the Argentine came within a whisker of his hat-trick , rattling the woodwork on two occasions . A treble did come in a 5-0 thrashing of Betis in the Copa del Rey , though , while another arrived in the historic 8-0 humiliation of Almeria . Those were part of the forward’s most prolific scoring run as he netted in nine consecutive games . He was unable to make it a perfect 10 in his side’s next fixture , but will hardly have cared as the Catalans trounced Real Madrid 5-0 . In that match , Messi demonstrated to the watching world just how much of a complete player he has become . There were no goals , nor mazy runs , but two glorious assists for Villa and a breathtaking display of pressure and passing to inflict upon Mourinho his worst ever result as coach . The goals continued to fly in after that , with two more at Osasuna and another brace against Real Sociedad , capping a sensational 2010 as he beat off team-mates Andres Iniesta and Xavi to the Fifa Ballon d’Or . But he would be even more decisive in 2011. When Barca were in need of inspiration , there was Messi to provide it . Two goals , including a sensational strike to open the scoring , saw the Catalan club overcome a 2-1 first-leg deficit in the last 16 of the Champions League against Arsenal , while a hat-trick against Atletico Madrid saw the Catalans achieve a 16th successive victory , breaking a record held by Alfredo Di Stefano’s brilliant Real side of the 1960s . He also bagged the only goal of the game in a vital league win at Valencia and surpassed his previous mark of 47 goals – which he had tied with Ronaldo the season before – with another strike in the Champions League quarter-final against Shakhtar Donetsk . The best , however , was yet to come . After the disappointment of losing the final of the Copa del Rey to Madrid , Messi soon erased the pain with both goals – including a stunning second – as Guardiola’s side erased memories of that defeat with a 2-0 win at the Santiago Bernabeu , which sealed their passage - following a 1-1 draw at Camp Nou in the second leg - to the European showpiece against Manchester United at Wembley . " While Ronaldo remains selfish at times , Leo 's decision-making is impeccable ; he knows when to shoot , when to pass and even when to return , conserving his energies for quick , intuitive bursts and sprints . The results are often devastasting . " For the second time in three years , Barca and United squared up in the final . And Messi , who had converted with a superb header in a 2-0 win in 2009 , beat Edwin Van der Sar this time with a thunderous left-footed drive which gave the Dutch keeper no time to react on its way in from outside the box . It turned out to be the game-winning goal and was a fitting end to a fairytale season for Barca 's talisman . His 53 strikes saw him tied with Cristiano Ronaldo at the end of the campaign , but while both players were lauded for their sensational scoring form , Messi’s were more often decisive . The Argentine’s assist total also shows he provided more than the Portuguese . While Ronaldo remains selfish at times , Leo’s decision-making is impeccable ; he knows when to shoot , when to pass and even when to run , conserving his energies for quick , intuitive bursts and sprints . The results are often devastating : Lionel Andres Messi is the best player in the world’s best team , still the finest footballer on the planet and our overwhelming choice as Goal . com’s prime performer from the last 12 months . With few adjectives left to describe his talents , perhaps the title of the Tina Turner track that blasts out of the tannoys before Barca’s matches at Camp Nou is all that is required . Goal . com 50’s worthy winner , Lionel Messi : Simply The Best . 