I agree with the others that it seems to be time to get a "big boy" bed. We did this with our children, all right around 18 months old. The first one we did a toddler bed, but he rolled around too much, just didn't like it. For all of them, we let the kids pick out their own bedding. Whatever character your son's fav, take him to the store with you and get it together.
Other than the upsizing in beds, I truly believe that you've just got to remain consistent. Baby gate on the room was one thing we did also. I would go in with the kids, lay down and read a book, snuggle a couple of minutes, then leave the room. You've got to stay firm, otherwise your child will fall into the thought process that if I am persistent, then my mommy will give in.... Not a good thing!!
To tell you the truth, I still lay down and read and snuggle at nap time, but always make sure it's in their bed....