1999年、12月31日にスウェーデンで一回限りの再結成ライヴとなる"The Final Countdown""Rock The Night"を披露。そこではじめてジョン・ノーラム、キー・マルセロによるツインギターが実現した。"The Final Countdown"ではハモリのソロ、"Rock The Night"では、交互にギターソロを担当し、互いのスポットを分け合った。しかし正式な再結成声明が出されたわけではなかった。このライブのとき再結成しないかとみんなで相談していたが、メンバーはみなソロ活動の契約があったためすぐにというわけにはいかなかった。そして再結成が果たされる2004年まで度々電話で話をしていた。時々ジョーイの家にも遊びに行って曲を作っていたこともあってメンバーは皆やる気満々だった。特にイアン・ホーグランドは「早く再結成しようぜ！」と毎回のように電話で話していたようだ。2003年、"The Final Countdown"当時のメンバーいわゆる黄金期のメンバーで再始動を果たし、翌2004年に13年ぶりの6thアルバム『START FROM THE DARK』をリリース。このアルバムは今までの曲とは違ったヘヴィな曲ばかりになった。「俺たちは昔の殻を破ってこのサウンドにたどり着いたんだ」と言っていた。ほぼすべての曲を半音下げて歌っている。2005年、約13年ぶりの来日公演が実現。2006年、7thアルバム『SECRET SOCIETY』をリリース。翌2007年4月に ｢SECRET SOCIETY｣ ツアーで2年ぶりの来日公演。2009年、8thアルバム『LAST LOOK AT EDEN』をリリース。2012年、9thアルバム『BAG OF BONES』をリリースし、翌2013年からデビュー30周年を大々的に企画。HR/HMフェス『LOUD PARK 13』出演にて来日。ライブDVD『LIVE AT SWEDEN ROCK - 30TH ANNIVERSARY SHOW』をリリース2015年、来日公演を開催し、2ndアルバム『WINGS OF TOMORROW』の完全再現ライブを実施。節目の10thアルバム『WAR OF KINGS』をリリース。2016年、かつての大ヒットアルバム『THE FINAL COUNTDOWN』のリリース30周年を記念した、完全再現ライブツアーを企画。2017年、11thアルバム『Walk the Earth』を発表。2019年、1stアルバム『EUROPE』、再始動後の6thアルバム『START FROM THE DARK』をフィーチャーした来日公演を開催。
与えられたリストを昇順にソートするクイックソートのプログラム例を示す。quicksort([],[]).quicksort([X|Xs], Ys) :-        partition(Xs, X, Smaller, Bigger),        quicksort(Smaller, L1),        quicksort(Bigger, L2),        append(L1, [X|L2], Ys).partition([], _, [], []).partition([X|Xs], Pivot, [X|Smalls], Bigs) :-        X @< Pivot,        partition(Xs, Pivot, Smalls, Bigs).partition([X|Xs], Pivot, Smalls, [X|Bigs]) :-        X @>= Pivot,        partition(Xs, Pivot, Smalls, Bigs).Pivotとは軸要素のことである。軸要素より小さい要素を整列、軸要素より大きい要素も整列。それを軸要素を挟んで結合したものが整列したリストだ。末尾再帰版（partitionは上に同じ）quicksort(Xs, Ys) :-        quicksort(Xs, Ys, []).quicksort([], Ys, Ys).quicksort([X|Xs], Ys, Ys_1) :-        partition(Xs, X, Smaller, Bigger),        quicksort(Smaller, Ys, [X|Ys_2]),        quicksort(Bigger, Ys_2, Ys_1).Ys-[], Ys-Ys_1, Ys-[X|Ys_2], Ys_2-Ys_1 に差分リストの関係が見られる。美しい定義であり、上記appendを使うクイックソートに較べて若干速いが、差分リストを分かっていない人に対して、言葉で説明して理解させる事は難しい。quicksort/3の第二・第三引数の位置が前の版のものと変わっている。一般にPrologでは最終引数を出力とすることが多いが、ここでは差分リストの理解を扶けるために逆転した。限定節文法によって記述されたもの（partitionは上に同じ）quicksort(Xs,Ys) :-        quicksort(Xs,Ys,[]).quicksort([])     --> [].quicksort([X|Xs]) -->       { partition(Xs, X, Smaller, Bigger) },        quicksort(Smaller), [X], quicksort(Bigger).実行例。?- quicksort([3,2,1,6],L).L = [1,2,3,6]?= quicksort([a,b,1,2],L).L = [1,2,a,b]?- quicksort([聖,徳,太子],L).L = [太子,徳,聖]?- quicksort([2,3,3,1,1,4],L).L = [1,1,2,3,3,4]実行例の最後に示すように、ここでの定義では Xs を集合と見なしていない。そのため重複する2番目以降の要素を削除することはしていない。集合解 L = [1,2,3,4] を期待する場合は、partition の定義をpartition([], _, [], []).partition([X|Xs], Pivot, [X|Smalls], Bigs) :-        X @< Pivot,        partition(Xs, Pivot, Smalls, Bigs).partition([X|Xs], Pivot, Smalls, [X|Bigs]) :-        X @> Pivot,        partition(Xs, Pivot, Smalls, Bigs).partititon([_|Xs], Pivot, Smalls, Bigs) :-        X = Pivot,        partition(Xs, Pivot, Smalls, Bigs).と文字変更する。すなわち、6行目の「X @>= Pivot」を「X @> Pivot」に変更する。なぜならば、すでに同一の値は Pivot 自身として存在するからである。さらにそれだけだと同一要素が出現すると partition は失敗してしまうから、同一要素は無視することの宣言である第四節を加える。組込述語 sort は、この集合解が返ってくる仕様に決められている。最後に昇順または降順を区別する問題は挿入ソートの部分で述べた方針で、このクイックソートも書き直す必要がある。