# 1988–89 European Cup

The 1988–89 European Cup was the 34th season of the European Cup football club tournament. The competition was won by Milan, the first time since 1969 and third time overall, comfortably defeated former winners Steaua București in the final.
As the defending champions, PSV Eindhoven received a bye to the second round, but were eliminated by Real Madrid in the quarter-finals. English clubs were still banned, following the Heysel Stadium disaster of 1985, so Liverpool were denied a place in the competition.

## Teams

| 17 Nëntori (1st) | Rapid Wien (1st) | Club Brugge (1st) | Vitosha Sofia (1st) |
| Pezoporikos Larnaca (1st) | Sparta Prague (1st) | Brøndby (1st) | HJK (1st) |
| Monaco (1st) | BFC Dynamo (1st) | Werder Bremen (1st) | AEL (1st) |
| Budapesti Honvéd (1st) | Valur (1st) | Dundalk (1st) | Milan (1st) |
| Jeunesse Esch (1st) | Ħamrun Spartans (1st) | PSV Eindhoven (1st) | Glentoran (1st) |
| Moss (1st) | Górnik Zabrze (1st) | Porto (1st) | Steaua București (1st) |
| Celtic (1st) | Real Madrid (1st) | IFK Göteborg (1st) | Neuchâtel Xamax (1st) |
| Galatasaray (1st) | Spartak Moscow (1st) | Red Star Belgrade (1st) |

## Bracket

| First round | First round | First round | First round | Second round | Second round | Second round | Second round | Quarter-finals | Quarter-finals | Quarter-finals | Quarter-finals | | Semi-finals | Semi-finals | Semi-finals | Semi-finals | | Final | Final | |
| | | | | PSV Eindhoven | 5 | 0 | 5 | | | | | | | | | | | | | |
| | | | | Porto | 0 | 2 | 2 | | | | | | | | | | | | | |
| Porto | 3 | 0 | 3 | Porto | 0 | 2 | 2 | | | | | | | | | | | | | |
| HJK | 0 | 2 | 2 | | | | | | | | | | | | | | | | | |
| HJK | 0 | 2 | 2 | | | | | PSV Eindhoven | 1 | 1 | 2 | | | | | | | | | |
| | | | | | | | | Real Madrid | 1 | 2 | 3 | | | | | | | | | |
| Górnik Zabrze | 3 | 4 | 7 | | | | | | | | | Real Madrid | 1 | 2 | 3 | | | | | | | |
| Jeunesse Esch | 0 | 1 | 1 | | | | | | | | | | | | | | | | | |
| Jeunesse Esch | 0 | 1 | 1 | Górnik Zabrze | 0 | 2 | 2 | | | | | | | | | | | | | |
| | | | | Real Madrid | 1 | 3 | 4 | | | | | | | | | | | | | |
| Real Madrid | 3 | 1 | 4 | Real Madrid | 1 | 3 | 4 | | | | | | | | | | | | | |
| Moss | 0 | 0 | 0 | | | | | | | | | | | | | | | | | |
| Moss | 0 | 0 | 0 | | | | | | | | | | Real Madrid | 1 | 0 | 1 | | | | |
| | | | | | | | | | | | | | Milan | 1 | 5 | 6 | | | | |
| Budapest Honvéd | 1 | 0 | 1 | | | | | | | | | | | | | | Milan | 1 | 5 | 6 | | |
| Celtic | 0 | 4 | 4 | | | | | | | | | | | | | | | | | |
| Celtic | 0 | 4 | 4 | Celtic | 0 | 0 | 0 | | | | | | | | | | | | | |
| | | | | Werder Bremen | 1 | 0 | 1 | | | | | | | | | | | | | |
| BFC Dynamo | 3 | 0 | 3 | Werder Bremen | 1 | 0 | 1 | | | | | | | | | | | | | |
| Werder Bremen | 0 | 5 | 5 | | | | | | | | | | | | | | | | | |
| Werder Bremen | 0 | 5 | 5 | | | | | Werder Bremen | 0 | 0 | 0 | | | | | | | | | |
| | | | | | | | | Milan | 0 | 1 | 1 | | | | | | | | | |
| Vitosha Sofia | 0 | 2 | 2 | | | | | | | | | Milan | 0 | 1 | 1 | | | | | | | |
| Milan | 2 | 5 | 7 | | | | | | | | | | | | | | | | | |
| Milan | 2 | 5 | 7 | Milan (p) | 1 | 1 | 2 (4) | | | | | | | | | | | | | |
| | | | | Red Star Belgrade | 1 | 1 | 2 (2) | | | | | | | | | | | | | |
| Dundalk | 0 | 0 | 0 | Red Star Belgrade | 1 | 1 | 2 (2) | | | | | | | | | | | | | |
| Red Star Belgrade | 5 | 3 | 8 | | | | | | | | | | | | | | | | | |
| Red Star Belgrade | 5 | 3 | 8 | | | | | | | | | | | | | | | Milan | 4 | |
| | | | | | | | | | | | | | | | | | | Steaua București | 0 | |
| Ħamrun Spartans | 2 | 0 | 2 | | | | | | | | | | | | | | | | | | Steaua București | 0 |
| 17 Nëntori | 1 | 2 | 3 | | | | | | | | | | | | | | | | | |
| 17 Nëntori | 1 | 2 | 3 | 17 Nëntori | 0 | 0 | 0 | | | | | | | | | | | | | |
| | | | | IFK Göteborg | 3 | 1 | 4 | | | | | | | | | | | | | |
| Pezoporikos Larnaca | 1 | 1 | 2 | IFK Göteborg | 3 | 1 | 4 | | | | | | | | | | | | | |
| IFK Göteborg | 2 | 5 | 7 | | | | | | | | | | | | | | | | | |
| IFK Göteborg | 2 | 5 | 7 | | | | | IFK Göteborg | 1 | 1 | 2 | | | | | | | | | |
| | | | | | | | | Steaua București | 0 | 5 | 5 | | | | | | | | | |
| Sparta Prague | 1 | 2 | 3 | | | | | | | | | Steaua București | 0 | 5 | 5 | | | | | | | |
| Steaua București | 5 | 2 | 7 | | | | | | | | | | | | | | | | | |
| Steaua București | 5 | 2 | 7 | Steaua București | 3 | 2 | 5 | | | | | | | | | | | | | |
| | | | | Spartak Moscow | 0 | 1 | 1 | | | | | | | | | | | | | |
| Spartak Moscow | 2 | 1 | 3 | Spartak Moscow | 0 | 1 | 1 | | | | | | | | | | | | | |
| Glentoran | 0 | 1 | 1 | | | | | | | | | | | | | | | | | |
| Glentoran | 0 | 1 | 1 | | | | | | | | | | Steaua București | 4 | 1 | 5 | | | | |
| | | | | | | | | | | | | | Galatasaray | 0 | 1 | 1 | | | | |
| Club Brugge (a) | 1 | 1 | 2 | | | | | | | | | | | | | | Galatasaray | 0 | 1 | 1 | | |
| Brøndby | 0 | 2 | 2 | | | | | | | | | | | | | | | | | |
| Brøndby | 0 | 2 | 2 | Club Brugge | 1 | 1 | 2 | | | | | | | | | | | | | |
| | | | | Monaco | 0 | 6 | 6 | | | | | | | | | | | | | |
| Valur | 1 | 0 | 1 | Monaco | 0 | 6 | 6 | | | | | | | | | | | | | |
| Monaco | 0 | 2 | 2 | | | | | | | | | | | | | | | | | |
| Monaco | 0 | 2 | 2 | | | | | Monaco | 0 | 1 | 1 | | | | | | | | | |
| | | | | | | | | Galatasaray | 1 | 1 | 2 | | | | | | | | | |
| AEL | 2 | 1 | 3 (0) | | | | | | | | | Galatasaray | 1 | 1 | 2 | | | | | | | |
| Neuchâtel Xamax (p) | 1 | 2 | 3 (3) | | | | | | | | | | | | | | | | | |
| Neuchâtel Xamax (p) | 1 | 2 | 3 (3) | Neuchâtel Xamax | 3 | 0 | 3 | | | | | | | | | | | | | |
| | | | | Galatasaray | 0 | 5 | 5 | | | | | | | | | | | | | |
| Rapid Wien | 2 | 0 | 2 | Galatasaray | 0 | 5 | 5 | | | | | | | | | | | | | |
| Galatasaray | 1 | 2 | 3 | | | | | | | | | | | | | | | | | |

## First round

| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| Porto | 3–2 | HJK | 3–0 | 0–2 |
| Górnik Zabrze | 7–1 | Jeunesse Esch | 3–0 | 4–1 |
| Real Madrid | 4–0 | Moss | 3–0 | 1–0 |
| Budapesti Honvéd | 1–4 | Celtic | 1–0 | 0–4 |
| BFC Dynamo | 3–5 | Werder Bremen | 3–0 | 0–5 |
| Vitosha Sofia | 2–7 | Milan | 0–2 | 2–5 |
| Dundalk | 0–8 | Red Star Belgrade | 0–5 | 0–3 |
| Ħamrun Spartans | 2–3 | 17 Nëntori | 2–1 | 0–2 |
| Pezoporikos Larnaca | 2–7 | IFK Göteborg | 1–2 | 1–5 |
| Sparta Prague | 3–7 | Steaua București | 1–5 | 2–2 |
| Spartak Moscow | 3–1 | Glentoran | 2–0 | 1–1 |
| Club Brugge | 2–2 (a) | Brøndby | 1–0 | 1–2 |
| Valur | 1–2 | Monaco | 1–0 | 0–2 |
| AEL | 3–3 (0–3 p) | Neuchâtel Xamax | 2–1 | 1–2 |
| Rapid Wien | 2–3 | Galatasaray | 2–1 | 0–2 |
As defending champions, and due to the ban on English clubs in UEFA competition after the Heysel Stadium disaster reducing the number of teams in the competition, PSV Eindhoven were given a bye to the second round.

### Second leg

Monaco won 2–1 on aggregate.
Porto won 3–2 on aggregate.
Górnik Zabrze won 7–1 on aggregate.
Real Madrid won 4–0 on aggregate.
Celtic won 4–1 on aggregate.
Red Star Belgrade won 8–0 on aggregate.
17 Nëntori won 3–2 on aggregate.
IFK Göteborg won 7–2 on aggregate.
Steaua București won 7–3 on aggregate.
Spartak Moscow won 3–1 on aggregate.
2–2 on aggregate; Club Brugge won on away goals.
3–3 on aggregate; Neuchâtel Xamax won on penalties.
Galatasaray won 3–2 on aggregate.
Milan won 7–2 on aggregate.
Werder Bremen won 5–3 on aggregate.

## Second round

| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| PSV Eindhoven | 5–2 | Porto | 5–0 | 0–2 |
| Górnik Zabrze | 2–4 | Real Madrid | 0–1 | 2–3 |
| Celtic | 0–1 | Werder Bremen | 0–1 | 0–0 |
| Milan | 2–2 (4–2 p) | Red Star Belgrade | 1–1 | 1–1$^1$ |
| 17 Nëntori | 0–4 | IFK Göteborg | 0–3 | 0–1 |
| Steaua București | 5–1 | Spartak Moscow | 3–0 | 2–1 |
| Club Brugge | 2–6 | Monaco | 1–0 | 1–6 |
| Neuchâtel Xamax | 3–5 | Galatasaray | 3–0 | 0–5 |
$^1$ The second leg in Belgrade was replayed. The original second leg match in Belgrade was stopped by West German referee Dieter Pauly due to thick fog with Red Star leading 1–0. The result was then annulled and a replay took place the very next day. The replay ended in the above 1–1 scoreline.

### Second leg

Werder Bremen won 1–0 on aggregate.
PSV Eindhoven won 5–2 on aggregate.
The match was abandoned in the 57th minute because of dense fog and low visibility with the score at 1–0. It was then voided and a full match replay was ordered for the following day with a 15:00 CET starting time. Furthermore, the replay was to begin with the same starting line-ups as the abandoned match, with the exception of Milan players Pietro Paolo Virdis and Carlo Ancelotti; Virdis had been sent off in the abandoned match, while Ancelotti picked up his second yellow card of the competition, meaning that he had to sit out a match.
2–2 on aggregate; Milan won on penalties.
IFK Göteborg won 4–0 on aggregate.
Steaua București won 5–1 on aggregate.
Monaco won 6–2 on aggregate.
Galatasaray won 5–3 on aggregate.
Real Madrid won 4–2 on aggregate.

## Quarter-finals

| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| PSV Eindhoven | 2–3 | Real Madrid | 1–1 | 1–2 |
| Werder Bremen | 0–1 | Milan | 0–0 | 0–1 |
| IFK Göteborg | 2–5 | Steaua București | 1–0 | 1–5 |
| Monaco | 1–2 | Galatasaray | 0–1 | 1–1 |

### Second leg

Real Madrid won 3–2 on aggregate.
Milan won 1–0 on aggregate.
Steaua București won 5–2 on aggregate.
Galatasaray won 2–1 on aggregate.

## Semi-finals

| Team 1 | Agg.Tooltip Aggregate score | Team 2 | 1st leg | 2nd leg |
| Real Madrid | 1–6 | Milan | 1–1 | 0–5 |
| Steaua București | 5–1 | Galatasaray | 4–0 | 1–1 |

### Second leg

Milan won 6–1 on aggregate.
Steaua București won 5–1 on aggregate.

## Top goalscorers

| Rank | Name | Team | Goals |
| 1 | Marco van Basten | Milan | 10 |
| 2 | Marius Lăcătuș | Steaua București | 7 |
| 3 | Gheorghe Hagi | Steaua București | 6 |
| 4 | Tanju Çolak | Galatasaray | 5 |
| 4 | Hugo Sánchez | Real Madrid | 5 |
| 6 | Ilie Dumitrescu | Steaua București | 4 |
| 6 | Emilio Butragueño | Real Madrid | 4 |
| 6 | Ruud Gullit | Milan | 4 |
| 9 | Gabi Balint | Steaua București | 3 |
| 9 | Youssouf Falikou Fofana | Monaco | 3 |
| 9 | Dragan Stojković | Red Star Belgrade | 3 |
| 9 | Jan Urban | Górnik Zabrze | 3 |
| 9 | Pietro Paolo Virdis | Milan | 3 |