diff --git a/SpatialMath.hs b/SpatialMath.hs
--- a/SpatialMath.hs
+++ b/SpatialMath.hs
@@ -13,12 +13,15 @@
                    , quatOfEuler321
                    , dcmOfQuat
                    , dcmOfQuatB2A
+                   , dcmOfEuler321
                    , quatOfDcm
                    , quatOfDcmB2A
                    , rotVecByDcm
                    , rotVecByDcmB2A
                    , rotVecByQuat
                    , rotVecByQuatB2A
+                   , rotVecByEuler
+                   , rotVecByEulerB2A
                    ) where
 
 import qualified Xyz
@@ -128,6 +131,9 @@
     r5 = 2*(q2*q3 + q0*q1)
     r8 = q0*q0 - q1*q1 - q2*q2 + q3*q3
 
+dcmOfEuler321 :: (Floating a, Element a, Ord a) => Euler a -> Matrix a
+dcmOfEuler321 = dcmOfQuat . quatOfEuler321
+
 dcmOfQuatB2A :: (Num a, Element a) => Quat a -> Matrix a
 dcmOfQuatB2A = dcmOfQuat . Quat.inv
 
@@ -146,6 +152,12 @@
 
 rotVecByQuatB2A :: (Num a, Element a) => Quat a -> Xyz a -> Xyz a
 rotVecByQuatB2A q = rotVecByDcmB2A (dcmOfQuat q)
+
+rotVecByEuler :: (Floating a, Element a, Ord a) => Euler a -> Xyz a -> Xyz a
+rotVecByEuler = rotVecByDcm . dcmOfEuler321
+
+rotVecByEulerB2A :: (Floating a, Element a, Ord a) => Euler a -> Xyz a -> Xyz a
+rotVecByEulerB2A = rotVecByDcmB2A . dcmOfEuler321
 
 -- void
 -- get_wind_angles_from_v_bw_b(double * alpha, double * beta, double * airspeed, const xyz_t * const v_bw_b)
diff --git a/spatial-math.cabal b/spatial-math.cabal
--- a/spatial-math.cabal
+++ b/spatial-math.cabal
@@ -1,5 +1,5 @@
 name:                spatial-math
-version:             0.1.2
+version:             0.1.3
 synopsis:            3d math including quaternions/euler angles/dcms and utility functions
 description:         This is a port of my 'mathlib' C library: https://github.com/ghorn/mathlib
 license:             BSD3
