diff --git a/Geom2d/Point.hs b/Geom2d/Point.hs
--- a/Geom2d/Point.hs
+++ b/Geom2d/Point.hs
@@ -4,6 +4,7 @@
     , Triangle
     , Scale (..)
     , normalize
+    , scaleTo
     , magnitude
     , dot
     , cross
@@ -63,7 +64,11 @@
   scale s (Point' (a,b)) = Point' (a * s, b * s)
 
 -- | Normalizes a scaleable point to length 1.
-normalize :: (Scale p, Point p, Fractional a, Eq a, Floating a) =>
+normalize :: (Scale p, Point p, Eq a, Floating a) =>
              p a -> Maybe (p a)
 normalize v | magnitude v == 0 = Nothing
             | otherwise = Just $ scale (1/magnitude v) v
+
+scaleTo :: (Scale p, Point p, Eq a, Floating a) =>
+           a -> p a -> Maybe (p a)
+scaleTo s vec = scale s <$> normalize vec
diff --git a/Geom2d/Shape.hs b/Geom2d/Shape.hs
--- a/Geom2d/Shape.hs
+++ b/Geom2d/Shape.hs
@@ -3,6 +3,7 @@
     , Spatial (..)
     , circle
     , rectangle
+    , convexHull
     )
 
 where
@@ -18,3 +19,7 @@
 rectangle :: (Translate p, Eq a, RealFloat a, Point p, Rotation p) =>
              p a -> a -> a -> Maybe (Shape p a)
 rectangle m a b = ShapePolygon <$> rectangleInt m a b
+
+convexHull :: (Num (p a), Fractional a, Ord a, Scale p, Point p) =>
+              [p a] -> Maybe (Shape p a)
+convexHull list = ShapePolygon <$> convexHull' list
diff --git a/Geom2d/Shape/Internal.hs b/Geom2d/Shape/Internal.hs
--- a/Geom2d/Shape/Internal.hs
+++ b/Geom2d/Shape/Internal.hs
@@ -30,7 +30,7 @@
 import Geom2d.Point.Internal
 import Geom2d.Rotation
 import Geom2d.Translate
-import Test.QuickCheck
+import Test.QuickCheck hiding (scale)
 
 data Circle p a = Circle (p a) a deriving (Show,Read,Eq)
 
@@ -129,9 +129,13 @@
 instance (Eq (p a), Num (p a), RealFloat a, Point p) =>
          Intersect (Polygon p a) (Polygon p a) where
   intersect poly1@(Polygon p1 vs1) poly2@(Polygon p2 vs2) =
-    let verts1 = map (p1+) vs1
-        verts2 = map (p2+) vs2
+    let verts1 :: [p a]
+        verts1 = map (p1+) vs1
+        edges1 :: [FinLine p a]
         edges1 = zipWith FinLine verts1 (tail verts1 ++ [head verts1])
+        verts2 :: [p a]
+        verts2 = map (p2+) vs2
+        edges2 :: [FinLine p a]
         edges2 = zipWith FinLine verts2 (tail verts2 ++ [head verts2])
     in any (uncurry intersect)
        [ (v1,v2) | v1 <- edges1, v2 <- edges2 ] ||
diff --git a/Test/Point.hs b/Test/Point.hs
--- a/Test/Point.hs
+++ b/Test/Point.hs
@@ -5,8 +5,7 @@
 import Data.Maybe
 import Geom2d.Point
 import Geom2d.Rotation
-import Test.QuickCheck
-import Test.QuickCheck.All
+import Test.QuickCheck hiding (scale)
 import Test.Utils
 import Data.Fixed
 
@@ -42,6 +41,12 @@
   maybe (magnitude v ~== 0)
   ( (~== 1).magnitude )
   ( normalize v)
+
+prop_scaleTo :: Point' Float -> Float -> Bool
+prop_scaleTo vector x =
+  fromMaybe (magnitude vector == 0) $ do
+    scaledVector <- scaleTo x vector
+    return (magnitude scaledVector ~== abs x)
 
 prop_point_point' :: Point' Integer -> Bool
 prop_point_point' = mkpropPoint
diff --git a/geom2d.cabal b/geom2d.cabal
--- a/geom2d.cabal
+++ b/geom2d.cabal
@@ -1,5 +1,5 @@
 name:                geom2d
-version:             0.1.2.1
+version:             0.1.3.1
 synopsis:            package for geometry in euklidean 2d space
 description:         This package provides tools for dealing with geometric
                      objects in 2D space.
@@ -24,7 +24,7 @@
                      , Geom2d.Rotation, Geom2d
   other-extensions:    MultiParamTypeClasses, FlexibleContexts, TemplateHaskell
                      , ScopedTypeVariables
-  build-depends:       base >=4.8 && <4.9, QuickCheck >=2.7 && <2.8
+  build-depends:       base >=4.8 && <4.9, QuickCheck >=2.7 && <2.9
                      , ieee754 >=0.7 && <0.8
   default-language:    Haskell2010
   ghc-options:         -Wall
@@ -34,39 +34,39 @@
   type:                exitcode-stdio-1.0
   main-is:             Test/Point.hs
   build-depends:       base >= 4.8 && < 4.9, ieee754 >= 0.7 && < 0.8
-                     , QuickCheck >= 2.7 && < 2.8
+                     , QuickCheck >= 2.7 && < 2.9
 
 Test-Suite line
   default-language:    Haskell2010
   type:                exitcode-stdio-1.0
   main-is:             Test/Line.hs
   build-depends:       base >= 4.8 && < 4.9, ieee754 >= 0.7 && < 0.8
-                     , QuickCheck >= 2.7 && < 2.8
+                     , QuickCheck >= 2.7 && < 2.9
 
 Test-Suite intersect
   default-language:    Haskell2010
   type:                exitcode-stdio-1.0
   main-is:             Test/Intersect.hs
   build-depends:       base >= 4.8 && < 4.9, ieee754 >= 0.7 && < 0.8
-                     , QuickCheck >= 2.7 && < 2.8
+                     , QuickCheck >= 2.7 && < 2.9
 
 Test-Suite distance
   default-language:    Haskell2010
   type:                exitcode-stdio-1.0
   main-is:             Test/Distance.hs
   build-depends:       base >= 4.8 && < 4.9, ieee754 >= 0.7 && < 0.8
-                     , QuickCheck >= 2.7 && < 2.8
+                     , QuickCheck >= 2.7 && < 2.9
 
 Test-Suite translate
   default-language:    Haskell2010
   type:                exitcode-stdio-1.0
   main-is:             Test/Translate.hs
   build-depends:       base >= 4.8 && < 4.9, ieee754 >= 0.7 && < 0.8
-                     , QuickCheck >= 2.7 && < 2.8
+                     , QuickCheck >= 2.7 && < 2.9
 
 Test-Suite shape
   default-language:    Haskell2010
   type:                exitcode-stdio-1.0
   main-is:             Test/Shape.hs
   build-depends:       base >= 4.8 && < 4.9, ieee754 >= 0.7 && < 0.8
-                     , QuickCheck >= 2.7 && < 2.8
+                     , QuickCheck >= 2.7 && < 2.9
