Sitiveni Sivivatu's early try helped Castres to a first away win of the season, 16-12 at Grenoble to keep their survival hopes alive.
Six points from safety, Castres desperately needed something from this game, with time running out to save their place in the Top 14.
Grenoble meanwhile, needed a win to get back into the top six after earlier successes for Oyonnax and Toulouse, however Jonathan Wisniewski had a rare off night with the boot.
It was all Castres in the opening stages, and after Romain Martial had been stopped on a first attack, it was his fellow winger Sivivatu who ran in the first try. Rory Kockott had spotted a gap down the blindside and after he found some space he found Rémi Talès, who passed back inside to Sivivatu to stroll over.
With Kockott's conversion, Castres led 7-0 after just three minutes, with Grenoble having barely touched the ball.
When they finally did get their hands on the ball, they looked dangerous, although Chris Farrell blew a glorious opportunity as he held onto the ball despite a huge overlap.
Grenoble should have cut the deficit though, only for Wisniewski to miss a penalty in front of the posts.
And they missed another great chance when Gio Aplon was first to a grubber through, but after consultation with the TMO, it became clear that Geoffrey Palis had got back in time and managed to knock the ball out of the former Springbok's hands.
Despite the sodden conditions and constant rain, the game was played at a good pace, with both teams keen to play an open match.
Wisniewski missed a second chance to open the scoring for Grenoble, hitting the post for the second time, although from much further out this time.
The top scorer in the Top 14 continued his struggles with a third missed penalty of the evening after 25 minutes when Castres infringed at a lineout.
While Castres had the better of the set-piece, Grenoble were starting to come back into it, however the visiting defence held strong.
And Castres were even able to stretch their lead to ten just after the half-hour when Kockott knocked over a drop goal from virtually halfway.
Wisniewski completed an unfortunate first half as he hit the post for the third time, with Grenoble still scoreless.
He finally found his range early in the second half when Karena Wihongi committed a high tackle on the fly-half, and Wisniewski added another after Talès was sin-binned for a trip.
With their lead cut to four, Castres looked in trouble but they responded well with a big scrum, and Kockott knocked over a penalty from 45 metres out on the right to make it 13-6.
Grenoble saw another chance go begging soon after, when Florian Faure went over but it was impossible to see whether he had got the ball down under pressure from Rodrigo Capo Ortega.
And from the resulting scrum Grenoble should have scored, only for Charl McLeod to hang onto the ball and go himself when he had a huge overlap outside him.
It was beginning to get fractious, and after a high tackle from Johnnie Beattie, Wisniewski slotted his third penalty to cut the lead back to four points.
Grenoble were in the ascendancy and after Kockott was penalised in two rucks in quick succession, he was sent to the bin.
Castres kept defending though and McLeod botched another opportunity when he knocked on five metres out.
The problem for the visitors was that they couldn't get out of their half, and after another powerful rolling maul was pulled down, Wisniewski made it a one-point game.
Again Castres coped well being a man down, and even earned a penalty from a rolling maul. Facing the boos of the home crowd, Palis stepped up and found the target from 45 metres out on the left.
That left Grenoble needing a try, and they couldn't get back into Castres territory, having to settle for a losing bonus point.
Pens: Wisniewski 4
Pens: Kockott, Palis
Drop Goal: Kockott
Yellow Cards: Talès, Kockott
Grenoble: 15 Gio Aplon, 14 Benjamin Thiéry, 13 Chris Farrell, 12 Nigel Hunt, 11 Xavier Mignot, 10 Jonathan Wisniewski, 9 Charl McLeod, 8 Florian Faure, 7 Fabien Alexandre, 6 Henry Vanderglas, 5 Hendrik Roodt, 4 Benjamin Hand, 3 Dayna Edwards, 2 Arnaud Héguy (c), 1 Fabien Barcella
Replacements: 16 Laurent Bouchet, 17 Albertus Buckle, 18 Paul Willemse, 19 Peter Kimlin, 20 James Hart, 21 Jackson Willison, 22 Fabien Gengenbacher, 23 Jono Owen
Castres: 15 Geoffrey Palis, 14 Romain Martial, 13 Thomas Combezou, 12 Rémi Lamerat, 11 Sitiveni Sivivatu, 10 Rémi Talès, 9 Rory Kockott, 8 Johnnie Beattie, 7 Yannick Caballero, 6 Jannie Bornman, 5 Rodrigo Capo Ortega (c), 4 Christophe Samson, 3 Karena Wihongi, 2 Brice Mach, 1 Mihaita Lazar
Replacements: 16 Marc-Antoine Rallier, 17 Saimone Taumoepeau, 18 Benjamin Desroche, 19 Ibrahim Diarra, 20 Antoine Dupont, 21 Max Evans, 22 Julien Dumora, 23 Ramiro Herrera
Referee: Salim Attalah