diff --git a/modules/geom/pymod/export_vecmat2_op.cc b/modules/geom/pymod/export_vecmat2_op.cc
index cf1f0ac0b4df0579caa5638238d3301c3a83b16f..8f594681fd9a58b2e50595ece974fa63396fddc9 100644
--- a/modules/geom/pymod/export_vecmat2_op.cc
+++ b/modules/geom/pymod/export_vecmat2_op.cc
@@ -33,6 +33,7 @@ Real (*Mat2Det)(const Mat2& m)                                        = &Det;
 Mat2   (*Mat2Invert)(const Mat2& m)                                     = &Invert;
 Mat2   (*Mat2Transpose)(const Mat2& m)                                  = &Transpose;
 Real (*Vec2Angle)(const Vec2& v1, const Vec2& v2)                     = &Angle;
+Real (*Vec2SignedAngle)(const Vec2& v1, const Vec2& v2)                     = &SignedAngle;
 Vec2   (*Vec2Normalize)(const Vec2& v1)                                 = &Normalize;
 Vec2   (*Vec2Rotate)(const Vec2& v1,Real ang)                         = &Rotate;
 Vec2 (*Vec2Min)(const Vec2&, const Vec2&) = &Min;
@@ -53,6 +54,7 @@ void export_VecMat2_op()
   def("Invert",Mat2Invert);
   def("Transpose",Mat2Transpose);
   def("Angle",Vec2Angle);
+  def("SignedAngle",Vec2SignedAngle);
   def("Normalize",Vec2Normalize);
   def("Rotate",Vec2Rotate);
   def("Min",Vec2Min);
diff --git a/modules/geom/src/vecmat2_op.cc b/modules/geom/src/vecmat2_op.cc
index 69f2e8e8ce2200b5d6994498b787291ad8b4a247..ea0a4521376d510ccc9db2a0471fe275bd9833cd 100644
--- a/modules/geom/src/vecmat2_op.cc
+++ b/modules/geom/src/vecmat2_op.cc
@@ -55,11 +55,15 @@ Real Angle(const Vec2& v1, const Vec2& v2)
 
 Real SignedAngle(const Vec2& v1, const Vec2& v2)
 {
-  Vec3 vc;
-  vc=Cross(Vec3(v1),Vec3(v2));
-  if(Length(v1)==0.0 || Length(v2)==0.0 || Length(vc)==0.0)
+  if(Length(v1)==0.0 || Length(v2)==0.0){
     return 0.0;
-  return acos(Dot(v1,v2)/Length(v1)/Length(v2))*vc.z/std::fabs(vc.z);
+  }
+  Vec3 vc=Cross(Vec3(v1),Vec3(v2));
+  Real sign=1.0;
+  if(vc.z!=0.0){
+    sign=vc.z/std::fabs(vc.z);
+  }
+  return acos(Dot(v1,v2)/Length(v1)/Length(v2))*sign;
 }
 
 Vec2 Rotate(const Vec2& v,Real ang)