Manchester United surrendered their 23-match unbeaten home record in the Champions League and missed the chance to secure top spot in Group A when losing 1-0 to Besiktas.
Rodrigo Tello scored against the run of play on 20 minutes to defeat an understrength United side with a shot that deflected off Rafael da Silva and past Ben Foster. The result means that to guarantee top spot, United must take a point in their final group game against Wolfsburg, while a 1-0 or 2-1 loss, or a defeat by two or more goals, will give the Germans first place.
Wolfsburg lost to CSKA Moscow in the early kick-off. Bosnian striker Edin Dzeko put the German side in front after 19 minutes at the Luzhniki Stadium but CSKA mounted an impressive second half comeback, scoring through Tomas Necid (58) and Milos Krasic (66). CSKA need to better Wolfsburg's result to finish in second place.
Bayern Munich could have been eliminated on Wednesday night but a combination of their 1-0 win over Maccabi Haifa in Germany and Juventus' defeat in Bordeaux sets up a huge meeting on the final day in Turin to determine who finishes in second place. Bayern must win in Italy to join Bordeaux in the knockout stages, but a draw is enough for Juve.
Bayern carved out a succession of chances when dominating their home game against Maccabi Haifa, but required a solitary strike from Croatian forward Ivica Olic after 62 minutes to see off the Israeli side. Olic pounced after a shot from Mario Gomez had been saved.
Meanwhile, Bordeaux secured top spot in Group B when defeating Juventus 2-0 thanks to goals from Fernando Menegazzo (54) and Marouane Chamakh (90).
In Group C Real Madrid edged past FC Zurich thanks to Gonzalo Higuaín's first half goal. Real should have won by a far more convincing margin but spurned a host of chances.
Cristiano Ronaldo came off the bench to make his first appearance since early October, and could now play a big part in Sunday's Clasico with La Liga rivals Barcelona.
AC Milan and Marseille drew 1-1 in an entertaining game at the San Siro. Marco Borriello put the Rossoneri ahead after just ten minutes but Lucho González capitalised on a mistake from Milan 'keeper Dida to bring Marseille level.
Marseille hit the upright twice in the second half but couldn't force the winner that would have put them second in the group. They face Real Madrid in their final game knowing they will more than likely need to win to go through. If AC Milan beat Zurich in their final game they will go through too.
In Group D Chelsea secured top spot with a hard fought 1-0 win against Porto at the Estadio do Dragao. Nicolas Anelka's second half diving header from Florent Malouda's cross was enough to win the game. Porto are already through but will finish as runners-up.
In Group D's other match Apoel Nicosia and Atletico Madrid drew 1-1. Nenad Mirosavljevic gave the Cypriot side a first-half lead but Simão eqaulised in the second half.
Apoel remain bottom of the group but are only one point behind Atletico. The team that finishes third will qualify for a Europa League spot.