diff --git a/HLearn-algebra.cabal b/HLearn-algebra.cabal
--- a/HLearn-algebra.cabal
+++ b/HLearn-algebra.cabal
@@ -1,5 +1,5 @@
 Name:                HLearn-algebra
-Version:             0.1.0.1
+Version:             0.1.1.0
 Synopsis:            Algebraic foundation for homomorphic learning
 Description:         This module contains the algebraic basis for the HLearn library.  It is separated out in it's own library because it contains routines that may be useful to others.  In particular, it contains methods for automatically converting algorithms into online/parallel versions, and its structure is slightly more modular (although much less complete) than other algebra packages.
 Category:            Data Mining, Machine Learning
diff --git a/src/HLearn/Algebra/Models.hs b/src/HLearn/Algebra/Models.hs
--- a/src/HLearn/Algebra/Models.hs
+++ b/src/HLearn/Algebra/Models.hs
@@ -20,6 +20,10 @@
     , HomTrainer (..)
     , DefaultHomTrainer (..)
     
+    -- * Convenience functions
+    , sub1dp
+    , subBatch
+    
     -- * Type synonyms
 --     , Labeled
 --     , Weighted
@@ -53,7 +57,7 @@
     ( Semigroup model
     , Monoid model
     , Model modelparams model
-    ) => HomTrainer modelparams datapoint model
+    ) => HomTrainer modelparams datapoint model | model -> modelparams
         where
 
     -- | The singleton trainer
@@ -71,7 +75,7 @@
         , CK.FoldableConstraint container model
         ) => modelparams -> container datapoint -> model
     train' modelparams = batch (train1dp' modelparams)
-    
+
     -- | The online trainer
     {-# INLINE add1dp #-}
     add1dp :: model -> datapoint -> model
@@ -88,11 +92,40 @@
         ) =>  model -> container datapoint -> model
     addBatch model = online (train' (getparams model :: modelparams)) model
     
+
+sub1dp :: 
+    ( RegularSemigroup model
+    , HomTrainer modelparams datapoint model
+    , DefaultModel modelparams model
+    ) => model -> datapoint -> model
+sub1dp model dp = model <> (inverse $ train1dp dp)
+
+-- model -. dp = sub1dp model dp
+-- model -. xs = subBatch model xs
+
+subBatch :: 
+    ( CK.Functor container
+    , CK.FunctorConstraint container model
+    , CK.FunctorConstraint container datapoint
+    , CK.Foldable container
+    , CK.FoldableConstraint container model
+    , RegularSemigroup model
+    , HomTrainer modelparams datapoint model
+    , DefaultModel modelparams model
+    ) => model -> container datapoint -> model
+subBatch model xs = model <> (inverse $ train xs)
+
 instance 
     ( HomTrainer modelparams datapoint model
     , LeftOperator r model
     ) => HomTrainer modelparams (r,datapoint) model where
         train1dp' modelparams (r,dp) = r .* (train1dp' modelparams dp)
+
+-- instance 
+--     ( HomTrainer modelparams datapoint model
+--     , RightOperator r model
+--     ) => HomTrainer modelparams (datapoint,r) model where
+--         train1dp' modelparams (dp,r) = (train1dp' modelparams dp) *. r
 
 
 -- | Provides parameterless functions for those training algorithms that do not require parameters
diff --git a/src/HLearn/Algebra/Morphism.hs b/src/HLearn/Algebra/Morphism.hs
--- a/src/HLearn/Algebra/Morphism.hs
+++ b/src/HLearn/Algebra/Morphism.hs
@@ -120,7 +120,7 @@
 --     ) => DefaultModel (MorphismComposition domain params1 interdomain params2 codomain) codomain
 --     where
 --         defparams = undefined
-
+{-
 instance 
     ( CK.FunctorConstraint container model
     , CK.FunctorConstraint container datapoint
@@ -136,4 +136,4 @@
     , Model (MorphismComposition domain params1 interdomain params2 codomain) codomain
     ) => HomTrainer (MorphismComposition (container datapoint) params1 interdomain params2 codomain) datapoint codomain
     where
-         train1dp' (params2 :. params1) dp = params2 <.> (train1dp' params1 dp)
+         train1dp' (params2 :. params1) dp = params2 <.> (train1dp' params1 dp)-}
diff --git a/src/HLearn/Algebra/Structures/Modules.hs b/src/HLearn/Algebra/Structures/Modules.hs
--- a/src/HLearn/Algebra/Structures/Modules.hs
+++ b/src/HLearn/Algebra/Structures/Modules.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE DatatypeContexts #-}
