An unfortunate Steve Cherundolo own goal gave the hosts the lead after 30 minutes, and despite Mike Hanke pulling the visitors level just after the break, Benjamin Auer responded almost immediately with the winning goal.
The visitors flew out of the blocks but were unable to maintain their upbeat start and, led by Stanislav Sestak, the hosts began to dominate.
With 17 minutes played the Bochum forward caused trouble when he stole the ball on the edge of the area, allowing Auer to fire an effort straight at Robert Enke in the visitors' goal.
Enke was not as lucky 12 minutes later when Tomasz Zdebel played a great pass from inside his own half, putting Sestak through on goal. Enke stood up well to the Slovakian's shot, but his parried save ricocheted off Cherundolo's knee and into the net.
Hannover found no response in the final minutes of the first half, but got back on level terms straight away in the second with some classic route one football.
Michael Tarnat launched a pass from his own half which Bergantin Vinicius volleyed back across goal for Hanke to head home.
Their celebrations were shortlived, however, as just four minutes later the unstoppable Sestak sent a cross into the area which Auer met with an acrobatic diving header to put the hosts back in front.
Bochum lost Philipp Bonig to injury on 66 minutes but had no other problems retaining their lead.
They could have increased the score, but Sestak shot wide under pressure from Tarnat with seven minutes left.
| Teams |
| VfL Bochum |
Hannover 96 |
| 27 Jan Lastuvka |
1 Robert Enke |
| 24 Philipp Bönig |
6 Steven Cherundolo |
| 4 Marcel Maltritz |
22 Frank Fahrenhorst |
| 25 Antar Yahia |
19 Christian Schulz |
| 21 Marc Pfertzel |
18 Michael Tarnat |
| 8 Tomasz Zdebel |
2 Vinicius |
| 15 Daniel Imhof |
14 Hanno Balitsch |
| 13 Danny Fuchs |
10 Arnold Bruggink |
| 23 Shinji Ono |
26 Jan Rosenthal |
| 14 Benjamin Auer |
17 Gaétan Krebs |
| 9 Stanislav Sestak |
9 Mike Hanke |
| Substitutes |
| 22 Mimoun Azaouagh |
Vahid Hashemian 16 |
| 6 Pavel Drsek |
Benjamin Lauth 21 |
| 18 Oliver Schröder |
Dariusz Zuraw 3 |
| 3 Martin Meichelbeck |
Jiri Stajner 24 |
| 31 René Renno |
Richard Golz 20 |
| 10 Joel Epalle |
Salvatore Zizzo 15 |
| 11 Marcin Mieciel |
|
| Substitutions |
Martin Meichelbeck for Philipp Bönig (67)
|
Vahid Hashemian for Jan Rosenthal (45)
|
Oliver Schröder for Danny Fuchs (75)
|
Benjamin Lauth for Arnold Bruggink (45)
|
Joel Epalle for Stanislav Sestak (87)
|
Jiri Stajner for Gaétan Krebs (72)
|
| Yellow Cards |
Stanislav Sestak (62)
|
Frank Fahrenhorst (16)
|
Tomasz Zdebel (90)
|
Hanno Balitsch (42)
|
Jan Lastuvka (90)
|
Mike Hanke (60)
|