diff --git a/libuvc_camera/src/camera_driver.cpp b/libuvc_camera/src/camera_driver.cpp
index 0f89b9524caec9281d6b6b69906004841824d805..071bf5eaaee047af022e9f0977cd8bbeb23f499b 100644
--- a/libuvc_camera/src/camera_driver.cpp
+++ b/libuvc_camera/src/camera_driver.cpp
@@ -50,10 +50,15 @@ bool CameraDriver::Start() {
 void CameraDriver::Stop() {
   boost::recursive_mutex::scoped_lock(mutex_);
 
-  if (state_ == kRunning) {
+  assert(state_ != kInitial);
+
+  if (state_ == kRunning)
     CloseCamera();
-    state_ = kInitial;
-  }
+
+  assert(state_ == kStopped);
+
+  uvc_exit(ctx_);
+  ctx_ = NULL;
 }
 
 void CameraDriver::ReconfigureCallback(UVCCameraConfig &new_config, uint32_t level) {