diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
 The following license covers this documentation, and the source code, except
 where otherwise indicated.
 
-Copyright 2011, Ian-Woo Kim. All rights reserved.
+Copyright 2011-2013, Ian-Woo Kim. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff --git a/hoodle-types.cabal b/hoodle-types.cabal
--- a/hoodle-types.cabal
+++ b/hoodle-types.cabal
@@ -1,5 +1,5 @@
 Name:		hoodle-types
-Version:	0.1.0
+Version:	0.1.1
 Synopsis:	Data types for programs for hoodle file format
 Description: 	Hoodle file format data type including generic interface
 License: 	BSD3
@@ -24,7 +24,7 @@
                    bytestring >= 0.9, 
                    strict == 0.3.*, 
                    containers >= 0.4, 
-                   lens >= 2.4,
+                   lens >= 2.5,
                    TypeCompose == 0.9.*, 
                    cereal == 0.3.* 
   Exposed-Modules: 
diff --git a/src/Data/Hoodle/BBox.hs b/src/Data/Hoodle/BBox.hs
--- a/src/Data/Hoodle/BBox.hs
+++ b/src/Data/Hoodle/BBox.hs
@@ -23,10 +23,13 @@
 -- , imgbbx_img
 -- , imgbbx_bbx
 , mkImageBBox
+, SVGBBox (..)
+, mkSVGBBox
 , mkbbox
 , mkbboxF
 , bboxFromStroke
 , bboxFromImage
+, bboxFromSVG
 , dimToBBox
 , bboxToDim
 , xformBBox
@@ -113,7 +116,29 @@
             } 
 
 
+-- | 
+data SVGBBox = SVGBBox { svgbbx_svg :: SVG
+                       , svgbbx_bbx :: BBox } 
+               deriving (Show,Eq,Ord)
+  
+instance BBoxable SVGBBox where
+  getBBox = svgbbx_bbx
+
 -- |
+instance Serialize SVGBBox where
+  put SVGBBox{..} = put svgbbx_svg >> put svgbbx_bbx
+  get = SVGBBox <$> get <*> get
+  
+-- | smart constructor for ImageBBox 
+mkSVGBBox :: SVG -> SVGBBox
+mkSVGBBox svg = 
+  SVGBBox { svgbbx_svg = svg
+          , svgbbx_bbx = bboxFromSVG svg
+          } 
+
+
+
+-- |
 mkbbox :: [Pair Double Double] -> BBox 
 mkbbox lst = let xs = map fst lst 
                  ys = map snd lst
@@ -149,6 +174,11 @@
 -- | 
 bboxFromImage :: Image -> BBox 
 bboxFromImage (Image _ (x,y) d) = moveBBoxULCornerTo (x,y) (dimToBBox d)    
+
+
+-- | 
+bboxFromSVG :: SVG -> BBox 
+bboxFromSVG (SVG _ _ _ (x,y) d) = moveBBoxULCornerTo (x,y) (dimToBBox d)    
 
 
 -- | general transform BBox         
diff --git a/src/Data/Hoodle/Predefined.hs b/src/Data/Hoodle/Predefined.hs
--- a/src/Data/Hoodle/Predefined.hs
+++ b/src/Data/Hoodle/Predefined.hs
@@ -35,7 +35,7 @@
 
 rgbaToHEX :: (Double,Double,Double,Double) -> String
 rgbaToHEX (r,g,b,a) = 
-  let i :: Integer = round (255*a) + round (256*255*b) + round (256*256*255*g) + round (256*256*256*255*r) 
+  let i :: Integer = floor (255*a) + 256*floor (255*b) + 256*256*floor (255*g) + 256*256*256*floor (255*r) 
   in printf "#%08x" i
 
 predefined_highlighter_opacity :: Double 
@@ -55,13 +55,15 @@
              , ("yellow"    , hexToRGBA 0xffff00ff)
              , ("white"     , hexToRGBA 0xffffffff) ] 
 
-{-
+-- | need to be refined. 
 getPenColor :: B.ByteString -> Maybe (Double,Double,Double,Double) 
 getPenColor b | (not . B.null) b = 
   case B.head b of 
-    '#' -> B.tail b 
--}
+    '#' -> Just (hexToRGBA . (read  :: String -> Integer) . B.unpack $ ("0x" `B.append` (B.tail b) ))
+    _ -> M.lookup b predefined_pencolor 
+getPenColor _ | otherwise = Nothing 
 
+-- | 
 predefined_bkgcolor :: M.Map B.ByteString (Double,Double,Double,Double)
 predefined_bkgcolor = 
   M.fromList [ (""      , hexToRGBA 0xffffffff) 
diff --git a/src/Data/Hoodle/Simple.hs b/src/Data/Hoodle/Simple.hs
--- a/src/Data/Hoodle/Simple.hs
+++ b/src/Data/Hoodle/Simple.hs
@@ -34,6 +34,7 @@
 -- | wrapper of object embeddable in Layer
 data Item = ItemStroke Stroke
           | ItemImage Image
+          | ItemSVG SVG
           deriving (Show,Eq,Ord)
 
 
@@ -56,7 +57,12 @@
                    } 
              deriving (Show,Eq,Ord)
 
-
+data SVG = SVG { svg_text :: Maybe S.ByteString
+               , svg_command :: Maybe S.ByteString 
+               , svg_render :: S.ByteString
+               , svg_pos :: (Double,Double)
+               , svg_dim :: !Dimension }  
+           deriving (Show,Eq,Ord)
 
 -- | 
 instance SE.Serialize Stroke where
@@ -83,17 +89,30 @@
                      >> SE.put img_dim
     get = Image <$> SE.get <*> SE.get <*> SE.get
 
+-- | 
+instance SE.Serialize SVG where
+    put SVG {..} = SE.put svg_text
+                   >> SE.put svg_command 
+                   >> SE.put svg_render
+                   >> SE.put svg_pos
+                   >> SE.put svg_dim
+    get = SVG <$> SE.get <*> SE.get <*> SE.get <*> SE.get <*> SE.get
 
+
+
 -- | 
 instance SE.Serialize Item where
     put (ItemStroke str) = SE.putWord8 0 
                            >> SE.put str 
     put (ItemImage img) = SE.putWord8 1 
                           >> SE.put img
+    put (ItemSVG svg) = SE.putWord8 2
+                        >> SE.put svg 
     get = do tag <- SE.getWord8 
              case tag of 
                0 -> ItemStroke <$> SE.get
                1 -> ItemImage <$> SE.get
+               2 -> ItemSVG <$> SE.get
                _ -> fail "err in Item parsing"
 
 -- |    
