diff --git a/gtsam/distinfo b/gtsam/distinfo
index e128b1d9d8c2900ad2c4eb9320816e489f882319..73d9aae6ac565409a4f4cd85a89a92857b99ac8d 100644
--- a/gtsam/distinfo
+++ b/gtsam/distinfo
@@ -6,3 +6,4 @@ SHA1 (patch-ab) = b0324c3061b99d060732f0911860c2fda146d50c
 SHA1 (patch-ac) = 5cd8ee856125dfbcd7705b981a5bead62ac6a4ff
 SHA1 (patch-ad) = 61eacf5a77082c37bd557f0846a284e0a26afad4
 SHA1 (patch-ae) = 2c19ba0c0571c2584f39a8d97d1b636fdf2453f6
+SHA1 (patch-af) = f5d8abc7a653ba16a4349fb91a39a36553447760
diff --git a/gtsam/patches/patch-af b/gtsam/patches/patch-af
new file mode 100644
index 0000000000000000000000000000000000000000..31493d11a04a73ee302afc34f99636025fac0615
--- /dev/null
+++ b/gtsam/patches/patch-af
@@ -0,0 +1,181 @@
+Patch with last modifications to work with Parallax Angle Points in the toolbox
+  - Add toPoint3 methods and wrap it
+  - Fix a bug in the Parallax Angle Point static constructors
+  - Wrap evaluateError methods of Parallax Angle Point Projection Factors (was used for debug)
+  - Add method to access newFactorsIndices from ISAM2Result, and wrap it in the matlab toolbox
+--- gtsam/geometry/ParallaxAnglePoint2.h	2015-05-19 15:06:53.169068033 +0200
++++ gtsam/geometry/ParallaxAnglePoint2.h	2015-05-14 18:49:59.374873705 +0200
+@@ -74,7 +74,7 @@
+     template<class PinholeCameraType>
+     static ParallaxAnglePoint2 FromCameraAndMeasurement(const PinholeCameraType &camera, const Point2 &measurement)
+     {
+-      Point3 vecFromMain = camera.backproject(measurement, 1.0);
++      Point3 vecFromMain = camera.backproject(measurement, 1.0) - camera.pose().translation();
+       double yaw   = atan2(vecFromMain.y(),vecFromMain.x());
+       double pitch = atan2(vecFromMain.z(),Point2(vecFromMain.x(),vecFromMain.y()).norm());
+
+@@ -96,7 +96,7 @@
+         camera_ptr = boost::make_shared<PinholeCamera<CalibrationType> >(pose, K);
+       }
+
+-      Point3 vecFromMain = camera_ptr->backproject(measurement, 1.0);
++      Point3 vecFromMain = camera_ptr->backproject(measurement, 1.0) - camera_ptr->pose().translation();
+       double yaw   = atan2(vecFromMain.y(),vecFromMain.x());
+       double pitch = atan2(vecFromMain.z(),Point2(vecFromMain.x(),vecFromMain.y()).norm());
+
+--- gtsam/geometry/ParallaxAnglePoint3.cpp	2015-05-19 15:06:53.169068033 +0200
++++ gtsam/geometry/ParallaxAnglePoint3.cpp	2015-05-19 14:35:56.340826167 +0200
+@@ -205,6 +205,39 @@
+
+ }
+
++Point3 ParallaxAnglePoint3::toPoint3(const Point3 & mainAnchor, const Point3 &  assoAnchor) const
++{
++  Vector3 vecFromMain = directionVectorFromMainAnchor();
++
++  Point3 mainToAsso = (assoAnchor - mainAnchor);
++
++  double mainAngle = angleBetweenUnitVectors(vecFromMain, mainToAsso.normalize().vector());
++
++  double sinParalax = sin(parallax_);
++  // Guard to avoid division by zero
++  if(fabs(sinParalax) <= 1e-6)
++  {
++    if (sinParalax < 0) sinParalax = -1e-6;
++    else sinParalax = 1e-6;
++  }
++
++  double depthFromMain = (sin(mainAngle + parallax_)/sinParalax)*mainToAsso.norm();
++
++  return mainAnchor + Point3(vecFromMain*depthFromMain);
++
++}
++
++Point3 ParallaxAnglePoint3::toPoint3(const Pose3 & mainPose, const Pose3 & assoPose, boost::optional<const Pose3 &> body_P_sensor) const
++{
++  if(body_P_sensor)
++  {
++    return toPoint3(mainPose.compose(*body_P_sensor).translation(), assoPose.compose(*body_P_sensor).translation());
++  }
++  //else
++
++  return toPoint3(mainPose.translation(), assoPose.translation());
++}
++
+ }
+
+ // Local Functions
+--- gtsam/geometry/ParallaxAnglePoint3.h	2015-05-19 15:06:53.169068033 +0200
++++ gtsam/geometry/ParallaxAnglePoint3.h	2015-05-18 15:41:52.795327081 +0200
+@@ -79,8 +79,8 @@
+       const PinholeCameraType &mainCamera, const Point2 &measurementFromMain,
+       const PinholeCameraType &assoCamera, const Point2 &measurementFromAsso)
+     {
+-      Point3 pointFromMain = mainCamera.backproject(measurementFromMain, 1.0);
+-      Point3 pointFromAsso = assoCamera.backproject(measurementFromAsso, 1.0);
++      Point3 pointFromMain = mainCamera.backproject(measurementFromMain, 1.0) - mainCamera.pose().translation();
++      Point3 pointFromAsso = assoCamera.backproject(measurementFromAsso, 1.0) - assoCamera.pose().translation();
+
+       double yaw   = atan2(pointFromMain.y(),pointFromMain.x());
+       double pitch = atan2(pointFromMain.z(),Point2(pointFromMain.x(),pointFromMain.y()).norm());
+@@ -110,8 +110,8 @@
+         assoCamera_ptr = boost::make_shared<PinholeCamera<CalibrationType> >(assoPose, K);
+       }
+
+-      Point3 vecFromMain = mainCamera_ptr->backproject(measurementFromMain, 1.0);
+-      Point3 vecFromAsso = assoCamera_ptr->backproject(measurementFromAsso, 1.0);
++      Point3 vecFromMain = mainCamera_ptr->backproject(measurementFromMain, 1.0) - mainCamera_ptr->pose().translation();
++      Point3 vecFromAsso = assoCamera_ptr->backproject(measurementFromAsso, 1.0) - assoCamera_ptr->pose().translation();
+
+       double yaw   = atan2(vecFromMain.y(),vecFromMain.x());
+       double pitch = atan2(vecFromMain.z(),Point2(vecFromMain.x(),vecFromMain.y()).norm());
+@@ -192,6 +192,10 @@
+       boost::optional<gtsam::Matrix&> Dasso  = boost::none,
+       boost::optional<gtsam::Matrix&> Dothe  = boost::none) const;
+
++    Point3 toPoint3(const Point3 & mainAnchor, const Point3 &  assoAnchor) const;
++
++    Point3 toPoint3(const Pose3 & mainPose, const Pose3 & assoPose, boost::optional<const Pose3 &> body_P_sensor = boost::none) const;
++
+     /// Output stream operator
+     GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &os, const ParallaxAnglePoint3& p);
+
+--- gtsam/nonlinear/ISAM2.h	2014-05-08 02:57:09.000000000 +0200
++++ gtsam/nonlinear/ISAM2.h	2015-05-13 15:52:41.701493931 +0200
+@@ -310,6 +310,10 @@
+    */
+   FastVector<size_t> newFactorsIndices;
+
++  /** Function to access newFactorIndices from Matlab toolbox
++   */
++  inline FastVector<size_t> getNewFactorsIndices() { return newFactorsIndices; }
++
+   /** A struct holding detailed results, which must be enabled with
+    * ISAM2Params::enableDetailedResults.
+    */
+--- gtsam/slam/ParallaxAngleProjectionFactor.h	2015-05-19 15:06:53.161068144 +0200
++++ gtsam/slam/ParallaxAngleProjectionFactor.h	2015-05-14 12:27:36.733741098 +0200
+@@ -639,7 +639,7 @@
+         if (Dpoint)  *Dpoint = zeros(2,3);
+         if (verboseCheirality_)
+           std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key3()) <<
+-              " with anchors (" << DefaultKeyFormatter(this->key1()) << "," << DefaultKeyFormatter(this->key2()) <<
++              " with anchors (" << DefaultKeyFormatter(this->key1()) << "," << DefaultKeyFormatter(this->key2()) << ")" <<
+               " moved behind camera " << DefaultKeyFormatter(this->key2()) << std::endl;
+         if (throwCheirality_)
+           throw e;
+--- gtsam.h	2015-05-19 15:06:53.169068033 +0200
++++ gtsam.h	2015-05-18 15:48:30.119315060 +0200
+@@ -921,6 +921,10 @@
+   Vector directionVectorFromAssoAnchor(const gtsam::Point3& mainAnchor, const gtsam::Point3& assoAnchor) const;
+   Vector directionVectorFromOtheAnchor(const gtsam::Point3& mainAnchor, const gtsam::Point3& assoAnchor, const gtsam::Point3& otheAnchor) const;
+
++  gtsam::Point3 toPoint3(const gtsam::Point3 & mainAnchor, const gtsam::Point3 & assoAnchor) const;
++  gtsam::Point3 toPoint3(const gtsam::Pose3  & mainPose,   const gtsam::Pose3  & assoPose)   const;
++  gtsam::Point3 toPoint3(const gtsam::Pose3  & mainPose,   const gtsam::Pose3  & assoPose, const gtsam::Pose3 & body_P_sensor) const;
++
+   // enabling serialization functionality
+   void serialize() const;
+ };
+@@ -2106,6 +2110,7 @@
+   size_t getVariablesRelinearized() const;
+   size_t getVariablesReeliminated() const;
+   size_t getCliques() const;
++  gtsam::KeyVector getNewFactorsIndices();
+ };
+
+ class ISAM2 {
+@@ -2283,6 +2288,10 @@
+       size_t mainAnchorKey, size_t pointKey, const CALIBRATION* k, bool throwCheirality, bool verboseCheirality,
+       const POSE& body_P_sensor);
+
++  // Error functions
++  Vector evaluateError(const gtsam::Pose3& mainPose, const gtsam::ParallaxAnglePoint2& point) const;
++  Vector evaluateError(const gtsam::Pose3& mainPose, const gtsam::ParallaxAnglePoint3& point) const;
++
+   gtsam::Point2 measured() const;
+   CALIBRATION* calibration() const;
+   bool verboseCheirality() const;
+@@ -2310,6 +2319,11 @@
+       size_t mainAnchorKey, size_t associatedAnchorKey, size_t pointKey, const CALIBRATION* k, bool throwCheirality, bool verboseCheirality,
+       const POSE& body_P_sensor);
+
++  // Error functions
++  Vector evaluateError(const gtsam::Pose3& mainPose, const gtsam::Pose3& assoPose, const gtsam::ParallaxAnglePoint3& point) const;
++
++
++
+   gtsam::Point2 measured() const;
+   CALIBRATION* calibration() const;
+   bool verboseCheirality() const;
+@@ -2335,6 +2349,9 @@
+       size_t mainAnchorKey, size_t associatedAnchorKey, size_t otherAnchorKey, size_t pointKey, const CALIBRATION* k, bool throwCheirality, bool verboseCheirality,
+       const POSE& body_P_sensor);
+
++  // Error functions
++  Vector evaluateError(const gtsam::Pose3& mainPose, const gtsam::Pose3& assoPose, const gtsam::Pose3& othePose, const gtsam::ParallaxAnglePoint3& point) const;
++
+   gtsam::Point2 measured() const;
+   CALIBRATION* calibration() const;
+   bool verboseCheirality() const;
+