diff --git a/Hastructure.cabal b/Hastructure.cabal
--- a/Hastructure.cabal
+++ b/Hastructure.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           Hastructure
-version:        0.50.0
+version: 0.50.2
 synopsis:       Cashflow modeling library for structured finance
 description:    Please see the README on GitHub at <https://github.com/yellowbean/Hastructure#readme>
 category:       StructuredFinance,Securitisation,Cashflow
@@ -76,19 +76,19 @@
       src
   build-depends:
     Decimal >= 0.5.2 && < 0.6,
-    base >= 4.18.0 && < 4.21,
-    deepseq >= 1.5.1 && < 1.6,
+    base >= 4.18.0 && < 4.21.0,
+    deepseq >= 1.5.0 && < 1.6,
     MissingH >= 1.6.0 && < 1.7,
-    containers >= 0.6.8 && < 0.7,
-    template-haskell >= 2.20.0 && < 2.21.1.0,
+    containers >= 0.6.8 && < 0.7.1,
+    template-haskell >= 2.20.0 && < 2.22.1.0,
     bytestring >= 0.12.1 && < 0.13,
-    exceptions >= 0.10.7 && < 0.11,
+    -- exceptions >= 0.10.7 && < 0.11,
     mtl >= 2.3.1 && < 2.4,
     time >= 1.12.2 && < 1.13,
     text >= 2.1.1 && < 2.2,
     regex-base >= 0.94.0 && < 0.95,
     aeson >= 2.2.3 && < 2.3,
-    hashable >= 1.4.7 && < 1.5,
+    hashable >= 1.4.7 && < 1.5.1,
     dlist >= 1.0 && < 1.1,
     scientific >= 0.3.8 && < 0.4,
     vector >= 0.13.2 && < 0.14,
@@ -98,7 +98,7 @@
     attoparsec-aeson >= 2.2.2 && < 2.3,
     generic-lens >= 2.2.2 && < 2.3,
     http-types >= 0.12.4 && < 0.13,
-    ieee754 >= 0.8.0 && < 0.9,
+    -- ieee754 >= 0.8.0 && < 0.9,
     lens >= 5.2.3 && < 5.3.6,
     parallel >= 3.2.2 && < 3.3,
     math-functions >= 0.3.4 && < 0.4,
@@ -106,7 +106,7 @@
     numeric-limits >= 0.1.0 && < 0.2,
     openapi3 >= 3.2.4 && < 3.3,
     regex-pcre-builtin >= 0.95.2 && < 0.96,
-    regex-tdfa >= 1.3.2 && < 1.4,
+    -- regex-tdfa >= 1.3.2 && < 1.4,
     servant >= 0.20.2 && < 0.21,
     servant-openapi3 >= 2.0.1 && < 2.1,
     servant-server >= 0.20.2 && < 0.21,
@@ -135,7 +135,7 @@
   build-depends:
     Hastructure,
     Decimal,
-    base >= 4.18.0 && < 4.20,
+    base >= 4.18.0 && < 4.21.0,
     deepseq,
     MissingH,
     containers,
@@ -157,7 +157,6 @@
     attoparsec-aeson,
     generic-lens,
     http-types,
-    ieee754,
     lens,
     parallel,
     math-functions,
@@ -165,7 +164,6 @@
     numeric-limits,
     openapi3,
     regex-pcre-builtin,
-    regex-tdfa,
     servant,
     servant-openapi3,
     servant-server,
@@ -216,7 +214,7 @@
   build-depends:
     Hastructure,
     Decimal,
-    base >= 4.18.0 && < 4.20,
+    base >= 4.18.0 && < 4.21,
     deepseq,
     MissingH,
     containers,
@@ -238,7 +236,6 @@
     attoparsec-aeson,
     generic-lens,
     http-types,
-    ieee754,
     lens,
     parallel,
     math-functions,
@@ -246,7 +243,6 @@
     numeric-limits,
     openapi3,
     regex-pcre-builtin,
-    regex-tdfa,
     servant,
     servant-openapi3,
     servant-server,
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -104,7 +104,7 @@
 
 
 version1 :: Version 
-version1 = Version "0.50.0"
+version1 = Version "0.50.2"
 
 
 wrapRun :: [D.ExpectReturn] -> DealType -> Maybe AP.ApplyAssumptionType -> AP.NonPerfAssumption -> RunResp
diff --git a/src/AssetClass/Loan.hs b/src/AssetClass/Loan.hs
--- a/src/AssetClass/Loan.hs
+++ b/src/AssetClass/Loan.hs
@@ -32,20 +32,21 @@
 import qualified Asset as A
 import Control.Lens hiding (element)
 import Control.Lens.TH
+import qualified Data.DList as DL
 debug = flip trace
 
 
 -- instance Asset Loan where
-projectLoanFlow :: ((Balance,Int,IRate), Balance, Date, AmortPlan, DayCount, IRate, Rational) -> (Dates, [DefaultRate],[PrepaymentRate],[IRate],[Int]) -> ([CF.TsRow],Rational)
+projectLoanFlow :: ((Balance,Int,IRate), Balance, Date, AmortPlan, DayCount, IRate, Rational) -> (Dates, [DefaultRate],[PrepaymentRate],[IRate],[Int]) -> (DL.DList CF.TsRow, Balance, Date ,Rational)
 projectLoanFlow ((originBal,ot,or), startBal, lastPayDate, pt, dc,startRate, begFactor) (cfDates,defRates,ppyRates,rateVector,remainTerms) = 
   let 
     initRow = CF.LoanFlow lastPayDate startBal 0.0 0.0 0.0 0.0 0.0 0.0 startRate Nothing
   in 
     foldl
-      (\(acc,factor) (pDate, ppyRate, defRate, intRate, rt)
+      (\(acc,begBal,lastPaidDate,factor) (pDate, ppyRate, defRate, intRate, rt)
         -> let 
-             begBal = view CF.tsRowBalance (last acc)
-             lastPaidDate = getDate (last acc)
+             -- begBal = view CF.tsRowBalance (last acc)
+             -- lastPaidDate = getDate (last acc)
              newDefault = mulBR begBal defRate
              newPrepay = mulBR (begBal - newDefault) ppyRate
              intBal = begBal - newDefault - newPrepay
@@ -72,9 +73,11 @@
                          _ -> error $ "failed to match Loan Project newPrin"++ show (rt,pt)
              endBal = intBal - newPrin
            in
-             (acc ++ [CF.LoanFlow pDate endBal newPrin newInt newPrepay newDefault 0.0 0.0 intRate Nothing]
+             (DL.snoc acc (CF.LoanFlow pDate endBal newPrin newInt newPrepay newDefault 0.0 0.0 intRate Nothing)
+             ,endBal
+             ,pDate
              ,newFactor))
-      ([initRow],begFactor)
+      (DL.singleton initRow, startBal, lastPayDate, begFactor)
       (zip5 cfDates ppyRates defRates rateVector remainTerms)  
 
 instance Asset Loan where
@@ -146,8 +149,8 @@
                           in 
                             divideBB cb (scheduleBals!!(ot - rt))
                          _ -> 1.0  
-          let (txns,_) = projectLoanFlow ((ob,ot,getOriginRate pl), cb,lastPayDate,prinPayType,dc,cr,initFactor) (cfDates,defRates,ppyRates,rateVector,remainTerms)  -- `debug` (" rateVector"++show rateVector)
-          let (futureTxns,historyM) = CF.cutoffTrs asOfDay (patchLossRecovery txns recoveryAssump)
+          let (txns,_,_,_) = projectLoanFlow ((ob,ot,getOriginRate pl), cb,lastPayDate,prinPayType,dc,cr,initFactor) (cfDates,defRates,ppyRates,rateVector,remainTerms)  -- `debug` (" rateVector"++show rateVector)
+          let (futureTxns,historyM) = CF.cutoffTrs asOfDay (patchLossRecovery (DL.toList txns) recoveryAssump)
           let begBal = CF.buildBegBal futureTxns
           return $ (applyHaircut ams (CF.CashFlowFrame (begBal,asOfDay,Nothing) futureTxns), historyM)
   -- ^ Project cashflow for defautled loans 
diff --git a/src/AssetClass/ProjectedCashFlow.hs b/src/AssetClass/ProjectedCashFlow.hs
--- a/src/AssetClass/ProjectedCashFlow.hs
+++ b/src/AssetClass/ProjectedCashFlow.hs
@@ -184,7 +184,7 @@
     getOriginBal x = getCurrentBal x
     getOriginRate x = 0.0
 
-    isDefaulted f = error ""
+    isDefaulted f = False
     getOriginDate f = error ""
     getOriginInfo f = error ""
 
@@ -208,16 +208,10 @@
     projCashflow f asOfDay (pAssump, _, _) mRates
       = do
           (fixedCashFlow, floatedCashFlow) <- seperateCashflows f (Just pAssump) mRates
-          return $ (foldl CF.combine fixedCashFlow floatedCashFlow, Map.empty)
-          --(fixedCashFlow, Map.empty)
+          return (foldl CF.combine fixedCashFlow floatedCashFlow, Map.empty)
 
     projCashflow a b c d = Left $ "Failed to match when proj projected flow with assumption >>" ++ show a ++ show b ++ show c ++ show d
     
     getBorrowerNum f = 0
 
     splitWith f rs = [f]
-
--- instance IR.UseRate ProjectedCashflow where 
---       isAdjustbleRate _ = False
---       getIndex _ = Nothing
---       getIndexes _ = Nothing
diff --git a/src/Deal.hs b/src/Deal.hs
--- a/src/Deal.hs
+++ b/src/Deal.hs
@@ -62,7 +62,7 @@
 import Data.Maybe
 import Data.Either
 import Data.Aeson hiding (json)
-import qualified Data.Aeson.Encode.Pretty as Pretty
+-- import qualified Data.Aeson.Encode.Pretty as Pretty
 import Language.Haskell.TH
 import Data.Aeson.TH
 import Data.Aeson.Types
@@ -393,7 +393,7 @@
 run :: Ast.Asset a => TestDeal a -> Map.Map PoolId CF.PoolCashflow -> Maybe [ActionOnDate] -> Maybe [RateAssumption] -> Maybe ([Pre],[Pre])
         -> Maybe (Map.Map String (RevolvingPool,AP.ApplyAssumptionType)) -> DL.DList ResultComponent 
         -> Either String (TestDeal a,DL.DList ResultComponent, Map.Map PoolId CF.PoolCashflow)
-run t@TestDeal{status=(Ended endedDate)} pCfM ads _ _ _ log  = return (t,DL.snoc log (EndRun (Just endedDate) "By Status:Ended"), pCfM)
+run t@TestDeal{status=(Ended endedDate)} pCfM ads _ _ _ log  = return (t,DL.snoc log (EndRun endedDate "By Status:Ended"), pCfM)
 run t pCfM (Just []) _ _ _ log  = return (t,DL.snoc log (EndRun Nothing "No Actions"), pCfM)
 run t pCfM (Just [HitStatedMaturity d]) _ _ _ log  = return (t, DL.snoc log (EndRun (Just d) "Stop: Stated Maturity"), pCfM)
 run t pCfM (Just (StopRunFlag d:_)) _ _ _ log  = return (t, DL.snoc log (EndRun (Just d) "Stop Run Flag"), pCfM)
@@ -702,7 +702,7 @@
                                             L.payYield d intToPay bnd1)
                                         (bonds t)
                                         bondPricingResult
-                run t {bonds = depositBondFlow, status = Ended d} Map.empty (Just []) rates calls rAssump $ DL.snoc log (EndRun (Just d) "MakeWhole call")
+                run t {bonds = depositBondFlow, status = Ended (Just d)} Map.empty (Just []) rates calls rAssump $ DL.snoc log (EndRun (Just d) "MakeWhole call")
         
         FundBond d Nothing bName accName fundAmt ->
           let 
diff --git a/src/Deal/DealAction.hs b/src/Deal/DealAction.hs
--- a/src/Deal/DealAction.hs
+++ b/src/Deal/DealAction.hs
@@ -55,7 +55,7 @@
 import Data.Maybe
 import Data.Either
 import Data.Aeson hiding (json)
-import qualified Data.Aeson.Encode.Pretty as Pretty
+-- import qualified Data.Aeson.Encode.Pretty as Pretty
 import Language.Haskell.TH
 import Data.Aeson.TH
 import Data.Aeson.Types
diff --git a/src/Deal/DealBase.hs b/src/Deal/DealBase.hs
--- a/src/Deal/DealBase.hs
+++ b/src/Deal/DealBase.hs
@@ -48,7 +48,6 @@
 import Data.Maybe
 import Data.Ratio
 import Data.Aeson hiding (json)
-import qualified Data.Aeson.Encode.Pretty as Pretty
 import Language.Haskell.TH
 import Data.Aeson.TH
 import Data.Aeson.Types
diff --git a/src/Deal/DealMod.hs b/src/Deal/DealMod.hs
--- a/src/Deal/DealMod.hs
+++ b/src/Deal/DealMod.hs
@@ -48,7 +48,7 @@
 import Data.Maybe
 import Data.Ratio
 import Data.Aeson hiding (json)
-import qualified Data.Aeson.Encode.Pretty as Pretty
+-- import qualified Data.Aeson.Encode.Pretty as Pretty
 import Language.Haskell.TH
 import Data.Aeson.TH
 import Data.Aeson.Types
diff --git a/src/Lib.hs b/src/Lib.hs
--- a/src/Lib.hs
+++ b/src/Lib.hs
@@ -27,7 +27,7 @@
 import Data.Aeson.TH
 import Data.Aeson.Types
 import Data.Aeson hiding (json)
-import Text.Regex.TDFA
+-- import Text.Regex.TDFA
 import Data.Fixed (Fixed(..), HasResolution,Centi, resolution)
 import Data.Ratio
 import Types
diff --git a/src/Types.hs b/src/Types.hs
--- a/src/Types.hs
+++ b/src/Types.hs
@@ -487,7 +487,7 @@
                 | PreClosing DealStatus             -- ^ Deal is not closed, but has a closing date
                 | Warehousing (Maybe DealStatus)    -- ^ Deal is not closed, but closing date is not determined yet
                 | Called                            -- ^ Deal is called
-                | Ended Date                        -- ^ Deal is marked as closed
+                | Ended (Maybe Date)                -- ^ Deal is marked as closed
                 deriving (Show,Ord,Eq,Read, Generic)
 
 -- ^ pricing methods for assets
