diff --git a/HCube/Common.hs b/HCube/Common.hs
--- a/HCube/Common.hs
+++ b/HCube/Common.hs
@@ -1,15 +1,18 @@
 -----------------------------------------------------------------------------
 -- 
 -- Module      :  HCube.Common
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 --
 -- Common utility functions that should not be exported. 
 -----------------------------------------------------------------------------
+{-# LANGUAGE Safe #-}
+{-# OPTIONS_HADDOCK hide #-}
+
 module HCube.Common where
 
 import Control.Monad (liftM)
diff --git a/HCube/Cons.hs b/HCube/Cons.hs
--- a/HCube/Cons.hs
+++ b/HCube/Cons.hs
@@ -1,29 +1,35 @@
 -----------------------------------------------------------------------------
 -- | 
 -- Module      :  HCube.Cons
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 -- 
 -- Provides functions for re-constructing internal data representation
 -- of virtual cube from a physical cube.
 -----------------------------------------------------------------------------
-module HCube.Cons (realToVirtual, consOrient) where
+{-# LANGUAGE Safe #-}
 
+module HCube.Cons (realToVirtual, fromPhysical, consOrient) where
+
 import Data.Monoid
-import Data.Maybe (mapMaybe)
-import Data.List (sort, mapAccumL)
+import Data.Maybe (mapMaybe, fromMaybe)
+import Data.List (sort, mapAccumL, nub)
 import HCube.Data
 import HCube.Utility
 import HCube.Lib
 import HCube.OrientGroup
 
+fromPhysical		:: FilePath -> IO Rubik
+fromPhysical fn		= readFile fn >>= f . read where
+    f			= return . realToVirtual
+
 -- | Constructs a virtual cube from a physical cube using CubeSurf.
-realToVirtual		:: Size -> CubeSurf -> Rubik
-realToVirtual sz ci	= f $ foldr g ([],[],[],[]) $ consCubeInfo sz ci where
+realToVirtual		:: CubeSurf -> Rubik
+realToVirtual cs	= f $ foldr g ([],[],[],[]) $ consCubeInfo sz cs where
     f (cr, ed, ce, hi)	= Rubik sz cr ed ce hi True LeftV []
     g (ci, ac, ct) (cr,ed,ce,hi) = h $ length ct where
 	h 0	= (cr,ed,ce,i ci ac :hi)
@@ -38,6 +44,14 @@
     l (v1:v2:_)		= consOrient v1 v2
     m []		= 0
     m ls		= head ls
+    --sz			= fromJust $ getSize cs
+    sz			= fromMaybe (error "Improper format") $ getSize cs
+
+getSize			:: CubeSurf -> Maybe Size
+getSize cs		= f . nub $ map (squareRoot . length) $ map snd cs where
+    f (hd:[])		= hd
+    f _			= Nothing
+
 
 extractOrientInfo	:: ActualCube -> [(Side,Color)]
 extractOrientInfo ac	= mapMaybe f [(UpS, up ac), (FrontS, front ac), (DownS, down ac),
diff --git a/HCube/Cube.hs b/HCube/Cube.hs
--- a/HCube/Cube.hs
+++ b/HCube/Cube.hs
@@ -1,20 +1,23 @@
------------------------------------------------------------------------------
+----------------------------------------------------------------------------
 -- | 
 -- Module      :  HCube.Cube
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 -- 
 -- Executable of hcube. 
 -----------------------------------------------------------------------------
+{-# LANGUAGE Trustworthy #-}
+
 module Main where
 
 import System.Environment (getArgs)
 import Control.Monad (foldM, (>=>))
 import Data.Maybe (fromMaybe)
+import System.Directory (createDirectoryIfMissing)
 import HCube.Data
 import HCube.Lib
 import HCube.Utility
@@ -28,36 +31,21 @@
 {-
 ghci Cube.hs
 :set args 2
+:set args "physicalCubeExample"
 -}
 
+path			= "store/"
+
 main			:: IO ()
 main			= getArgs >>= f where
-    f args		= runTests
+    f args		= createDirectoryIfMissing True path 
 			  >> putStrLn "enter 'help' for menu"
-			  >> loadCube g h
+			  >> getCube args
 			  >>= render
 			  >>= console
-			  >>= saveCube h
+			  >>= saveCube2
 			  >> return () where
-        g		= getCubeSize args
-	h		= show g ++ "x" ++ show g
 
-main2			:: IO ()
-main2			= getArgs >>= f where
-    f args		= runTests
-			  >> putStrLn "enter 'help' for menu"
-			  >> return ( realToVirtual 3 myCube)
-			  >>= render
-			  >>= console
-			  >> return () where
-        g		= getCubeSize args
-	h		= show g ++ "x" ++ show g
-
-getCubeSize		:: [String] -> Int 
-getCubeSize 		= f where
-    f []		= 3
-    f args		= fromMaybe 3 $ maybeRead $ head args 
-
 console			:: Rubik -> IO Rubik
 console			= doM loop f where
    f			= (getLine >>= parseCmd ~> processCmd) >=> render 
@@ -131,29 +119,19 @@
     f _ _ 0		= NoCommand
     f sl dr nm		= Operation [Rotation sl dr nm]
 
--- On a face record cube color from left to right moving from top to bottom.
--- Start with Top face
--- Rotate cube so Front face comes to Top
--- Top -> Front -> Bottom -> Back -> Top -> Left -> Top -> Right
+getCube			:: [String] -> IO Rubik
+getCube			= f where
+    f []		= loadCube2 3
+    f args		= maybe g loadCube2 (maybeRead h) where
+    	g		= fromPhysical $ concat [path, h]
+	h		= head args 
 
-{-
-FACE IDs
-               1  2  
-               3  4  
-         1  2  1  2  1  2  
-         3  4  3  4  3  4  
-               1  2  
-               3  4  
-         4  3  1  2  4  3  
-         2  1  3  4  2  1  
-               1  2  
-               3  4   
--}
+loadCube2		:: Size -> IO Rubik
+loadCube2 sz		= loadCube sz f where
+    f 			= concat [path, g, "x", g, "x", g]
+    g			= show sz
 
-myCube	:: CubeSurf
-myCube = [(UpS,	[White,Green,Yellow,Green,White,Green,Red,White,Green]),
-	  (FrontS, 	[Blue,Blue,White,Yellow,Orange,Yellow,Red,Yellow,White]),
-	  (DownS,	[Yellow,Blue,Green,White,Yellow,Blue,White,Orange,Green]),
-	  (BackS,	[Orange,Blue,Orange,Yellow,Red,Red,Red,Orange,Blue]),
-	  (LeftS,	[Orange,White,Yellow,Red,Green,Red,Orange,Red,Red]),
-	  (RightS,	[Blue,Green,Blue,Orange,Blue,White,Green,Orange,Yellow])]
+saveCube2		:: Rubik -> IO ()
+saveCube2 rk		= saveCube f rk where
+    f 			= concat [path, g, "x", g, "x", g]
+    g			= show $ n rk
diff --git a/HCube/Data.hs b/HCube/Data.hs
--- a/HCube/Data.hs
+++ b/HCube/Data.hs
@@ -1,18 +1,17 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Data
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 -- 
 -----------------------------------------------------------------------------
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module HCube.Data where
+{-# LANGUAGE Safe #-}
 
-newtype TestNumb	= TestNumb Int deriving (Integral, Enum, Num, Real, Eq, Ord, Read, Show)
+module HCube.Data where
 
 -- | Integer type used in hcube.
 type Numb		= Int
diff --git a/HCube/Lib.hs b/HCube/Lib.hs
--- a/HCube/Lib.hs
+++ b/HCube/Lib.hs
@@ -1,15 +1,18 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Lib
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 --
 -- Exposes virtual cube functionality.
 -----------------------------------------------------------------------------
+
+{-# LANGUAGE Safe #-}
+
 module HCube.Lib (Rubik(..), 
 		Cube(..),
 		posToId,
@@ -251,6 +254,3 @@
 
 fromFile		:: FilePath -> IO Rubik
 fromFile fn		= readFile fn >>= return . read
-
-
-
diff --git a/HCube/OrientGroup.hs b/HCube/OrientGroup.hs
--- a/HCube/OrientGroup.hs
+++ b/HCube/OrientGroup.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.OrientGroup
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 --
@@ -12,7 +12,7 @@
 -- whole. 
 -----------------------------------------------------------------------------
 
-{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts #-}
+{-# LANGUAGE Safe, MultiParamTypeClasses, FlexibleContexts #-}
 
 module HCube.OrientGroup (
 	Group(..), 
diff --git a/HCube/Permutation.hs b/HCube/Permutation.hs
--- a/HCube/Permutation.hs
+++ b/HCube/Permutation.hs
@@ -1,15 +1,18 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Permutation
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 -- 
 -- Generation of permutation representation of cube.
 -----------------------------------------------------------------------------
+
+{-# LANGUAGE Trustworthy #-}
+
 module HCube.Permutation (genPerm) where
 
 import Math.Algebra.Group.PermutationGroup (Permutation, fromPairs')
diff --git a/HCube/Template.hs b/HCube/Template.hs
--- a/HCube/Template.hs
+++ b/HCube/Template.hs
@@ -1,15 +1,17 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Template
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 -- 
 -- Console visualization of virtual cube.
 -----------------------------------------------------------------------------
+{-# LANGUAGE Trustworthy #-}
+
 module HCube.Template (render) where
 
 import Data.Text (Text, pack, unpack, replace, splitOn)
diff --git a/HCube/Test.hs b/HCube/Test.hs
--- a/HCube/Test.hs
+++ b/HCube/Test.hs
@@ -1,10 +1,10 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Test
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 --
@@ -13,17 +13,20 @@
 module HCube.Test (runTests)
 where
 
+{-# LANGUAGE Safe #-}
+
+import Data.Int
 import Test.QuickCheck.Test(verboseCheckWith,quickCheck,quickCheckWith, Args(..))
 import Test.QuickCheck.Arbitrary(Arbitrary, arbitrary, shrink, shrinkIntegral)
 import Test.QuickCheck.Gen(Gen,sized, choose)
-import HCube.Data (Vec, TestNumb(..) )
+import HCube.Data (Vec, Numb)
 import HCube.Lib (posToId, getPos, initCube)
 import HCube.OrientGroup (Orient (..), rawToOrientNumber, rawOrientNum, orientNumberToRaw)
 import HCube.Utility (mapVec, modNot, gateMinus, modMinus)
 
 -- invariants
 
-idProperty (TestNumb sz) = f where
+idProperty sz     = f where
 	f	  = [posToId sz . getPos sz $ a | a <- [1..g]] == [1..g]
 	g	  = sz*sz*sz
 
@@ -36,7 +39,7 @@
 		j	= gateMinus cd
 		k	= modMinus cd 17
 
-orientProperty   :: TestNumb -> Bool	
+orientProperty   :: Numb -> Bool	
 orientProperty _ = orientId
 
 args = Args {
@@ -49,16 +52,6 @@
 
 args2 = args {maxSuccess = 1,
 	      maxDiscardRatio = 1} 
-
-instance Arbitrary TestNumb where
-  arbitrary = arbitraryNumb
-  shrink    = shrinkIntegral
-
-arbitraryNumb   :: Gen TestNumb
-arbitraryNumb =
-  sized $ \n ->
-    let n' = toInteger n in
-      fmap fromInteger (choose (1, n'))
 
 runTests		:: IO ()
 runTests		= f where
diff --git a/HCube/Theory.hs b/HCube/Theory.hs
--- a/HCube/Theory.hs
+++ b/HCube/Theory.hs
@@ -1,16 +1,18 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Theory
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 -- 
 -- Module for generating tables exhibiting internals of hcube.
 -- See the design directory for output generated by these functions.
 -----------------------------------------------------------------------------
+{-# LANGUAGE Safe #-}
+
 module HCube.Theory (
 	displayColors,
 	displayOrientVecMapping,
@@ -107,7 +109,7 @@
 -}
 -- | Shows how colors on a cubie are mapped to orientation. 
 displayColorToOrient	:: IO ()
-displayColorToOrient	= writeFile "colorToOrient" $ unlines . twoPagesOnOne "\t\t"
+displayColorToOrient	= writeFile "store/colorToOrient" $ unlines . twoPagesOnOne "\t\t"
 			. sort . map f $ map g sideColorDomain where
     f (((fd1,cl1),(fd2,cl2)), vs) 
 			= concat [show cl1 ++ show cl2, "  ",
diff --git a/HCube/Utility.hs b/HCube/Utility.hs
--- a/HCube/Utility.hs
+++ b/HCube/Utility.hs
@@ -1,21 +1,33 @@
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  HCube.Utility
--- Copyright   :  (c) Todd Wegner 2013
+-- Copyright   :  (c) Todd Wegner 2012
 -- License     :  BSD-style (see the LICENSE file)
 -- 
--- Maintainer  :  todd.w.wegner@gmail.com
+-- Maintainer  :  echbar137@yahoo.co.in
 -- Stability   :  provisional
 -- Portability :  portable
 --
 -- Common utility functions, simple linear algebra. 
 -----------------------------------------------------------------------------
+{-# LANGUAGE Safe #-}
+
 module HCube.Utility where
 
 import Control.Monad (foldM, (>=>), liftM, liftM2)
 import Data.List
 import HCube.Data
 import HCube.Common(padL)
+
+-- | Returns square root of argument if argument is a perfect square. 
+squareRoot		:: Int -> Maybe Int
+squareRoot nn		= f 1 nn where
+    f lo hi | lo > hi	= Nothing
+	    | nn == h	= Just g
+	    | nn < h	= f lo (g - 1)
+	    | otherwise = f (g + 1) h where
+	g		= (hi + lo) `div` 2
+	h		= g * g
 
 -- | Multiple a matrix on the left side of a vector.
 (|*|)		:: Matrix -> Vec -> Vec
diff --git a/HCube/store/physicalCubeExample b/HCube/store/physicalCubeExample
deleted file mode 100644
--- a/HCube/store/physicalCubeExample
+++ /dev/null
@@ -1,6 +0,0 @@
-[(UpS, [White,Green,Yellow,Green,White,Green,Red,White,Green]),
-          (FrontS,      [Blue,Blue,White,Yellow,Orange,Yellow,Red,Yellow,White]),
-          (DownS,       [Yellow,Blue,Green,White,Yellow,Blue,White,Orange,Green]),
-          (BackS,       [Orange,Blue,Orange,Yellow,Red,Red,Red,Orange,Blue]),
-          (LeftS,       [Orange,White,Yellow,Red,Green,Red,Orange,Red,Red]),
-          (RightS,      [Blue,Green,Blue,Orange,Blue,White,Green,Orange,Yellow])]
diff --git a/README b/README
--- a/README
+++ b/README
@@ -0,0 +1,91 @@
+----------------------------------------------------------------------------
+-- 
+--             :  hcube
+-- Copyright   :  (c) Todd Wegner 2012
+-- License     :  BSD-style (see the LICENSE file)
+-- 
+-- Maintainer  :  echbar137@yahoo.co.in
+-- Stability   :  provisional
+-- Portability :  portable
+-- 
+-----------------------------------------------------------------------------
+
+Command line arguments for hcube :
+
+./hcube 2	Loads the 2x2x2 cube state.
+./hcube 3	Loads the 3x3x3 cube state.
+./hcube 4	Loads the 4x4x4 cube state.
+./hcube 5	Loads the 5x5x5 cube state.
+./hcube		Loads the 3x3x3 cube state.
+./hcube <name of physical cube file> Creates cube based on physical file.
+
+Cube is created in a solved state if no previous state for that dimension exists.
+Although the library supports cubes of arbitrary size, the hcube executable does not
+support sizes beyond 5x5x5.
+
+The state of cube is stored in the 'store' directory with a name based on the dimension
+of the cube.  For example a 3x3x3 cube is saved as 'solved/3x3x3'.
+
+If the 'solve' directory does not exist it is created.
+
+Loading a physical Cube state :
+Physical file must be placed in the 'store' directory.
+
+Sample contents of a physical file for a 3x3x3 cube is :
+
+[(UpS,    [White,Green,Yellow,Green,White,Green,Red,White,Green]),
+ (FrontS, [Blue,Blue,White,Yellow,Orange,Yellow,Red,Yellow,White]),
+ (DownS,  [Yellow,Blue,Green,White,Yellow,Blue,White,Orange,Green]),
+ (BackS,  [Orange,Blue,Orange,Yellow,Red,Red,Red,Orange,Blue]),
+ (LeftS,  [Orange,White,Yellow,Red,Green,Red,Orange,Red,Red]),
+ (RightS, [Blue,Green,Blue,Orange,Blue,White,Green,Orange,Yellow])]
+
+This is a list of six tuples, corresponding to one for each six side of a cube.
+A tuple consists of the cube side followed by a list of colors appearing on that cube side.
+The tuples can be in any order, however it is easier to use the order given, rotating the cube
+about the Left and Right axis to identify the colors of four of the sides.
+The order of the colors appear in the list is important and is given by the following diagram :
+
+1  2  3  Right     1  2  3  Up            1  2  3  Left 
+4  5  6  Side      4  5  6  Side          4  5  6  Side
+7  8  9            7  8  9                7  8  9
+
+                   1  2  3  Front
+                   4  5  6  Side
+                   7  8  9
+
+                   1  2  3  Down
+                   4  5  6  Side
+                   7  8  9
+
+                   1  2  3  Back
+                   4  5  6  Side
+                   7  8  9
+
+Console commands for hcube :
+
+help   displays command list
+l1+    rotate layer 1 clockwise
+l2-    rotate layer 2 counter
+h3+    rotate horizontal slab 3 clockwise
+h1-    rotate horizontal slab 1 counter
+v2+    rotate vertical slab 2 clockwise
+v3-    rotate vertical slab 3 counter
+l      left side view
+r      right side view
+r+     rotate whole cube clockwise 90 degrees (z axis)
+r-     rotate whole cube counter clockwise 90 degrees (z axis)
+r2     rotate whole cube 180 degrees
+fh     flip whole cube over along horizontal axis
+fv     flip whole cube over along vertical axis
+u      undo last cube operation
+
+History :
+0.1.0	Inital release.
+0.1.1	hcube is able to physical cube from a file.
+
+To Do :
+1) Add two phase algorithm to solve 3x3x3 cube in minumal number of moves.
+2) Add undo.
+3) Add sequence macros.
+4) Extend to 4x4x4 and 5x5x5.
diff --git a/hcube.cabal b/hcube.cabal
--- a/hcube.cabal
+++ b/hcube.cabal
@@ -1,5 +1,5 @@
 name:                 hcube
-version:              0.1.0
+version:              0.1.1
 synopsis:       Virtual Rubik's cube of arbitrary size. 
 description:	Provides virtual model of NxNxN Rubik's cube and console visualization for
 		2x2x2, 3x3x3 ,4x4x4, and 5x5x5. Console visualization is choosen in the interest
@@ -9,7 +9,7 @@
 		The Rubik's cube exhibits many non-trival aspects of group theory.
 
 		The package comes with an executable "hcube". 
-                The command ./hcube 5 will create a 5x5x5 cube.
+                Refer to the README file for details.
 
 license:              BSD3 
 license-file:         LICENSE 
@@ -22,7 +22,7 @@
 stability:            experimental
 category:             Game
 
-data-dir:             HCube/store
+data-dir:             store
 data-files:           physicalCubeExample
 extra-source-files:   README
 		      design/common.txt
diff --git a/store/physicalCubeExample b/store/physicalCubeExample
new file mode 100644
--- /dev/null
+++ b/store/physicalCubeExample
@@ -0,0 +1,6 @@
+[(UpS, [White,Green,Yellow,Green,White,Green,Red,White,Green]),
+          (FrontS,      [Blue,Blue,White,Yellow,Orange,Yellow,Red,Yellow,White]),
+          (DownS,       [Yellow,Blue,Green,White,Yellow,Blue,White,Orange,Green]),
+          (BackS,       [Orange,Blue,Orange,Yellow,Red,Red,Red,Orange,Blue]),
+          (LeftS,       [Orange,White,Yellow,Red,Green,Red,Orange,Red,Red]),
+          (RightS,      [Blue,Green,Blue,Orange,Blue,White,Green,Orange,Yellow])]
