diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,14 @@
 
+Version 0.1.1
+-----
+
+* Added function shiftEstimate.
+
+* Added functions latticeSize, findLatticeTimeIndex.
+
+* Added function estimateAt.
+
+
 Version 0.1
 -----
 
diff --git a/Simulation/Aivika/Lattice/Estimate.hs b/Simulation/Aivika/Lattice/Estimate.hs
--- a/Simulation/Aivika/Lattice/Estimate.hs
+++ b/Simulation/Aivika/Lattice/Estimate.hs
@@ -10,8 +10,8 @@
 -- The module defines the 'Estimate' monad transformer which is destined for estimating
 -- computations within lattice nodes. Such computations are separated from the 'Event'
 -- computations. An idea is that the forward-traversing 'Event' computations provide with
--- something that can be observed, while the backward-traversing 'Estimate' computations
--- estimate the received information.
+-- something that can be observed, while the 'Estimate' computations estimate the received
+-- information and they can be backward-traversing.
 --
 module Simulation.Aivika.Lattice.Estimate
        (-- * Estimate Monad
@@ -19,13 +19,14 @@
         EstimateLift(..),
         runEstimateInStartTime,
         estimateTime,
-        latticeTimeStep,
         -- * Computations within Lattice
         foldEstimate,
         memoEstimate,
         estimateUpSide,
         estimateDownSide,
         estimateFuture,
+        shiftEstimate,
+        estimateAt,
         -- * Error Handling
         catchEstimate,
         finallyEstimate,
@@ -71,7 +72,7 @@
 --
 -- It is merely equivalent to the following definition:
 --
--- @estimateUpSide = estimateFuture 1 0@
+-- @estimateUpSide = shiftEstimate 1 0@
 --
 estimateUpSide :: Estimate LIO a -> Estimate LIO a
 estimateUpSide m =
@@ -90,7 +91,7 @@
 --
 -- It is merely equivalent to the following definition:
 --
--- @estimateDownSide = estimateFuture 1 1@
+-- @estimateDownSide = shiftEstimate 1 1@
 --
 estimateDownSide :: Estimate LIO a -> Estimate LIO a
 estimateDownSide m =
@@ -105,17 +106,36 @@
        invokeEstimate p' m
 
 -- | Estimate the computation in the shifted lattice node, where the first parameter
--- specifies the positive 'latticeTimeIndex' shift, but the second parameter
--- specifies the 'latticeMemberIndex' shift af any sign.
+-- specifies the 'latticeTimeIndex' shift of any sign, but the second parameter
+-- specifies the 'latticeMemberIndex' shift af any sign too.
 --
--- It allows looking into the future computations. The lattice is constructed in such a way
+-- It allows looking into the future or past computations. The lattice is constructed in such a way
 -- that we can define the past 'Estimate' computation in terms of the future @Estimate@
 -- computation. That is the point.
 --
--- Regarding the 'Event' computation, a quite opposite rule is true. The future @Event@ computation
--- depends on the past @Event@ computation. But we can update 'Ref' references within
+-- Regarding the 'Event' computation, it is quite different. The future @Event@ computation
+-- depends strongly on the past @Event@ computations. But we can update 'Ref' references within
 -- the corresponding discrete event simulation and then read them within the @Estimate@
 -- computation, because @Ref@ is 'Observable'.
+shiftEstimate :: Int
+                 -- ^ a shift of the lattice time index
+                 -> Int
+                 -- ^ a shift of the lattice member index
+                 -> Estimate LIO a
+                 -- ^ the source computation
+                 -> Estimate LIO a
+shiftEstimate di dk m =
+  Estimate $ \p ->
+  LIO $ \ps ->
+  do let ps' = shiftLIOParams di dk ps
+         r   = pointRun p
+     p' <- invokeLIO ps' $
+           invokeParameter r
+           latticePoint
+     invokeLIO ps' $
+       invokeEstimate p' m
+
+-- | Like 'shiftEstimate' but only the first argument must be possitive.
 estimateFuture :: Int
                   -- ^ a positive shift of the lattice time index
                   -> Int
@@ -123,10 +143,22 @@
                   -> Estimate LIO a
                   -- ^ the source computation
                   -> Estimate LIO a
-estimateFuture di dk m =
+estimateFuture di dk m
+  | di <= 0   = error "Expected to see a positive time index shift: estimateFuture"
+  | otherwise = shiftEstimate di dk m
+
+-- | Estimate the computation at the specified 'latticeTimeIndex' and 'latticeMemberIndex'.
+estimateAt :: Int
+              -- ^ the lattice time index
+              -> Int
+              -- ^ the lattice size index
+              -> Estimate LIO a
+              -- ^ the computation
+              -> Estimate LIO a
+estimateAt i k m =
   Estimate $ \p ->
   LIO $ \ps ->
-  do let ps' = shiftLIOParams di dk ps
+  do let ps' = lioParamsAt i k
          r   = pointRun p
      p' <- invokeLIO ps' $
            invokeParameter r
diff --git a/Simulation/Aivika/Lattice/Internal/Estimate.hs b/Simulation/Aivika/Lattice/Internal/Estimate.hs
--- a/Simulation/Aivika/Lattice/Internal/Estimate.hs
+++ b/Simulation/Aivika/Lattice/Internal/Estimate.hs
@@ -146,6 +146,7 @@
 runEstimateInStartTime (Estimate m) = runEventInStartTime (Event m)
 
 -- | Like 'time' estimates the current modeling time.
+-- It is more effcient than 'latticeTime'.
 estimateTime :: MonadDES m => Estimate m Double
 {-# INLINE estimateTime #-}
 estimateTime = Estimate $ return . pointTime
diff --git a/Simulation/Aivika/Lattice/Internal/LIO.hs b/Simulation/Aivika/Lattice/Internal/LIO.hs
--- a/Simulation/Aivika/Lattice/Internal/LIO.hs
+++ b/Simulation/Aivika/Lattice/Internal/LIO.hs
@@ -22,11 +22,14 @@
         upSideLIOParams,
         downSideLIOParams,
         shiftLIOParams,
+        lioParamsAt,
         latticeTimeIndex,
         latticeMemberIndex,
         latticeTime,
         latticeTimeStep,
-        latticePoint) where
+        latticePoint,
+        latticeSize,
+        findLatticeTimeIndex) where
 
 import Data.IORef
 import Data.Maybe
@@ -136,7 +139,7 @@
   where i = lioTimeIndex ps
         k = lioMemberIndex ps
 
--- | Return the derived LIO params with the specified shift in 'latticeTimeIndex' and
+-- | Return the derived parameters with the specified shift in 'latticeTimeIndex' and
 -- 'latticeMemberIndex' respectively, where the first parameter can be positive only.
 shiftLIOParams :: Int
                   -- ^ a positive shift the lattice time index
@@ -146,7 +149,7 @@
                   -- ^ the source parameters
                   -> LIOParams
 shiftLIOParams di dk ps
-  | di <= 0   = error "The time index shift must be positive: shiftLIOParams"
+  | i' < 0    = error "The time index cannot be negative: shiftLIOParams"
   | k' < 0    = error "The member index cannot be negative: shiftLIOParams"
   | k' > i'   = error "The member index cannot be greater than the time index: shiftLIOParams"
   | otherwise = ps { lioTimeIndex = i', lioMemberIndex = k' }
@@ -155,7 +158,20 @@
         k  = lioMemberIndex ps
         k' = k + dk
 
+-- | Return the parameters at the specified 'latticeTimeIndex' and 'latticeMemberIndex'.
+lioParamsAt :: Int
+               -- ^ the lattice time index
+               -> Int
+               -- ^ the lattice member index
+               -> LIOParams
+lioParamsAt i k
+  | i < 0     = error "The time index cannot be negative: lioParamsAt"
+  | k < 0     = error "The member index cannot be negative: lioParamsAt"
+  | k > i     = error "The member index cannot be greater than the time index: lioParamsAt"
+  | otherwise = LIOParams { lioTimeIndex = i, lioMemberIndex = k }
+
 -- | Return the lattice time index starting from 0. It corresponds to the integration time point.
+-- The index should be less than 'latticeSize'. 
 latticeTimeIndex :: LIO Int
 latticeTimeIndex = LIO $ return . lioTimeIndex
 
@@ -169,8 +185,10 @@
   Parameter $ \r ->
   LIO $ \ps ->
   let sc = runSpecs r
+      t0 = spcStartTime sc
+      dt = spcDT sc
       i  = lioTimeIndex ps
-      t  = spcStartTime sc + (fromInteger $ toInteger i) * (spcDT sc)
+      t  = t0 + (fromInteger $ toInteger i) * dt
   in return t
 
 -- | Return the point in the corresponding lattice node.
@@ -191,3 +209,24 @@
 -- | The time step used when constructing the lattice. Currently, it is equivalent to 'dt'.
 latticeTimeStep :: Parameter LIO Double
 latticeTimeStep = dt
+
+-- | Return the lattice size.
+latticeSize :: Parameter LIO Int
+latticeSize =
+  Parameter $ \r ->
+  do let sc = runSpecs r
+         t0 = spcStartTime sc
+         t2 = spcStopTime sc
+         dt = spcDT sc
+         i  = fromIntegral $ floor ((t2 - t0) / dt)
+     return (i + 1)
+
+-- | Find the lattice time index for the specified modeling time.
+findLatticeTimeIndex :: Double -> Parameter LIO Double
+findLatticeTimeIndex t =
+  Parameter $ \r ->
+  do let sc = runSpecs r
+         t0 = spcStartTime sc
+         dt = spcDT sc
+         i  = fromIntegral $ floor ((t - t0) / dt)
+     return i
diff --git a/Simulation/Aivika/Lattice/LIO.hs b/Simulation/Aivika/Lattice/LIO.hs
--- a/Simulation/Aivika/Lattice/LIO.hs
+++ b/Simulation/Aivika/Lattice/LIO.hs
@@ -13,7 +13,11 @@
        (LIO,
         runLIO,
         latticeTimeIndex,
-        latticeMemberIndex) where
+        latticeMemberIndex,
+        latticeSize,
+        latticeTime,
+        latticeTimeStep,
+        findLatticeTimeIndex) where
 
 import Simulation.Aivika.Trans.Comp
 import Simulation.Aivika.Trans.DES
diff --git a/aivika-lattice.cabal b/aivika-lattice.cabal
--- a/aivika-lattice.cabal
+++ b/aivika-lattice.cabal
@@ -1,5 +1,5 @@
 name:            aivika-lattice
-version:         0.1
+version:         0.1.1
 synopsis:        Nested discrete event simulation module for the Aivika library using lattice
 description:
     This experimental package extends the aivika-transformers [1] library with facilities for 
