diff --git a/LICENCE b/LICENCE
new file mode 100644
--- /dev/null
+++ b/LICENCE
@@ -0,0 +1,31 @@
+Copyright (c) 2017-2019, Commonwealth Scientific and Industrial Research Organisation
+Copyright (c) 2019-2021, Tony Morris
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of QFPL nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/aviation-cessna172-weight-balance.cabal b/aviation-cessna172-weight-balance.cabal
new file mode 100644
--- /dev/null
+++ b/aviation-cessna172-weight-balance.cabal
@@ -0,0 +1,42 @@
+name:               aviation-cessna172-weight-balance
+version:            0.0.2
+license:            BSD3
+license-file:       LICENCE
+author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>, Joshua Morris <ɯoɔ˙lᴉɐɯƃ@llǝʞsɐɥ+sᴉɹɹoɯuɥoɾɐnɥsoɾ>
+maintainer:         Tony Morris, Joshua Morris
+copyright:          Copyright (c) 2021, Tony Morris
+synopsis:           Weight and Balance for the Cessna 172 aircraft in aviation.
+category:           Aviation
+description:
+  Weight and Balance for the Cessna 172 aircraft in aviation.
+homepage:           https://gitlab.com/tonymorris/aviation-cessna172-weight-balance
+bug-reports:        https://gitlab.com/tonymorris/aviation-cessna172-weight-balance/issues
+cabal-version:      >= 1.10
+build-type:         Simple
+extra-source-files: changelog
+
+source-repository   head
+  type:             git
+  location:         git@gitlab.com:tonymorris/aviation-cessna172-weight-balance.git
+
+library
+  default-language:
+                    Haskell2010
+
+  build-depends:
+                    base >= 4.8 && < 5
+                    , lens >= 4.15 && < 5
+                    , aviation-weight-balance >= 0.0.2 && < 1
+                    , aviation-units >= 0.0.2 && < 1
+
+  ghc-options:
+                    -Wall
+
+  hs-source-dirs:
+                    src
+
+  exposed-modules:
+                    Data.Aviation.C172.WB
+                    Data.Aviation.C172.WB.C172AircraftArms
+                    Data.Aviation.C172.WB.C172Arms
+                    Data.Aviation.C172.WB.C172MomentEnvelope
diff --git a/changelog b/changelog
new file mode 100644
--- /dev/null
+++ b/changelog
@@ -0,0 +1,7 @@
+0.0.2
+
+* Update GHC
+
+0.0.1
+
+* Initial release
diff --git a/src/Data/Aviation/C172/WB.hs b/src/Data/Aviation/C172/WB.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/C172/WB.hs
@@ -0,0 +1,7 @@
+module Data.Aviation.C172.WB(
+  module A
+) where
+
+import Data.Aviation.C172.WB.C172Arms as A
+import Data.Aviation.C172.WB.C172AircraftArms as A
+import Data.Aviation.C172.WB.C172MomentEnvelope as A
diff --git a/src/Data/Aviation/C172/WB/C172AircraftArms.hs b/src/Data/Aviation/C172/WB/C172AircraftArms.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/C172/WB/C172AircraftArms.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+module Data.Aviation.C172.WB.C172AircraftArms(
+  C172AircraftArms(..)
+, HasC172AircraftArms(..)
+, bewC172AircraftArms
+, zfwMoment
+, ffwMoment
+, ufwMoment
+, totalC172Moment
+) where
+
+import Control.Applicative(Applicative((<*>), pure))
+import Control.Category((.))
+import Control.Lens(makeClassy, lens, (^.), (.~), (&))
+import Data.Aviation.C172.WB.C172Arms(C172Arms, HasC172Arms(c172Arms), fuel, c172ArmsPOH)
+import Data.Aviation.Units(Pounds(pounds))
+import Data.Aviation.WB(ArmStatic)
+import Data.Aviation.WB.Arm(Arm, HasArmStatic, staticArm)
+import Data.Aviation.WB.Weight(HasWeight(weight))
+import Data.Aviation.WB.Moment(Moment, momentX)
+import Data.Eq(Eq)
+import Data.Foldable(Foldable(foldr))
+import Data.Functor(Functor(fmap), (<$>))
+import Data.Ord(Ord)
+import Data.Traversable(Traversable(traverse))
+import Prelude(Show)
+
+data C172AircraftArms a =
+  C172AircraftArms {
+    _basicEmptyWeight ::
+      a
+  , c172Arms_ ::
+      C172Arms a
+  }
+  deriving (Eq, Ord, Show)
+
+makeClassy ''C172AircraftArms
+
+instance HasC172Arms (C172AircraftArms a) a where
+  c172Arms =
+    lens
+      (\(C172AircraftArms _ c) -> c)
+      (\(C172AircraftArms c _) a -> C172AircraftArms c a)
+
+instance Functor C172AircraftArms where
+  fmap k (C172AircraftArms c x) =
+    C172AircraftArms (k c) (fmap k x)
+
+instance Applicative C172AircraftArms where
+  pure a =
+    C172AircraftArms a (pure a)
+  C172AircraftArms c1 c2 <*> C172AircraftArms x1 x2 =
+    C172AircraftArms (c1 x1) (c2 <*> x2)
+
+instance Foldable C172AircraftArms where
+  foldr k z (C172AircraftArms c x) =
+    k c (foldr k z x)
+
+instance Traversable C172AircraftArms where
+  traverse k (C172AircraftArms c x) =
+    C172AircraftArms <$> k c <*> traverse k x
+
+bewC172AircraftArms ::
+  ArmStatic
+  -> C172AircraftArms Arm
+bewC172AircraftArms a =
+  C172AircraftArms
+    (staticArm a)
+    c172ArmsPOH
+
+-- zero fuel
+zfwMoment ::
+  C172AircraftArms Moment
+  -> C172AircraftArms Moment
+zfwMoment x =
+  x & fuel . weight .~ 0 ^. pounds
+
+-- full fuel
+ffwMoment ::
+  C172AircraftArms Moment
+  -> C172AircraftArms Moment
+ffwMoment x =
+  x & fuel . weight .~ 336 ^. pounds
+
+-- unusable fuel
+ufwMoment ::
+  C172AircraftArms Moment
+  -> C172AircraftArms Moment
+ufwMoment x =
+  x & fuel . weight .~ 18 ^. pounds
+
+
+totalC172Moment ::
+  (HasWeight w, HasArmStatic s) =>
+  w
+  -> C172Arms w
+  -> C172AircraftArms s
+  -> C172AircraftArms Moment
+totalC172Moment bew wt am =
+  momentX (C172AircraftArms bew wt) am
diff --git a/src/Data/Aviation/C172/WB/C172Arms.hs b/src/Data/Aviation/C172/WB/C172Arms.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/C172/WB/C172Arms.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+module Data.Aviation.C172.WB.C172Arms(
+  C172Arms(..)
+, HasC172Arms(..)
+, c172ArmsPOH
+) where
+
+import Control.Applicative(Applicative((<*>), pure))
+import Control.Lens(makeClassy, (^.))
+import Data.Aviation.Units(inches)
+import Data.Aviation.WB.Arm(Arm, (.->.), rangeArm, staticArm)
+import Data.Eq(Eq)
+import Data.Foldable(Foldable(foldr))
+import Data.Functor(Functor(fmap), (<$>))
+import Data.Ord(Ord)
+import Data.Traversable(Traversable(traverse))
+import Prelude(Show)
+
+data C172Arms a =
+  C172Arms {
+    _frontseat ::
+      a
+  , _rearseat ::
+      a
+  , _fuel ::
+      a
+  , _baggagea ::
+      a
+  , _baggageb ::
+      a
+  }
+  deriving (Eq, Ord, Show)
+
+makeClassy ''C172Arms
+
+instance Functor C172Arms where
+  fmap k (C172Arms t r f a b) =
+    C172Arms (k t) (k r) (k f) (k a) (k b)
+
+instance Applicative C172Arms where
+  pure a =
+    C172Arms a a a a a
+  C172Arms f1 f2 f3 f4 f5 <*> C172Arms a1 a2 a3 a4 a5 =
+    C172Arms (f1 a1) (f2 a2) (f3 a3) (f4 a4) (f5 a5)
+
+instance Foldable C172Arms where
+  foldr k z (C172Arms t r f a b) =
+    foldr k z [t,r,f,a,b]
+
+instance Traversable C172Arms where
+  traverse k (C172Arms t r f a b) =
+    C172Arms <$> k t <*> k r <*> k f <*> k a <*> k b
+
+c172ArmsPOH ::
+  C172Arms Arm
+c172ArmsPOH =
+  C172Arms
+    (rangeArm (37 ^. inches) (34 ^. inches .->. 46 ^. inches))
+    (staticArm (73 ^. inches))
+    (staticArm (48 ^. inches))
+    (rangeArm (95 ^. inches) (82 ^. inches .->. 108 ^. inches))
+    (rangeArm (123 ^. inches) (108 ^. inches .->. 142 ^. inches))
diff --git a/src/Data/Aviation/C172/WB/C172MomentEnvelope.hs b/src/Data/Aviation/C172/WB/C172MomentEnvelope.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Aviation/C172/WB/C172MomentEnvelope.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+
+module Data.Aviation.C172.WB.C172MomentEnvelope(
+  c172rNormalCategory
+, c172sNormalCategory
+, c172UtilityCategory
+) where
+
+import Prelude(Fractional)
+
+c172rNormalCategory ::
+  Fractional a =>
+  [(a, a)]
+c172rNormalCategory =
+  c172NormalCategory
+    (98, 2450)
+
+c172sNormalCategory ::
+  Fractional a =>
+  [(a, a)]
+c172sNormalCategory =
+  c172NormalCategory
+    (120.5, 2550)
+
+c172UtilityCategory ::
+  Fractional a =>
+  [(a, a)]
+c172UtilityCategory =
+  [
+    (61, 1500)
+  , (89, 2200)
+  , (82.5, 2200)
+  , (68, 1950)
+  , (52.5, 1500)
+  ]
+  
+-- not exported
+
+
+c172NormalCategory ::
+  Fractional a =>
+  (a, a)
+  -> [(a, a)]
+c172NormalCategory x =
+  [
+      x
+    , (71, 1500)
+    , (61, 1500)
+    , (89, 2200)
+    , (82.5, 2200)
+    , (104.5, 2550)
+  ]
