diff --git a/examples/bal_problem.cc b/examples/bal_problem.cc
index a705bd2..d5bef20 100644
--- a/examples/bal_problem.cc
+++ b/examples/bal_problem.cc
@@ -129,48 +129,52 @@
   for (int i = 0; i < num_cameras_; ++i) {
     double* camera = mutable_cameras() + camera_block_size() * i;
 
+    // Decompose the camera into an angle-axis rotation and camera
+    // center vector.
+    double center[3];
+    Eigen::VectorXd angle_axis(3);
+
+    if (use_quaternions_) {
+      QuaternionToAngleAxis(camera, angle_axis.data());
+    } else {
+      angle_axis = Eigen::Map<Eigen::VectorXd>(camera, 3);
+    }
+    // Invert rotation.
+    angle_axis *= -1.0;
+
+    // Camera center is c = -R't, the negative sign does not matter.
+    AngleAxisRotatePoint(angle_axis.data(),
+                         camera + camera_block_size() - 6,
+                         center);
+
     // Perturb the location of the camera rather than the translation
     // vector. This is makes the perturbation physically more sensible.
     if (translation_sigma > 0.0) {
-      double center[3];
-      Eigen::VectorXd angle_axis(3);
-
-      if (use_quaternions_) {
-        angle_axis = Eigen::Map<Eigen::VectorXd>(camera, 3);
-      } else {
-        QuaternionToAngleAxis(camera, angle_axis.data());
-      }
-      angle_axis *= -1.0;
-
-      // Camera center is c = -R't, the negative sign does not matter.
-      AngleAxisRotatePoint(angle_axis.data(),
-                           camera + camera_block_size() - 6,
-                           center);
-
       // Perturb center.
       for (int j = 0; j < 3; ++j) {
         center[j] += translation_sigma * RandNormal();
       }
-
-      // t = -R * (- R' t + perturbation)
-      AngleAxisRotatePoint(angle_axis.data(),
-                           center,
-                           camera + camera_block_size() - 6);
     }
 
-    // First three coordinates of the camera rotation are shared
-    // between the angle-axis and the quaternion representations.
     if (rotation_sigma > 0.0) {
-      camera[0] += rotation_sigma * RandNormal();
-      camera[1] += rotation_sigma * RandNormal();
-      camera[2] += rotation_sigma * RandNormal();
-
-      if (use_quaternions_) {
-        camera[3] += rotation_sigma * RandNormal();
-        Eigen::Map<Eigen::VectorXd>(camera, 4).normalize();
+      for (int j = 0; j < 3; ++j) {
+        angle_axis[j] += rotation_sigma * RandNormal();
       }
     }
 
+    // Invert rotation.
+    angle_axis *= -1.0;
+    if (use_quaternions_) {
+      AngleAxisToQuaternion(angle_axis.data(), camera);
+    } else {
+      Eigen::Map<Eigen::VectorXd>(camera, 3) = angle_axis;
+    }
+
+    // t = -R * (- R' t + perturbation)
+    AngleAxisRotatePoint(angle_axis.data(),
+                         center,
+                         camera + camera_block_size() - 6);
+
   }
 }
 
