Science fiction movies about time travel are tricky. On one hand, you have to make the story complex enough to keep people interested. On the other, you have to ensure that your film makes sense and sticks to its rules. For a select group of fans (presumably those destined to ruin everyone’s fun), you also have to ensure that the time travel doesn’t introduce any plot holes, for they’ll automatically be picked apart to death. How many time travel movies manage to do all of this? I’m honestly not sure, but I think Looper comes really close.

Here, the basic idea is this: In the 2070s, time travel exists, but has been deemed illegal and has therefore been outlawed. People have been sent back to the 2040s, and are called “loopers.” Their job is to kill people a criminal organization wants dead, because hiding a body in the future is hard. So, the corpse-to-be is sent back to the past, is shot point blank, and is then disposed of in the past. Cool premise, already. Now, what happens if you, the looper, have your future self sent back? This is exactly the situation that Joe (Joseph Gordon-Levitt) faces, when “Old Joe” (Bruce Willis) appears and soon enough escapes.

While the trailer promises action scenes involving these two actors, that’s not really what happens. Old Joe escapes and has one goal in mind: Kill three young children, one of which — he doesn’t know who, so all three must die — will eventually grow up to be an evil dictator, so that he won’t be sent back at all, and will therefore be allowed to live out the entirety of his life with his adoring wife (Xu Qing).

Meanwhile, Joe of the present finds himself on a farm owned by Sara (Emily Blunt), whose child, Cid (Pierce Gagnon), is one of the targets on Old Joe’s hit list. He hides here, in part because he’s now an outlaw for failing to kill his mark, but also because he wants to redeem himself by killing Old Joe. He eventually grows feelings for both of them, which leads to the exact situation you’re probably thinking of at the end of the film. Looper isn’t based around surprises; its focus is on sharp execution, surprisingly deep characters, and an intriguing premise.

You don’t get a lot of big action scenes with Looper, so if that’s what you’re hoping for, go watch The Terminator again. There are more character scenes than ones of action, with all three of the leading adults getting a lot of time to sit down and chat. There’s tension, assuredly, but most of it comes from what you know can and will happen, not from what is currently going on. Everything can break down at any moment, but that only actually happens on occasion; that makes it all the more thrilling when it does.

Joseph Gordon-Levitt, Bruce Willis and Emily Blunt are all accomplished actors. Willis might be best known for action, but he gets several deep character moments here, in particular the scenes in which he thinks about the wife he left behind in order to ensure that he can be with her in the future — if that makes sense. Blunt, here sporting a Southern drawl, and Gordon-Levitt have strong chemistry together, and while their characters’ relationship is one based around tension, the sweet scenes and the progression they both have is one to savor.

Surprising the world is Pierce Gagnon as Sara’s child, Cid. Here, he reminds us that child actors can be effective, rare as they might be. He gets a few good freakout scenes, a couple with real emotional depth, and holds his own alongside both Gordon-Levitt and Blunt. And he’s just darned cute, okay? His character arc leads exactly where you’d expect, which does make Looper a tad predictable, but that’s no fault to him.

The simple story and possibly too-long running time end up being the only problems that Looper has. Even those fun-ruiners I mentioned earlier will have trouble finding an issue with the time travel mechanic shown here. Writer-director Rian Johnson clearly understands what he’s introduced to us, and has thought it through very closely. This is a smart thriller, and is one of the best time travel films of recent memory. It gives you multiple things to think about after it concludes, too, which is always a nice touch.

I’m not sure if it’s completely air-tight — I don’t know or care enough about a mechanic that is, for all intents and purposes, impossible in real life — but in terms of the film staying within its own rules, I didn’t see a problem. I don’t think it had any annoying paradoxes or plot holes, and when the simplistic conclusion is reached, it all makes sense. And it’s an emotional ending, too, no doubt. The character drama pays off in a great way.

Looper is a fantastic time travel film and a very enjoyable movie in general. This is a concept that’s incredibly difficult to get right, and Rian Johnson succeeds. It’s engaging, thought-provoking, funny, contains enough character moments to make the ending work on an emotional level, has some solid acting, and even gives Bruce Willis one scene in which he gets to essentially become John McLane again. Even if it’s too long and is easily predictable until the end, Looper is good fun, and you owe it to yourself to give it a watch.