diff --git a/HROOT.cabal b/HROOT.cabal
--- a/HROOT.cabal
+++ b/HROOT.cabal
@@ -1,5 +1,5 @@
 Name:		HROOT
-Version:	0.6.5
+Version:	0.6.6
 Synopsis:	Wrapper for ROOT
 Description: 	Haskell FFI binding for ROOT  
 Homepage:       http://ianwookim.org/HROOT
@@ -20,6 +20,8 @@
                     example/random2d.hs
                     example/random2dApp.hs
                     example/saveAsROOT.hs
+                    example/datetime.hs
+                    example/project1d.hs
                     test/compiletest.hs
 Source-repository head
   type:     darcs
@@ -29,7 +31,7 @@
 --   default-language: Haskell2010
 --   type: exitcode-stdio-1.0
 --   main-is: compiletest.hs
---   build-depends: base>4, base<5, HROOT==0.6.5
+--   build-depends: base>4, base<5, HROOT==0.6.6
 --   hs-source-dirs: test
 
 Library
@@ -141,6 +143,7 @@
                        HROOT.Class.TObjArray
                        HROOT.Class.TList
                        HROOT.Class.TKey
+                       HROOT.Class.TDatime
   
 
 --                      HROOT
diff --git a/csrc/HROOT.cpp b/csrc/HROOT.cpp
--- a/csrc/HROOT.cpp
+++ b/csrc/HROOT.cpp
@@ -137,7 +137,9 @@
 #include "TList.h"
 #include "TKey.h"
 #include "TLegendEntry.h"
+#include "TDatime.h"
 
+
 using namespace std;
 
 
@@ -481,7 +483,18 @@
 
 #undef ROOT_TAXIS_DEFINITIONVIRT
 #define ROOT_TAXIS_DEFINITIONVIRT(Type)\
-
+void Type ## _SetTimeDisplay ( Type ## _p p, int  value )\
+{\
+to_nonconst<Type,Type ## _t>(p)->SetTimeDisplay(value);\
+}\
+void Type ## _SetTimeFormat ( Type ## _p p, const char * format )\
+{\
+to_nonconst<Type,Type ## _t>(p)->SetTimeFormat(format);\
+}\
+void Type ## _SetTimeOffset ( Type ## _p p, double toffset, const char * option )\
+{\
+to_nonconst<Type,Type ## _t>(p)->SetTimeOffset(toffset, option);\
+}
 
 #undef ROOT_TLATEX_DEFINITIONVIRT
 #define ROOT_TLATEX_DEFINITIONVIRT(Type)\
@@ -1092,6 +1105,13 @@
 #define ROOT_TKEY_DEFINITIONVIRT(Type)\
 
 
+#undef ROOT_TDATIME_DEFINITIONVIRT
+#define ROOT_TDATIME_DEFINITIONVIRT(Type)\
+unsigned int  Type ## _Convert ( Type ## _p p, int toGMT )\
+{\
+return to_nonconst<Type,Type ## _t>(p)->Convert(toGMT);\
+}
+
 #undef ROOT_DELETABLE_DEFINITIONNONVIRT
 #define ROOT_DELETABLE_DEFINITIONNONVIRT(Type)\
 
@@ -1830,6 +1850,15 @@
 return to_nonconst<Type ## _t, Type >(newp);\
 }
 
+#undef ROOT_TDATIME_DEFINITIONNONVIRT
+#define ROOT_TDATIME_DEFINITIONNONVIRT(Type)\
+Type ## _p Type ## _newTDatime ( int  year, int  month, int  day, int  hour, int  min, int  sec )\
+{\
+Type * newp = new Type (year, month, day, hour, min, sec); \
+return to_nonconst<Type ## _t, Type >(newp);\
+}
+
+ROOT_DELETABLE_DEFINITIONVIRT(TDatime)
 ROOT_DELETABLE_DEFINITIONVIRT(TKey)
 ROOT_DELETABLE_DEFINITIONVIRT(TList)
 ROOT_DELETABLE_DEFINITIONVIRT(TObjArray)
@@ -2243,6 +2272,7 @@
 ROOT_TCURLYLINE_DEFINITIONVIRT(TCurlyArc)
 ROOT_TCURLYLINE_DEFINITIONVIRT(TCurlyLine)
 ROOT_TCUTG_DEFINITIONVIRT(TCutG)
+ROOT_TDATIME_DEFINITIONVIRT(TDatime)
 ROOT_TDIALOGCANVAS_DEFINITIONVIRT(TDialogCanvas)
 ROOT_TDIAMOND_DEFINITIONVIRT(TDiamond)
 ROOT_TDICTIONARY_DEFINITIONVIRT(TClass)
@@ -2679,3 +2709,4 @@
 ROOT_TOBJARRAY_DEFINITIONNONVIRT(TObjArray)
 ROOT_TLIST_DEFINITIONNONVIRT(TList)
 ROOT_TKEY_DEFINITIONNONVIRT(TKey)
+ROOT_TDATIME_DEFINITIONNONVIRT(TDatime)
diff --git a/csrc/HROOT.h b/csrc/HROOT.h
--- a/csrc/HROOT.h
+++ b/csrc/HROOT.h
@@ -266,7 +266,9 @@
 
 #undef ROOT_TAXIS_DECLARATIONVIRT
 #define ROOT_TAXIS_DECLARATIONVIRT(Type) \
-
+void Type ## _SetTimeDisplay ( Type ## _p p, int  value ); \
+void Type ## _SetTimeFormat ( Type ## _p p, const char * format ); \
+void Type ## _SetTimeOffset ( Type ## _p p, double toffset, const char * option )
 
 #undef ROOT_TLATEX_DECLARATIONVIRT
 #define ROOT_TLATEX_DECLARATIONVIRT(Type) \
@@ -574,6 +576,10 @@
 #define ROOT_TKEY_DECLARATIONVIRT(Type) \
 
 
+#undef ROOT_TDATIME_DECLARATIONVIRT
+#define ROOT_TDATIME_DECLARATIONVIRT(Type) \
+unsigned int  Type ## _Convert ( Type ## _p p, int toGMT )
+
 #undef ROOT_DELETABLE_DECLARATIONNONVIRT
 #define ROOT_DELETABLE_DECLARATIONNONVIRT(Type) \
 
@@ -924,6 +930,9 @@
 #undef ROOT_TKEY_DECLARATIONNONVIRT
 #define ROOT_TKEY_DECLARATIONNONVIRT(Type) \
 Type ## _p Type ## _newTKey ( const char * name, const char * title, TClass_p cl, int  nbytes, TDirectory_p motherDir )
+#undef ROOT_TDATIME_DECLARATIONNONVIRT
+#define ROOT_TDATIME_DECLARATIONNONVIRT(Type) \
+Type ## _p Type ## _newTDatime ( int  year, int  month, int  day, int  hour, int  min, int  sec )
 
 ROOT_TYPE_DECLARATION(Deletable);
 ROOT_TYPE_DECLARATION(TObject);
@@ -1039,7 +1048,9 @@
 ROOT_TYPE_DECLARATION(TObjArray);
 ROOT_TYPE_DECLARATION(TList);
 ROOT_TYPE_DECLARATION(TKey);
+ROOT_TYPE_DECLARATION(TDatime);
 
+ROOT_DELETABLE_DECLARATIONVIRT(TDatime);
 ROOT_DELETABLE_DECLARATIONVIRT(TKey);
 ROOT_DELETABLE_DECLARATIONVIRT(TList);
 ROOT_DELETABLE_DECLARATIONVIRT(TObjArray);
@@ -1453,6 +1464,7 @@
 ROOT_TCURLYLINE_DECLARATIONVIRT(TCurlyArc);
 ROOT_TCURLYLINE_DECLARATIONVIRT(TCurlyLine);
 ROOT_TCUTG_DECLARATIONVIRT(TCutG);
+ROOT_TDATIME_DECLARATIONVIRT(TDatime);
 ROOT_TDIALOGCANVAS_DECLARATIONVIRT(TDialogCanvas);
 ROOT_TDIAMOND_DECLARATIONVIRT(TDiamond);
 ROOT_TDICTIONARY_DECLARATIONVIRT(TClass);
@@ -2002,6 +2014,8 @@
 ROOT_TLIST_DECLARATIONNONVIRT(TList);
 
 ROOT_TKEY_DECLARATIONNONVIRT(TKey);
+
+ROOT_TDATIME_DECLARATIONNONVIRT(TDatime);
 
 
 #ifdef __cplusplus
diff --git a/example/datetime.hs b/example/datetime.hs
new file mode 100644
--- /dev/null
+++ b/example/datetime.hs
@@ -0,0 +1,38 @@
+module Main where
+
+import HROOT
+
+import Control.Applicative
+
+main = do 
+  tcanvas <- newTCanvas "test" "test" 640 480
+  
+  t0 <- newTDatime 2002 1 1 0 0 0 
+  x0 <- convert t0 0
+  t1 <- newTDatime 2002 09 23 00 00 00 
+  x1 <- (-) <$> convert t1 0 <*> return x0 
+  t2 <- newTDatime 2003 03 07 00 00 00  
+  x2 <- (-) <$> convert t2 0 <*> return x0 
+
+  putStrLn $ show x0 
+  putStrLn $ show x1
+  putStrLn $ show x2 
+
+  h1 <- newTH1F "test" "test" 100 (fromIntegral x1) (fromIntegral x2)
+
+  xaxis <- tH1GetXaxis (upcastTH1 h1) 
+  setTimeOffset xaxis (fromIntegral x0) "local"
+  setTimeDisplay xaxis 1
+  setTimeFormat xaxis "%Y/%m/%d"
+ 
+  draw h1 ""   
+
+  saveAs tcanvas "datetime.pdf" "" 
+
+  delete h1
+  delete tcanvas
+
+  return () 
+
+
+
diff --git a/example/project1d.hs b/example/project1d.hs
new file mode 100644
--- /dev/null
+++ b/example/project1d.hs
@@ -0,0 +1,38 @@
+module Main where
+
+import Control.Monad
+
+import HROOT
+
+main :: IO () 
+main = do 
+  tcanvas <- newTCanvas "Test" "Test" 640 480
+  h2 <- newTH2F "test" "test" 100 (-5.0) 5.0 100 (-5.0) 5.0 
+  tRandom <- newTRandom 65535
+  let generator1 = gaus tRandom 0 2 
+      generator2 = gaus tRandom 1 0.5
+  let go n | n <= 0 = return () 
+           | otherwise = do 
+               histfill generator1 generator1 h2
+               histfill generator2 generator2 h2
+               go (n-1) 
+  go 1000000
+{-  draw h2 "lego"
+  saveAs tcanvas "random2d.pdf" ""
+  saveAs tcanvas "random2d.jpg" "" 
+  saveAs tcanvas "random2d.png" "" -}
+
+  h1 <- tH2ProjectionX (upcastTH2 h2) "tdk" 0 (-1) "" 
+
+  draw h1 "" 
+  saveAs tcanvas "projection.pdf" "" 
+  delete h1
+  delete h2
+  delete tcanvas
+
+histfill :: IO Double -> IO Double-> TH2F ->  IO () 
+histfill dist1 dist2 hist = do 
+  x <- dist1
+  y <- dist2
+  fill2 hist x y 
+  return () 
diff --git a/src/HROOT/AddOn.hs b/src/HROOT/AddOn.hs
--- a/src/HROOT/AddOn.hs
+++ b/src/HROOT/AddOn.hs
@@ -2,31 +2,3 @@
 
 module HROOT.AddOn where
 
-{- 
-import Prelude hiding (print)
-
-import HROOT.Class.Interface
-import HROOT.Class.Existential
-
-instance IDeletable (Exist TObject) where
-  delete (ETObject x) = delete x 
-
-instance ITObject (Exist TObject) where
-  getName (ETObject x) = getName x
-  draw (ETObject x) = draw x 
-  findObject (ETObject x) = findObject x 
-  saveAs (ETObject x) = saveAs x 
-  write (ETObject x) = write x 
-  isA (ETObject x) = isA x 
-  print (ETObject x) = print x 
--}
-
-{-
-import Foreign.ForeignPtr
-import HROOT.Class.Interface
-
-upcastTH2 :: (FPtr a, ITH2 a) => a -> TH2 
-upcastTH2 h = let fh = get_fptr h
-                  fh2 :: ForeignPtr RawTH2 =  castForeignPtr fh 
-              in cast_fptr_to_obj fh2  
--}
diff --git a/src/HROOT/Class/FFI.hsc b/src/HROOT/Class/FFI.hsc
--- a/src/HROOT/Class/FFI.hsc
+++ b/src/HROOT/Class/FFI.hsc
@@ -1381,6 +1381,12 @@
   :: (Ptr RawTAxis) -> IO ()
 foreign import ccall "HROOT.h TAxis_newTAxis" c_taxis_newtaxis 
   :: CInt -> CDouble -> CDouble -> IO (Ptr RawTAxis)
+foreign import ccall "HROOT.h TAxis_SetTimeDisplay" c_taxis_settimedisplay 
+  :: (Ptr RawTAxis) -> CInt -> IO ()
+foreign import ccall "HROOT.h TAxis_SetTimeFormat" c_taxis_settimeformat 
+  :: (Ptr RawTAxis) -> CString -> IO ()
+foreign import ccall "HROOT.h TAxis_SetTimeOffset" c_taxis_settimeoffset 
+  :: (Ptr RawTAxis) -> CDouble -> CString -> IO ()
 
 foreign import ccall "HROOT.h TLatex_SetLineColor" c_tlatex_setlinecolor 
   :: (Ptr RawTLatex) -> CInt -> IO ()
@@ -5432,4 +5438,11 @@
   :: (Ptr RawTKey) -> IO ()
 foreign import ccall "HROOT.h TKey_newTKey" c_tkey_newtkey 
   :: CString -> CString -> (Ptr RawTClass) -> CInt -> (Ptr RawTDirectory) -> IO (Ptr RawTKey)
+
+foreign import ccall "HROOT.h TDatime_delete" c_tdatime_delete 
+  :: (Ptr RawTDatime) -> IO ()
+foreign import ccall "HROOT.h TDatime_newTDatime" c_tdatime_newtdatime 
+  :: CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO (Ptr RawTDatime)
+foreign import ccall "HROOT.h TDatime_Convert" c_tdatime_convert 
+  :: (Ptr RawTDatime) -> CInt -> IO CUInt
 
diff --git a/src/HROOT/Class/Implementation.hs b/src/HROOT/Class/Implementation.hs
--- a/src/HROOT/Class/Implementation.hs
+++ b/src/HROOT/Class/Implementation.hs
@@ -1,10 +1,10 @@
 {-# LANGUAGE ForeignFunctionInterface, TypeFamilies, MultiParamTypeClasses, 
-             FlexibleInstances, TypeSynonymInstances, UndecidableInstances, 
-             EmptyDataDecls, IncoherentInstances #-}
+             FlexibleInstances, TypeSynonymInstances, EmptyDataDecls #-}
 
 
 module HROOT.Class.Implementation where
 
+import Data.Word
 -- import Foreign.C            
 import Foreign.Ptr
 import Foreign.ForeignPtr
@@ -466,1017 +466,590 @@
   cast = unsafeForeignPtrToPtr . castForeignPtr . get_fptr
   uncast = cast_fptr_to_obj . castForeignPtr . unsafePerformIO . newForeignPtr_ 
 
+instance (ITDatime a, FPtr a) => Castable a (Ptr RawTDatime) where
+  cast = unsafeForeignPtrToPtr . castForeignPtr . get_fptr
+  uncast = cast_fptr_to_obj . castForeignPtr . unsafePerformIO . newForeignPtr_ 
+
 instance FPtr (Exist TObject) where
   type Raw (Exist TObject) = RawTObject
   get_fptr (ETObject obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETObject (cast_fptr_to_obj (fptr :: ForeignPtr RawTObject) :: TObject)
 
-instance Castable (Exist TObject) (Ptr RawTObject) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TNamed) where
   type Raw (Exist TNamed) = RawTNamed
   get_fptr (ETNamed obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETNamed (cast_fptr_to_obj (fptr :: ForeignPtr RawTNamed) :: TNamed)
 
-instance Castable (Exist TNamed) (Ptr RawTNamed) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TClass) where
   type Raw (Exist TClass) = RawTClass
   get_fptr (ETClass obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETClass (cast_fptr_to_obj (fptr :: ForeignPtr RawTClass) :: TClass)
 
-instance Castable (Exist TClass) (Ptr RawTClass) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TFormula) where
   type Raw (Exist TFormula) = RawTFormula
   get_fptr (ETFormula obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETFormula (cast_fptr_to_obj (fptr :: ForeignPtr RawTFormula) :: TFormula)
 
-instance Castable (Exist TFormula) (Ptr RawTFormula) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAtt3D) where
   type Raw (Exist TAtt3D) = RawTAtt3D
   get_fptr (ETAtt3D obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAtt3D (cast_fptr_to_obj (fptr :: ForeignPtr RawTAtt3D) :: TAtt3D)
 
-instance Castable (Exist TAtt3D) (Ptr RawTAtt3D) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttAxis) where
   type Raw (Exist TAttAxis) = RawTAttAxis
   get_fptr (ETAttAxis obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttAxis (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttAxis) :: TAttAxis)
 
-instance Castable (Exist TAttAxis) (Ptr RawTAttAxis) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttBBox) where
   type Raw (Exist TAttBBox) = RawTAttBBox
   get_fptr (ETAttBBox obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttBBox (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttBBox) :: TAttBBox)
 
-instance Castable (Exist TAttBBox) (Ptr RawTAttBBox) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttCanvas) where
   type Raw (Exist TAttCanvas) = RawTAttCanvas
   get_fptr (ETAttCanvas obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttCanvas (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttCanvas) :: TAttCanvas)
 
-instance Castable (Exist TAttCanvas) (Ptr RawTAttCanvas) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttFill) where
   type Raw (Exist TAttFill) = RawTAttFill
   get_fptr (ETAttFill obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttFill (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttFill) :: TAttFill)
 
-instance Castable (Exist TAttFill) (Ptr RawTAttFill) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttImage) where
   type Raw (Exist TAttImage) = RawTAttImage
   get_fptr (ETAttImage obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttImage (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttImage) :: TAttImage)
 
-instance Castable (Exist TAttImage) (Ptr RawTAttImage) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttLine) where
   type Raw (Exist TAttLine) = RawTAttLine
   get_fptr (ETAttLine obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttLine (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttLine) :: TAttLine)
 
-instance Castable (Exist TAttLine) (Ptr RawTAttLine) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttMarker) where
   type Raw (Exist TAttMarker) = RawTAttMarker
   get_fptr (ETAttMarker obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttMarker (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttMarker) :: TAttMarker)
 
-instance Castable (Exist TAttMarker) (Ptr RawTAttMarker) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttPad) where
   type Raw (Exist TAttPad) = RawTAttPad
   get_fptr (ETAttPad obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttPad (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttPad) :: TAttPad)
 
-instance Castable (Exist TAttPad) (Ptr RawTAttPad) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttParticle) where
   type Raw (Exist TAttParticle) = RawTAttParticle
   get_fptr (ETAttParticle obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttParticle (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttParticle) :: TAttParticle)
 
-instance Castable (Exist TAttParticle) (Ptr RawTAttParticle) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAttText) where
   type Raw (Exist TAttText) = RawTAttText
   get_fptr (ETAttText obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAttText (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttText) :: TAttText)
 
-instance Castable (Exist TAttText) (Ptr RawTAttText) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist THStack) where
   type Raw (Exist THStack) = RawTHStack
   get_fptr (ETHStack obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETHStack (cast_fptr_to_obj (fptr :: ForeignPtr RawTHStack) :: THStack)
 
-instance Castable (Exist THStack) (Ptr RawTHStack) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TF1) where
   type Raw (Exist TF1) = RawTF1
   get_fptr (ETF1 obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETF1 (cast_fptr_to_obj (fptr :: ForeignPtr RawTF1) :: TF1)
 
-instance Castable (Exist TF1) (Ptr RawTF1) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGraph) where
   type Raw (Exist TGraph) = RawTGraph
   get_fptr (ETGraph obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGraph (cast_fptr_to_obj (fptr :: ForeignPtr RawTGraph) :: TGraph)
 
-instance Castable (Exist TGraph) (Ptr RawTGraph) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGraphAsymmErrors) where
   type Raw (Exist TGraphAsymmErrors) = RawTGraphAsymmErrors
   get_fptr (ETGraphAsymmErrors obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGraphAsymmErrors (cast_fptr_to_obj (fptr :: ForeignPtr RawTGraphAsymmErrors) :: TGraphAsymmErrors)
 
-instance Castable (Exist TGraphAsymmErrors) (Ptr RawTGraphAsymmErrors) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TCutG) where
   type Raw (Exist TCutG) = RawTCutG
   get_fptr (ETCutG obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETCutG (cast_fptr_to_obj (fptr :: ForeignPtr RawTCutG) :: TCutG)
 
-instance Castable (Exist TCutG) (Ptr RawTCutG) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGraphBentErrors) where
   type Raw (Exist TGraphBentErrors) = RawTGraphBentErrors
   get_fptr (ETGraphBentErrors obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGraphBentErrors (cast_fptr_to_obj (fptr :: ForeignPtr RawTGraphBentErrors) :: TGraphBentErrors)
 
-instance Castable (Exist TGraphBentErrors) (Ptr RawTGraphBentErrors) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGraphErrors) where
   type Raw (Exist TGraphErrors) = RawTGraphErrors
   get_fptr (ETGraphErrors obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGraphErrors (cast_fptr_to_obj (fptr :: ForeignPtr RawTGraphErrors) :: TGraphErrors)
 
-instance Castable (Exist TGraphErrors) (Ptr RawTGraphErrors) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGraphPolar) where
   type Raw (Exist TGraphPolar) = RawTGraphPolar
   get_fptr (ETGraphPolar obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGraphPolar (cast_fptr_to_obj (fptr :: ForeignPtr RawTGraphPolar) :: TGraphPolar)
 
-instance Castable (Exist TGraphPolar) (Ptr RawTGraphPolar) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGraphQQ) where
   type Raw (Exist TGraphQQ) = RawTGraphQQ
   get_fptr (ETGraphQQ obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGraphQQ (cast_fptr_to_obj (fptr :: ForeignPtr RawTGraphQQ) :: TGraphQQ)
 
-instance Castable (Exist TGraphQQ) (Ptr RawTGraphQQ) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TEllipse) where
   type Raw (Exist TEllipse) = RawTEllipse
   get_fptr (ETEllipse obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETEllipse (cast_fptr_to_obj (fptr :: ForeignPtr RawTEllipse) :: TEllipse)
 
-instance Castable (Exist TEllipse) (Ptr RawTEllipse) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArc) where
   type Raw (Exist TArc) = RawTArc
   get_fptr (ETArc obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArc (cast_fptr_to_obj (fptr :: ForeignPtr RawTArc) :: TArc)
 
-instance Castable (Exist TArc) (Ptr RawTArc) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TCrown) where
   type Raw (Exist TCrown) = RawTCrown
   get_fptr (ETCrown obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETCrown (cast_fptr_to_obj (fptr :: ForeignPtr RawTCrown) :: TCrown)
 
-instance Castable (Exist TCrown) (Ptr RawTCrown) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TLine) where
   type Raw (Exist TLine) = RawTLine
   get_fptr (ETLine obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETLine (cast_fptr_to_obj (fptr :: ForeignPtr RawTLine) :: TLine)
 
-instance Castable (Exist TLine) (Ptr RawTLine) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrow) where
   type Raw (Exist TArrow) = RawTArrow
   get_fptr (ETArrow obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrow (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrow) :: TArrow)
 
-instance Castable (Exist TArrow) (Ptr RawTArrow) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGaxis) where
   type Raw (Exist TGaxis) = RawTGaxis
   get_fptr (ETGaxis obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGaxis (cast_fptr_to_obj (fptr :: ForeignPtr RawTGaxis) :: TGaxis)
 
-instance Castable (Exist TGaxis) (Ptr RawTGaxis) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TShape) where
   type Raw (Exist TShape) = RawTShape
   get_fptr (ETShape obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETShape (cast_fptr_to_obj (fptr :: ForeignPtr RawTShape) :: TShape)
 
-instance Castable (Exist TShape) (Ptr RawTShape) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TBRIK) where
   type Raw (Exist TBRIK) = RawTBRIK
   get_fptr (ETBRIK obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETBRIK (cast_fptr_to_obj (fptr :: ForeignPtr RawTBRIK) :: TBRIK)
 
-instance Castable (Exist TBRIK) (Ptr RawTBRIK) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TTUBE) where
   type Raw (Exist TTUBE) = RawTTUBE
   get_fptr (ETTUBE obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETTUBE (cast_fptr_to_obj (fptr :: ForeignPtr RawTTUBE) :: TTUBE)
 
-instance Castable (Exist TTUBE) (Ptr RawTTUBE) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPCON) where
   type Raw (Exist TPCON) = RawTPCON
   get_fptr (ETPCON obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPCON (cast_fptr_to_obj (fptr :: ForeignPtr RawTPCON) :: TPCON)
 
-instance Castable (Exist TPCON) (Ptr RawTPCON) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TSPHE) where
   type Raw (Exist TSPHE) = RawTSPHE
   get_fptr (ETSPHE obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETSPHE (cast_fptr_to_obj (fptr :: ForeignPtr RawTSPHE) :: TSPHE)
 
-instance Castable (Exist TSPHE) (Ptr RawTSPHE) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TXTRU) where
   type Raw (Exist TXTRU) = RawTXTRU
   get_fptr (ETXTRU obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETXTRU (cast_fptr_to_obj (fptr :: ForeignPtr RawTXTRU) :: TXTRU)
 
-instance Castable (Exist TXTRU) (Ptr RawTXTRU) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TBox) where
   type Raw (Exist TBox) = RawTBox
   get_fptr (ETBox obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETBox (cast_fptr_to_obj (fptr :: ForeignPtr RawTBox) :: TBox)
 
-instance Castable (Exist TBox) (Ptr RawTBox) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPave) where
   type Raw (Exist TPave) = RawTPave
   get_fptr (ETPave obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPave (cast_fptr_to_obj (fptr :: ForeignPtr RawTPave) :: TPave)
 
-instance Castable (Exist TPave) (Ptr RawTPave) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPaveText) where
   type Raw (Exist TPaveText) = RawTPaveText
   get_fptr (ETPaveText obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPaveText (cast_fptr_to_obj (fptr :: ForeignPtr RawTPaveText) :: TPaveText)
 
-instance Castable (Exist TPaveText) (Ptr RawTPaveText) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TDiamond) where
   type Raw (Exist TDiamond) = RawTDiamond
   get_fptr (ETDiamond obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETDiamond (cast_fptr_to_obj (fptr :: ForeignPtr RawTDiamond) :: TDiamond)
 
-instance Castable (Exist TDiamond) (Ptr RawTDiamond) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPaveStats) where
   type Raw (Exist TPaveStats) = RawTPaveStats
   get_fptr (ETPaveStats obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPaveStats (cast_fptr_to_obj (fptr :: ForeignPtr RawTPaveStats) :: TPaveStats)
 
-instance Castable (Exist TPaveStats) (Ptr RawTPaveStats) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPavesText) where
   type Raw (Exist TPavesText) = RawTPavesText
   get_fptr (ETPavesText obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPavesText (cast_fptr_to_obj (fptr :: ForeignPtr RawTPavesText) :: TPavesText)
 
-instance Castable (Exist TPavesText) (Ptr RawTPavesText) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TLegend) where
   type Raw (Exist TLegend) = RawTLegend
   get_fptr (ETLegend obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETLegend (cast_fptr_to_obj (fptr :: ForeignPtr RawTLegend) :: TLegend)
 
-instance Castable (Exist TLegend) (Ptr RawTLegend) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TLegendEntry) where
   type Raw (Exist TLegendEntry) = RawTLegendEntry
   get_fptr (ETLegendEntry obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETLegendEntry (cast_fptr_to_obj (fptr :: ForeignPtr RawTLegendEntry) :: TLegendEntry)
 
-instance Castable (Exist TLegendEntry) (Ptr RawTLegendEntry) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPaveLabel) where
   type Raw (Exist TPaveLabel) = RawTPaveLabel
   get_fptr (ETPaveLabel obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPaveLabel (cast_fptr_to_obj (fptr :: ForeignPtr RawTPaveLabel) :: TPaveLabel)
 
-instance Castable (Exist TPaveLabel) (Ptr RawTPaveLabel) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPaveClass) where
   type Raw (Exist TPaveClass) = RawTPaveClass
   get_fptr (ETPaveClass obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPaveClass (cast_fptr_to_obj (fptr :: ForeignPtr RawTPaveClass) :: TPaveClass)
 
-instance Castable (Exist TPaveClass) (Ptr RawTPaveClass) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TWbox) where
   type Raw (Exist TWbox) = RawTWbox
   get_fptr (ETWbox obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETWbox (cast_fptr_to_obj (fptr :: ForeignPtr RawTWbox) :: TWbox)
 
-instance Castable (Exist TWbox) (Ptr RawTWbox) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TFrame) where
   type Raw (Exist TFrame) = RawTFrame
   get_fptr (ETFrame obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETFrame (cast_fptr_to_obj (fptr :: ForeignPtr RawTFrame) :: TFrame)
 
-instance Castable (Exist TFrame) (Ptr RawTFrame) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TSliderBox) where
   type Raw (Exist TSliderBox) = RawTSliderBox
   get_fptr (ETSliderBox obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETSliderBox (cast_fptr_to_obj (fptr :: ForeignPtr RawTSliderBox) :: TSliderBox)
 
-instance Castable (Exist TSliderBox) (Ptr RawTSliderBox) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TTree) where
   type Raw (Exist TTree) = RawTTree
   get_fptr (ETTree obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETTree (cast_fptr_to_obj (fptr :: ForeignPtr RawTTree) :: TTree)
 
-instance Castable (Exist TTree) (Ptr RawTTree) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TChain) where
   type Raw (Exist TChain) = RawTChain
   get_fptr (ETChain obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETChain (cast_fptr_to_obj (fptr :: ForeignPtr RawTChain) :: TChain)
 
-instance Castable (Exist TChain) (Ptr RawTChain) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TNtuple) where
   type Raw (Exist TNtuple) = RawTNtuple
   get_fptr (ETNtuple obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETNtuple (cast_fptr_to_obj (fptr :: ForeignPtr RawTNtuple) :: TNtuple)
 
-instance Castable (Exist TNtuple) (Ptr RawTNtuple) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TNtupleD) where
   type Raw (Exist TNtupleD) = RawTNtupleD
   get_fptr (ETNtupleD obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETNtupleD (cast_fptr_to_obj (fptr :: ForeignPtr RawTNtupleD) :: TNtupleD)
 
-instance Castable (Exist TNtupleD) (Ptr RawTNtupleD) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TTreeSQL) where
   type Raw (Exist TTreeSQL) = RawTTreeSQL
   get_fptr (ETTreeSQL obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETTreeSQL (cast_fptr_to_obj (fptr :: ForeignPtr RawTTreeSQL) :: TTreeSQL)
 
-instance Castable (Exist TTreeSQL) (Ptr RawTTreeSQL) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPolyLine) where
   type Raw (Exist TPolyLine) = RawTPolyLine
   get_fptr (ETPolyLine obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPolyLine (cast_fptr_to_obj (fptr :: ForeignPtr RawTPolyLine) :: TPolyLine)
 
-instance Castable (Exist TPolyLine) (Ptr RawTPolyLine) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TCurlyLine) where
   type Raw (Exist TCurlyLine) = RawTCurlyLine
   get_fptr (ETCurlyLine obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETCurlyLine (cast_fptr_to_obj (fptr :: ForeignPtr RawTCurlyLine) :: TCurlyLine)
 
-instance Castable (Exist TCurlyLine) (Ptr RawTCurlyLine) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TCurlyArc) where
   type Raw (Exist TCurlyArc) = RawTCurlyArc
   get_fptr (ETCurlyArc obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETCurlyArc (cast_fptr_to_obj (fptr :: ForeignPtr RawTCurlyArc) :: TCurlyArc)
 
-instance Castable (Exist TCurlyArc) (Ptr RawTCurlyArc) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TEfficiency) where
   type Raw (Exist TEfficiency) = RawTEfficiency
   get_fptr (ETEfficiency obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETEfficiency (cast_fptr_to_obj (fptr :: ForeignPtr RawTEfficiency) :: TEfficiency)
 
-instance Castable (Exist TEfficiency) (Ptr RawTEfficiency) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TAxis) where
   type Raw (Exist TAxis) = RawTAxis
   get_fptr (ETAxis obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETAxis (cast_fptr_to_obj (fptr :: ForeignPtr RawTAxis) :: TAxis)
 
-instance Castable (Exist TAxis) (Ptr RawTAxis) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TLatex) where
   type Raw (Exist TLatex) = RawTLatex
   get_fptr (ETLatex obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETLatex (cast_fptr_to_obj (fptr :: ForeignPtr RawTLatex) :: TLatex)
 
-instance Castable (Exist TLatex) (Ptr RawTLatex) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TText) where
   type Raw (Exist TText) = RawTText
   get_fptr (ETText obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETText (cast_fptr_to_obj (fptr :: ForeignPtr RawTText) :: TText)
 
-instance Castable (Exist TText) (Ptr RawTText) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TDirectory) where
   type Raw (Exist TDirectory) = RawTDirectory
   get_fptr (ETDirectory obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETDirectory (cast_fptr_to_obj (fptr :: ForeignPtr RawTDirectory) :: TDirectory)
 
-instance Castable (Exist TDirectory) (Ptr RawTDirectory) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TDirectoryFile) where
   type Raw (Exist TDirectoryFile) = RawTDirectoryFile
   get_fptr (ETDirectoryFile obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETDirectoryFile (cast_fptr_to_obj (fptr :: ForeignPtr RawTDirectoryFile) :: TDirectoryFile)
 
-instance Castable (Exist TDirectoryFile) (Ptr RawTDirectoryFile) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TFile) where
   type Raw (Exist TFile) = RawTFile
   get_fptr (ETFile obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETFile (cast_fptr_to_obj (fptr :: ForeignPtr RawTFile) :: TFile)
 
-instance Castable (Exist TFile) (Ptr RawTFile) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TBranch) where
   type Raw (Exist TBranch) = RawTBranch
   get_fptr (ETBranch obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETBranch (cast_fptr_to_obj (fptr :: ForeignPtr RawTBranch) :: TBranch)
 
-instance Castable (Exist TBranch) (Ptr RawTBranch) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TVirtualTreePlayer) where
   type Raw (Exist TVirtualTreePlayer) = RawTVirtualTreePlayer
   get_fptr (ETVirtualTreePlayer obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETVirtualTreePlayer (cast_fptr_to_obj (fptr :: ForeignPtr RawTVirtualTreePlayer) :: TVirtualTreePlayer)
 
-instance Castable (Exist TVirtualTreePlayer) (Ptr RawTVirtualTreePlayer) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TTreePlayer) where
   type Raw (Exist TTreePlayer) = RawTTreePlayer
   get_fptr (ETTreePlayer obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETTreePlayer (cast_fptr_to_obj (fptr :: ForeignPtr RawTTreePlayer) :: TTreePlayer)
 
-instance Castable (Exist TTreePlayer) (Ptr RawTTreePlayer) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArray) where
   type Raw (Exist TArray) = RawTArray
   get_fptr (ETArray obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArray (cast_fptr_to_obj (fptr :: ForeignPtr RawTArray) :: TArray)
 
-instance Castable (Exist TArray) (Ptr RawTArray) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayC) where
   type Raw (Exist TArrayC) = RawTArrayC
   get_fptr (ETArrayC obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayC (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayC) :: TArrayC)
 
-instance Castable (Exist TArrayC) (Ptr RawTArrayC) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayD) where
   type Raw (Exist TArrayD) = RawTArrayD
   get_fptr (ETArrayD obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayD (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayD) :: TArrayD)
 
-instance Castable (Exist TArrayD) (Ptr RawTArrayD) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayF) where
   type Raw (Exist TArrayF) = RawTArrayF
   get_fptr (ETArrayF obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayF (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayF) :: TArrayF)
 
-instance Castable (Exist TArrayF) (Ptr RawTArrayF) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayI) where
   type Raw (Exist TArrayI) = RawTArrayI
   get_fptr (ETArrayI obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayI (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayI) :: TArrayI)
 
-instance Castable (Exist TArrayI) (Ptr RawTArrayI) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayL) where
   type Raw (Exist TArrayL) = RawTArrayL
   get_fptr (ETArrayL obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayL (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayL) :: TArrayL)
 
-instance Castable (Exist TArrayL) (Ptr RawTArrayL) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayL64) where
   type Raw (Exist TArrayL64) = RawTArrayL64
   get_fptr (ETArrayL64 obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayL64 (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayL64) :: TArrayL64)
 
-instance Castable (Exist TArrayL64) (Ptr RawTArrayL64) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TArrayS) where
   type Raw (Exist TArrayS) = RawTArrayS
   get_fptr (ETArrayS obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETArrayS (cast_fptr_to_obj (fptr :: ForeignPtr RawTArrayS) :: TArrayS)
 
-instance Castable (Exist TArrayS) (Ptr RawTArrayS) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH1) where
   type Raw (Exist TH1) = RawTH1
   get_fptr (ETH1 obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH1 (cast_fptr_to_obj (fptr :: ForeignPtr RawTH1) :: TH1)
 
-instance Castable (Exist TH1) (Ptr RawTH1) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2) where
   type Raw (Exist TH2) = RawTH2
   get_fptr (ETH2 obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2 (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2) :: TH2)
 
-instance Castable (Exist TH2) (Ptr RawTH2) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH3) where
   type Raw (Exist TH3) = RawTH3
   get_fptr (ETH3 obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH3 (cast_fptr_to_obj (fptr :: ForeignPtr RawTH3) :: TH3)
 
-instance Castable (Exist TH3) (Ptr RawTH3) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH1C) where
   type Raw (Exist TH1C) = RawTH1C
   get_fptr (ETH1C obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH1C (cast_fptr_to_obj (fptr :: ForeignPtr RawTH1C) :: TH1C)
 
-instance Castable (Exist TH1C) (Ptr RawTH1C) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH1D) where
   type Raw (Exist TH1D) = RawTH1D
   get_fptr (ETH1D obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH1D (cast_fptr_to_obj (fptr :: ForeignPtr RawTH1D) :: TH1D)
 
-instance Castable (Exist TH1D) (Ptr RawTH1D) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH1F) where
   type Raw (Exist TH1F) = RawTH1F
   get_fptr (ETH1F obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH1F (cast_fptr_to_obj (fptr :: ForeignPtr RawTH1F) :: TH1F)
 
-instance Castable (Exist TH1F) (Ptr RawTH1F) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH1I) where
   type Raw (Exist TH1I) = RawTH1I
   get_fptr (ETH1I obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH1I (cast_fptr_to_obj (fptr :: ForeignPtr RawTH1I) :: TH1I)
 
-instance Castable (Exist TH1I) (Ptr RawTH1I) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH1S) where
   type Raw (Exist TH1S) = RawTH1S
   get_fptr (ETH1S obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH1S (cast_fptr_to_obj (fptr :: ForeignPtr RawTH1S) :: TH1S)
 
-instance Castable (Exist TH1S) (Ptr RawTH1S) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2C) where
   type Raw (Exist TH2C) = RawTH2C
   get_fptr (ETH2C obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2C (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2C) :: TH2C)
 
-instance Castable (Exist TH2C) (Ptr RawTH2C) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2D) where
   type Raw (Exist TH2D) = RawTH2D
   get_fptr (ETH2D obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2D (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2D) :: TH2D)
 
-instance Castable (Exist TH2D) (Ptr RawTH2D) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2F) where
   type Raw (Exist TH2F) = RawTH2F
   get_fptr (ETH2F obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2F (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2F) :: TH2F)
 
-instance Castable (Exist TH2F) (Ptr RawTH2F) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2I) where
   type Raw (Exist TH2I) = RawTH2I
   get_fptr (ETH2I obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2I (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2I) :: TH2I)
 
-instance Castable (Exist TH2I) (Ptr RawTH2I) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2Poly) where
   type Raw (Exist TH2Poly) = RawTH2Poly
   get_fptr (ETH2Poly obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2Poly (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2Poly) :: TH2Poly)
 
-instance Castable (Exist TH2Poly) (Ptr RawTH2Poly) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH2S) where
   type Raw (Exist TH2S) = RawTH2S
   get_fptr (ETH2S obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH2S (cast_fptr_to_obj (fptr :: ForeignPtr RawTH2S) :: TH2S)
 
-instance Castable (Exist TH2S) (Ptr RawTH2S) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH3C) where
   type Raw (Exist TH3C) = RawTH3C
   get_fptr (ETH3C obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH3C (cast_fptr_to_obj (fptr :: ForeignPtr RawTH3C) :: TH3C)
 
-instance Castable (Exist TH3C) (Ptr RawTH3C) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH3D) where
   type Raw (Exist TH3D) = RawTH3D
   get_fptr (ETH3D obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH3D (cast_fptr_to_obj (fptr :: ForeignPtr RawTH3D) :: TH3D)
 
-instance Castable (Exist TH3D) (Ptr RawTH3D) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH3F) where
   type Raw (Exist TH3F) = RawTH3F
   get_fptr (ETH3F obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH3F (cast_fptr_to_obj (fptr :: ForeignPtr RawTH3F) :: TH3F)
 
-instance Castable (Exist TH3F) (Ptr RawTH3F) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH3I) where
   type Raw (Exist TH3I) = RawTH3I
   get_fptr (ETH3I obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH3I (cast_fptr_to_obj (fptr :: ForeignPtr RawTH3I) :: TH3I)
 
-instance Castable (Exist TH3I) (Ptr RawTH3I) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TH3S) where
   type Raw (Exist TH3S) = RawTH3S
   get_fptr (ETH3S obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETH3S (cast_fptr_to_obj (fptr :: ForeignPtr RawTH3S) :: TH3S)
 
-instance Castable (Exist TH3S) (Ptr RawTH3S) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TQObject) where
   type Raw (Exist TQObject) = RawTQObject
   get_fptr (ETQObject obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETQObject (cast_fptr_to_obj (fptr :: ForeignPtr RawTQObject) :: TQObject)
 
-instance Castable (Exist TQObject) (Ptr RawTQObject) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TVirtualPad) where
   type Raw (Exist TVirtualPad) = RawTVirtualPad
   get_fptr (ETVirtualPad obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETVirtualPad (cast_fptr_to_obj (fptr :: ForeignPtr RawTVirtualPad) :: TVirtualPad)
 
-instance Castable (Exist TVirtualPad) (Ptr RawTVirtualPad) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TPad) where
   type Raw (Exist TPad) = RawTPad
   get_fptr (ETPad obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETPad (cast_fptr_to_obj (fptr :: ForeignPtr RawTPad) :: TPad)
 
-instance Castable (Exist TPad) (Ptr RawTPad) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TButton) where
   type Raw (Exist TButton) = RawTButton
   get_fptr (ETButton obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETButton (cast_fptr_to_obj (fptr :: ForeignPtr RawTButton) :: TButton)
 
-instance Castable (Exist TButton) (Ptr RawTButton) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TGroupButton) where
   type Raw (Exist TGroupButton) = RawTGroupButton
   get_fptr (ETGroupButton obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETGroupButton (cast_fptr_to_obj (fptr :: ForeignPtr RawTGroupButton) :: TGroupButton)
 
-instance Castable (Exist TGroupButton) (Ptr RawTGroupButton) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TCanvas) where
   type Raw (Exist TCanvas) = RawTCanvas
   get_fptr (ETCanvas obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETCanvas (cast_fptr_to_obj (fptr :: ForeignPtr RawTCanvas) :: TCanvas)
 
-instance Castable (Exist TCanvas) (Ptr RawTCanvas) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TDialogCanvas) where
   type Raw (Exist TDialogCanvas) = RawTDialogCanvas
   get_fptr (ETDialogCanvas obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETDialogCanvas (cast_fptr_to_obj (fptr :: ForeignPtr RawTDialogCanvas) :: TDialogCanvas)
 
-instance Castable (Exist TDialogCanvas) (Ptr RawTDialogCanvas) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TInspectCanvas) where
   type Raw (Exist TInspectCanvas) = RawTInspectCanvas
   get_fptr (ETInspectCanvas obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETInspectCanvas (cast_fptr_to_obj (fptr :: ForeignPtr RawTInspectCanvas) :: TInspectCanvas)
 
-instance Castable (Exist TInspectCanvas) (Ptr RawTInspectCanvas) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TEvePad) where
   type Raw (Exist TEvePad) = RawTEvePad
   get_fptr (ETEvePad obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETEvePad (cast_fptr_to_obj (fptr :: ForeignPtr RawTEvePad) :: TEvePad)
 
-instance Castable (Exist TEvePad) (Ptr RawTEvePad) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TSlider) where
   type Raw (Exist TSlider) = RawTSlider
   get_fptr (ETSlider obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETSlider (cast_fptr_to_obj (fptr :: ForeignPtr RawTSlider) :: TSlider)
 
-instance Castable (Exist TSlider) (Ptr RawTSlider) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TApplication) where
   type Raw (Exist TApplication) = RawTApplication
   get_fptr (ETApplication obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETApplication (cast_fptr_to_obj (fptr :: ForeignPtr RawTApplication) :: TApplication)
 
-instance Castable (Exist TApplication) (Ptr RawTApplication) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TRint) where
   type Raw (Exist TRint) = RawTRint
   get_fptr (ETRint obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETRint (cast_fptr_to_obj (fptr :: ForeignPtr RawTRint) :: TRint)
 
-instance Castable (Exist TRint) (Ptr RawTRint) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TRandom) where
   type Raw (Exist TRandom) = RawTRandom
   get_fptr (ETRandom obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETRandom (cast_fptr_to_obj (fptr :: ForeignPtr RawTRandom) :: TRandom)
 
-instance Castable (Exist TRandom) (Ptr RawTRandom) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TCollection) where
   type Raw (Exist TCollection) = RawTCollection
   get_fptr (ETCollection obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETCollection (cast_fptr_to_obj (fptr :: ForeignPtr RawTCollection) :: TCollection)
 
-instance Castable (Exist TCollection) (Ptr RawTCollection) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TSeqCollection) where
   type Raw (Exist TSeqCollection) = RawTSeqCollection
   get_fptr (ETSeqCollection obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETSeqCollection (cast_fptr_to_obj (fptr :: ForeignPtr RawTSeqCollection) :: TSeqCollection)
 
-instance Castable (Exist TSeqCollection) (Ptr RawTSeqCollection) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TObjArray) where
   type Raw (Exist TObjArray) = RawTObjArray
   get_fptr (ETObjArray obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETObjArray (cast_fptr_to_obj (fptr :: ForeignPtr RawTObjArray) :: TObjArray)
 
-instance Castable (Exist TObjArray) (Ptr RawTObjArray) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TList) where
   type Raw (Exist TList) = RawTList
   get_fptr (ETList obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETList (cast_fptr_to_obj (fptr :: ForeignPtr RawTList) :: TList)
 
-instance Castable (Exist TList) (Ptr RawTList) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
-
 instance FPtr (Exist TKey) where
   type Raw (Exist TKey) = RawTKey
   get_fptr (ETKey obj) = castForeignPtr (get_fptr obj)
   cast_fptr_to_obj fptr = ETKey (cast_fptr_to_obj (fptr :: ForeignPtr RawTKey) :: TKey)
 
-instance Castable (Exist TKey) (Ptr RawTKey) where
-  cast = unsafeForeignPtrToPtr . get_fptr
-  uncast = cast_fptr_to_obj . unsafePerformIO . newForeignPtr_
+instance FPtr (Exist TDatime) where
+  type Raw (Exist TDatime) = RawTDatime
+  get_fptr (ETDatime obj) = castForeignPtr (get_fptr obj)
+  cast_fptr_to_obj fptr = ETDatime (cast_fptr_to_obj (fptr :: ForeignPtr RawTDatime) :: TDatime)
 
+instance ITObject (Exist TObject) where
+  getName (ETObject x) = getName x
+  draw (ETObject x) = draw x
+  findObject (ETObject x) = findObject x
+  saveAs (ETObject x) = saveAs x
+  write (ETObject x) = write x
+  isA (ETObject x) = isA x
+  printObj (ETObject x) = printObj x
+
 instance IDeletable (Exist TObject) where
   delete (ETObject x) = delete x
 
+instance ITNamed (Exist TNamed) where
+  setTitle (ETNamed x) = setTitle x
+
 instance ITObject (Exist TNamed) where
   getName (ETNamed x) = getName x
   draw (ETNamed x) = draw x
@@ -1489,6 +1062,9 @@
 instance IDeletable (Exist TNamed) where
   delete (ETNamed x) = delete x
 
+instance ITClass (Exist TClass) where
+
+
 instance ITDictionary (Exist TClass) where
 
 
@@ -1507,6 +1083,10 @@
 instance IDeletable (Exist TClass) where
   delete (ETClass x) = delete x
 
+instance ITFormula (Exist TFormula) where
+  getParameter (ETFormula x) = getParameter x
+  setParameter (ETFormula x) = setParameter x
+
 instance ITNamed (Exist TFormula) where
   setTitle (ETFormula x) = setTitle x
 
@@ -1522,33 +1102,68 @@
 instance IDeletable (Exist TFormula) where
   delete (ETFormula x) = delete x
 
+instance ITAtt3D (Exist TAtt3D) where
+
+
 instance IDeletable (Exist TAtt3D) where
   delete (ETAtt3D x) = delete x
 
+instance ITAttAxis (Exist TAttAxis) where
+  setLabelColor (ETAttAxis x) = setLabelColor x
+  setLabelSize (ETAttAxis x) = setLabelSize x
+  setTickLength (ETAttAxis x) = setTickLength x
+  setTitleOffset (ETAttAxis x) = setTitleOffset x
+  setNdivisions (ETAttAxis x) = setNdivisions x
+
 instance IDeletable (Exist TAttAxis) where
   delete (ETAttAxis x) = delete x
 
+instance ITAttBBox (Exist TAttBBox) where
+
+
 instance IDeletable (Exist TAttBBox) where
   delete (ETAttBBox x) = delete x
 
+instance ITAttCanvas (Exist TAttCanvas) where
+
+
 instance IDeletable (Exist TAttCanvas) where
   delete (ETAttCanvas x) = delete x
 
+instance ITAttFill (Exist TAttFill) where
+  setFillColor (ETAttFill x) = setFillColor x
+  setFillStyle (ETAttFill x) = setFillStyle x
+
 instance IDeletable (Exist TAttFill) where
   delete (ETAttFill x) = delete x
 
+instance ITAttImage (Exist TAttImage) where
+
+
 instance IDeletable (Exist TAttImage) where
   delete (ETAttImage x) = delete x
 
+instance ITAttLine (Exist TAttLine) where
+  setLineColor (ETAttLine x) = setLineColor x
+
 instance IDeletable (Exist TAttLine) where
   delete (ETAttLine x) = delete x
 
+instance ITAttMarker (Exist TAttMarker) where
+
+
 instance IDeletable (Exist TAttMarker) where
   delete (ETAttMarker x) = delete x
 
+instance ITAttPad (Exist TAttPad) where
+
+
 instance IDeletable (Exist TAttPad) where
   delete (ETAttPad x) = delete x
 
+instance ITAttParticle (Exist TAttParticle) where
+
+
 instance ITNamed (Exist TAttParticle) where
   setTitle (ETAttParticle x) = setTitle x
 
@@ -1564,9 +1179,17 @@
 instance IDeletable (Exist TAttParticle) where
   delete (ETAttParticle x) = delete x
 
+instance ITAttText (Exist TAttText) where
+  setTextColor (ETAttText x) = setTextColor x
+  setTextAlign (ETAttText x) = setTextAlign x
+  setTextSize (ETAttText x) = setTextSize x
+
 instance IDeletable (Exist TAttText) where
   delete (ETAttText x) = delete x
 
+instance ITHStack (Exist THStack) where
+
+
 instance ITNamed (Exist THStack) where
   setTitle (ETHStack x) = setTitle x
 
@@ -1582,6 +1205,9 @@
 instance IDeletable (Exist THStack) where
   delete (ETHStack x) = delete x
 
+instance ITF1 (Exist TF1) where
+
+
 instance ITFormula (Exist TF1) where
   getParameter (ETF1 x) = getParameter x
   setParameter (ETF1 x) = setParameter x
@@ -1608,6 +1234,9 @@
 instance IDeletable (Exist TF1) where
   delete (ETF1 x) = delete x
 
+instance ITGraph (Exist TGraph) where
+
+
 instance ITNamed (Exist TGraph) where
   setTitle (ETGraph x) = setTitle x
 
@@ -1633,6 +1262,9 @@
 instance IDeletable (Exist TGraph) where
   delete (ETGraph x) = delete x
 
+instance ITGraphAsymmErrors (Exist TGraphAsymmErrors) where
+
+
 instance ITGraph (Exist TGraphAsymmErrors) where
 
 
@@ -1661,6 +1293,9 @@
 instance IDeletable (Exist TGraphAsymmErrors) where
   delete (ETGraphAsymmErrors x) = delete x
 
+instance ITCutG (Exist TCutG) where
+
+
 instance ITGraph (Exist TCutG) where
 
 
@@ -1689,6 +1324,9 @@
 instance IDeletable (Exist TCutG) where
   delete (ETCutG x) = delete x
 
+instance ITGraphBentErrors (Exist TGraphBentErrors) where
+
+
 instance ITGraph (Exist TGraphBentErrors) where
 
 
@@ -1717,6 +1355,9 @@
 instance IDeletable (Exist TGraphBentErrors) where
   delete (ETGraphBentErrors x) = delete x
 
+instance ITGraphErrors (Exist TGraphErrors) where
+
+
 instance ITGraph (Exist TGraphErrors) where
 
 
@@ -1745,6 +1386,9 @@
 instance IDeletable (Exist TGraphErrors) where
   delete (ETGraphErrors x) = delete x
 
+instance ITGraphPolar (Exist TGraphPolar) where
+
+
 instance ITGraphErrors (Exist TGraphPolar) where
 
 
@@ -1776,6 +1420,9 @@
 instance IDeletable (Exist TGraphPolar) where
   delete (ETGraphPolar x) = delete x
 
+instance ITGraphQQ (Exist TGraphQQ) where
+
+
 instance ITGraph (Exist TGraphQQ) where
 
 
@@ -1804,6 +1451,9 @@
 instance IDeletable (Exist TGraphQQ) where
   delete (ETGraphQQ x) = delete x
 
+instance ITEllipse (Exist TEllipse) where
+
+
 instance ITObject (Exist TEllipse) where
   getName (ETEllipse x) = getName x
   draw (ETEllipse x) = draw x
@@ -1823,6 +1473,9 @@
 instance IDeletable (Exist TEllipse) where
   delete (ETEllipse x) = delete x
 
+instance ITArc (Exist TArc) where
+
+
 instance ITEllipse (Exist TArc) where
 
 
@@ -1845,6 +1498,9 @@
 instance IDeletable (Exist TArc) where
   delete (ETArc x) = delete x
 
+instance ITCrown (Exist TCrown) where
+
+
 instance ITEllipse (Exist TCrown) where
 
 
@@ -1867,6 +1523,9 @@
 instance IDeletable (Exist TCrown) where
   delete (ETCrown x) = delete x
 
+instance ITLine (Exist TLine) where
+
+
 instance ITObject (Exist TLine) where
   getName (ETLine x) = getName x
   draw (ETLine x) = draw x
@@ -1882,6 +1541,9 @@
 instance IDeletable (Exist TLine) where
   delete (ETLine x) = delete x
 
+instance ITArrow (Exist TArrow) where
+
+
 instance ITLine (Exist TArrow) where
 
 
@@ -1904,6 +1566,9 @@
 instance IDeletable (Exist TArrow) where
   delete (ETArrow x) = delete x
 
+instance ITGaxis (Exist TGaxis) where
+
+
 instance ITLine (Exist TGaxis) where
 
 
@@ -1927,6 +1592,9 @@
 instance IDeletable (Exist TGaxis) where
   delete (ETGaxis x) = delete x
 
+instance ITShape (Exist TShape) where
+
+
 instance ITNamed (Exist TShape) where
   setTitle (ETShape x) = setTitle x
 
@@ -1952,6 +1620,9 @@
 instance IDeletable (Exist TShape) where
   delete (ETShape x) = delete x
 
+instance ITBRIK (Exist TBRIK) where
+
+
 instance ITShape (Exist TBRIK) where
 
 
@@ -1980,6 +1651,9 @@
 instance IDeletable (Exist TBRIK) where
   delete (ETBRIK x) = delete x
 
+instance ITTUBE (Exist TTUBE) where
+
+
 instance ITShape (Exist TTUBE) where
 
 
@@ -2008,6 +1682,9 @@
 instance IDeletable (Exist TTUBE) where
   delete (ETTUBE x) = delete x
 
+instance ITPCON (Exist TPCON) where
+
+
 instance ITShape (Exist TPCON) where
 
 
@@ -2036,6 +1713,9 @@
 instance IDeletable (Exist TPCON) where
   delete (ETPCON x) = delete x
 
+instance ITSPHE (Exist TSPHE) where
+
+
 instance ITShape (Exist TSPHE) where
 
 
@@ -2064,6 +1744,9 @@
 instance IDeletable (Exist TSPHE) where
   delete (ETSPHE x) = delete x
 
+instance ITXTRU (Exist TXTRU) where
+
+
 instance ITShape (Exist TXTRU) where
 
 
@@ -2092,6 +1775,9 @@
 instance IDeletable (Exist TXTRU) where
   delete (ETXTRU x) = delete x
 
+instance ITBox (Exist TBox) where
+
+
 instance ITObject (Exist TBox) where
   getName (ETBox x) = getName x
   draw (ETBox x) = draw x
@@ -2111,6 +1797,9 @@
 instance IDeletable (Exist TBox) where
   delete (ETBox x) = delete x
 
+instance ITPave (Exist TPave) where
+
+
 instance ITBox (Exist TPave) where
 
 
@@ -2133,6 +1822,9 @@
 instance IDeletable (Exist TPave) where
   delete (ETPave x) = delete x
 
+instance ITPaveText (Exist TPaveText) where
+
+
 instance ITPave (Exist TPaveText) where
 
 
@@ -2163,6 +1855,9 @@
 instance IDeletable (Exist TPaveText) where
   delete (ETPaveText x) = delete x
 
+instance ITDiamond (Exist TDiamond) where
+
+
 instance ITPaveText (Exist TDiamond) where
 
 
@@ -2196,6 +1891,9 @@
 instance IDeletable (Exist TDiamond) where
   delete (ETDiamond x) = delete x
 
+instance ITPaveStats (Exist TPaveStats) where
+
+
 instance ITPaveText (Exist TPaveStats) where
 
 
@@ -2229,6 +1927,9 @@
 instance IDeletable (Exist TPaveStats) where
   delete (ETPaveStats x) = delete x
 
+instance ITPavesText (Exist TPavesText) where
+
+
 instance ITPaveText (Exist TPavesText) where
 
 
@@ -2262,6 +1963,9 @@
 instance IDeletable (Exist TPavesText) where
   delete (ETPavesText x) = delete x
 
+instance ITLegend (Exist TLegend) where
+  addEntry (ETLegend x) = addEntry x
+
 instance ITPave (Exist TLegend) where
 
 
@@ -2292,6 +1996,9 @@
 instance IDeletable (Exist TLegend) where
   delete (ETLegend x) = delete x
 
+instance ITLegendEntry (Exist TLegendEntry) where
+
+
 instance ITObject (Exist TLegendEntry) where
   getName (ETLegendEntry x) = getName x
   draw (ETLegendEntry x) = draw x
@@ -2319,6 +2026,9 @@
 instance IDeletable (Exist TLegendEntry) where
   delete (ETLegendEntry x) = delete x
 
+instance ITPaveLabel (Exist TPaveLabel) where
+
+
 instance ITPave (Exist TPaveLabel) where
 
 
@@ -2349,6 +2059,9 @@
 instance IDeletable (Exist TPaveLabel) where
   delete (ETPaveLabel x) = delete x
 
+instance ITPaveClass (Exist TPaveClass) where
+
+
 instance ITPaveLabel (Exist TPaveClass) where
 
 
@@ -2382,6 +2095,9 @@
 instance IDeletable (Exist TPaveClass) where
   delete (ETPaveClass x) = delete x
 
+instance ITWbox (Exist TWbox) where
+  setBorderMode (ETWbox x) = setBorderMode x
+
 instance ITBox (Exist TWbox) where
 
 
@@ -2404,6 +2120,9 @@
 instance IDeletable (Exist TWbox) where
   delete (ETWbox x) = delete x
 
+instance ITFrame (Exist TFrame) where
+
+
 instance ITWbox (Exist TFrame) where
   setBorderMode (ETFrame x) = setBorderMode x
 
@@ -2429,6 +2148,9 @@
 instance IDeletable (Exist TFrame) where
   delete (ETFrame x) = delete x
 
+instance ITSliderBox (Exist TSliderBox) where
+
+
 instance ITWbox (Exist TSliderBox) where
   setBorderMode (ETSliderBox x) = setBorderMode x
 
@@ -2454,6 +2176,9 @@
 instance IDeletable (Exist TSliderBox) where
   delete (ETSliderBox x) = delete x
 
+instance ITTree (Exist TTree) where
+
+
 instance ITNamed (Exist TTree) where
   setTitle (ETTree x) = setTitle x
 
@@ -2479,6 +2204,9 @@
 instance IDeletable (Exist TTree) where
   delete (ETTree x) = delete x
 
+instance ITChain (Exist TChain) where
+
+
 instance ITTree (Exist TChain) where
 
 
@@ -2507,6 +2235,9 @@
 instance IDeletable (Exist TChain) where
   delete (ETChain x) = delete x
 
+instance ITNtuple (Exist TNtuple) where
+
+
 instance ITTree (Exist TNtuple) where
 
 
@@ -2535,6 +2266,9 @@
 instance IDeletable (Exist TNtuple) where
   delete (ETNtuple x) = delete x
 
+instance ITNtupleD (Exist TNtupleD) where
+
+
 instance ITTree (Exist TNtupleD) where
 
 
@@ -2563,6 +2297,9 @@
 instance IDeletable (Exist TNtupleD) where
   delete (ETNtupleD x) = delete x
 
+instance ITTreeSQL (Exist TTreeSQL) where
+
+
 instance ITTree (Exist TTreeSQL) where
 
 
@@ -2591,6 +2328,9 @@
 instance IDeletable (Exist TTreeSQL) where
   delete (ETTreeSQL x) = delete x
 
+instance ITPolyLine (Exist TPolyLine) where
+
+
 instance ITObject (Exist TPolyLine) where
   getName (ETPolyLine x) = getName x
   draw (ETPolyLine x) = draw x
@@ -2610,6 +2350,9 @@
 instance IDeletable (Exist TPolyLine) where
   delete (ETPolyLine x) = delete x
 
+instance ITCurlyLine (Exist TCurlyLine) where
+
+
 instance ITPolyLine (Exist TCurlyLine) where
 
 
@@ -2632,6 +2375,9 @@
 instance IDeletable (Exist TCurlyLine) where
   delete (ETCurlyLine x) = delete x
 
+instance ITCurlyArc (Exist TCurlyArc) where
+
+
 instance ITCurlyLine (Exist TCurlyArc) where
 
 
@@ -2657,6 +2403,9 @@
 instance IDeletable (Exist TCurlyArc) where
   delete (ETCurlyArc x) = delete x
 
+instance ITEfficiency (Exist TEfficiency) where
+
+
 instance ITNamed (Exist TEfficiency) where
   setTitle (ETEfficiency x) = setTitle x
 
@@ -2682,6 +2431,11 @@
 instance IDeletable (Exist TEfficiency) where
   delete (ETEfficiency x) = delete x
 
+instance ITAxis (Exist TAxis) where
+  setTimeDisplay (ETAxis x) = setTimeDisplay x
+  setTimeFormat (ETAxis x) = setTimeFormat x
+  setTimeOffset (ETAxis x) = setTimeOffset x
+
 instance ITNamed (Exist TAxis) where
   setTitle (ETAxis x) = setTitle x
 
@@ -2704,6 +2458,9 @@
 instance IDeletable (Exist TAxis) where
   delete (ETAxis x) = delete x
 
+instance ITLatex (Exist TLatex) where
+
+
 instance ITText (Exist TLatex) where
 
 
@@ -2730,6 +2487,9 @@
 instance IDeletable (Exist TLatex) where
   delete (ETLatex x) = delete x
 
+instance ITText (Exist TText) where
+
+
 instance ITNamed (Exist TText) where
   setTitle (ETText x) = setTitle x
 
@@ -2750,6 +2510,13 @@
 instance IDeletable (Exist TText) where
   delete (ETText x) = delete x
 
+instance ITDirectory (Exist TDirectory) where
+  append (ETDirectory x) = append x
+  addD (ETDirectory x) = addD x
+  appendKey (ETDirectory x) = appendKey x
+  close (ETDirectory x) = close x
+  get (ETDirectory x) = get x
+
 instance ITNamed (Exist TDirectory) where
   setTitle (ETDirectory x) = setTitle x
 
@@ -2765,6 +2532,9 @@
 instance IDeletable (Exist TDirectory) where
   delete (ETDirectory x) = delete x
 
+instance ITDirectoryFile (Exist TDirectoryFile) where
+  getListOfKeys (ETDirectoryFile x) = getListOfKeys x
+
 instance ITDirectory (Exist TDirectoryFile) where
   append (ETDirectoryFile x) = append x
   addD (ETDirectoryFile x) = addD x
@@ -2787,6 +2557,9 @@
 instance IDeletable (Exist TDirectoryFile) where
   delete (ETDirectoryFile x) = delete x
 
+instance ITFile (Exist TFile) where
+
+
 instance ITDirectoryFile (Exist TFile) where
   getListOfKeys (ETFile x) = getListOfKeys x
 
@@ -2812,6 +2585,9 @@
 instance IDeletable (Exist TFile) where
   delete (ETFile x) = delete x
 
+instance ITBranch (Exist TBranch) where
+
+
 instance ITNamed (Exist TBranch) where
   setTitle (ETBranch x) = setTitle x
 
@@ -2831,6 +2607,9 @@
 instance IDeletable (Exist TBranch) where
   delete (ETBranch x) = delete x
 
+instance ITVirtualTreePlayer (Exist TVirtualTreePlayer) where
+
+
 instance ITObject (Exist TVirtualTreePlayer) where
   getName (ETVirtualTreePlayer x) = getName x
   draw (ETVirtualTreePlayer x) = draw x
@@ -2843,6 +2622,9 @@
 instance IDeletable (Exist TVirtualTreePlayer) where
   delete (ETVirtualTreePlayer x) = delete x
 
+instance ITTreePlayer (Exist TTreePlayer) where
+
+
 instance ITVirtualTreePlayer (Exist TTreePlayer) where
 
 
@@ -2858,51 +2640,145 @@
 instance IDeletable (Exist TTreePlayer) where
   delete (ETTreePlayer x) = delete x
 
+instance ITArray (Exist TArray) where
+
+
 instance IDeletable (Exist TArray) where
   delete (ETArray x) = delete x
 
+instance ITArrayC (Exist TArrayC) where
+
+
 instance ITArray (Exist TArrayC) where
 
 
 instance IDeletable (Exist TArrayC) where
   delete (ETArrayC x) = delete x
 
+instance ITArrayD (Exist TArrayD) where
+
+
 instance ITArray (Exist TArrayD) where
 
 
 instance IDeletable (Exist TArrayD) where
   delete (ETArrayD x) = delete x
 
+instance ITArrayF (Exist TArrayF) where
+
+
 instance ITArray (Exist TArrayF) where
 
 
 instance IDeletable (Exist TArrayF) where
   delete (ETArrayF x) = delete x
 
+instance ITArrayI (Exist TArrayI) where
+
+
 instance ITArray (Exist TArrayI) where
 
 
 instance IDeletable (Exist TArrayI) where
   delete (ETArrayI x) = delete x
 
+instance ITArrayL (Exist TArrayL) where
+
+
 instance ITArray (Exist TArrayL) where
 
 
 instance IDeletable (Exist TArrayL) where
   delete (ETArrayL x) = delete x
 
+instance ITArrayL64 (Exist TArrayL64) where
+
+
 instance ITArray (Exist TArrayL64) where
 
 
 instance IDeletable (Exist TArrayL64) where
   delete (ETArrayL64 x) = delete x
 
+instance ITArrayS (Exist TArrayS) where
+
+
 instance ITArray (Exist TArrayS) where
 
 
 instance IDeletable (Exist TArrayS) where
   delete (ETArrayS x) = delete x
 
+instance ITH1 (Exist TH1) where
+  add (ETH1 x) = add x
+  addBinContent (ETH1 x) = addBinContent x
+  chi2Test (ETH1 x) = chi2Test x
+  computeIntegral (ETH1 x) = computeIntegral x
+  directoryAutoAdd (ETH1 x) = directoryAutoAdd x
+  distancetoPrimitive (ETH1 x) = distancetoPrimitive x
+  divide (ETH1 x) = divide x
+  drawCopy (ETH1 x) a1 = return . ETH1 =<< drawCopy x a1
+  drawNormalized (ETH1 x) = drawNormalized x
+  drawPanel (ETH1 x) = drawPanel x
+  bufferEmpty (ETH1 x) = bufferEmpty x
+  eval (ETH1 x) = eval x
+  executeEvent (ETH1 x) = executeEvent x
+  fFT (ETH1 x) = fFT x
+  fill1 (ETH1 x) = fill1 x
+  fillN (ETH1 x) = fillN x
+  fillRandom (ETH1 x) = fillRandom x
+  findBin (ETH1 x) = findBin x
+  findFixBin (ETH1 x) = findFixBin x
+  findFirstBinAbove (ETH1 x) = findFirstBinAbove x
+  findLastBinAbove (ETH1 x) = findLastBinAbove x
+  fitPanel (ETH1 x) = fitPanel x
+  getNdivisions (ETH1 x) = getNdivisions x
+  getAxisColor (ETH1 x) = getAxisColor x
+  getLabelColor (ETH1 x) = getLabelColor x
+  getLabelFont (ETH1 x) = getLabelFont x
+  getLabelOffset (ETH1 x) = getLabelOffset x
+  getLabelSize (ETH1 x) = getLabelSize x
+  getTitleFont (ETH1 x) = getTitleFont x
+  getTitleOffset (ETH1 x) = getTitleOffset x
+  getTitleSize (ETH1 x) = getTitleSize x
+  getTickLength (ETH1 x) = getTickLength x
+  getBarOffset (ETH1 x) = getBarOffset x
+  getBarWidth (ETH1 x) = getBarWidth x
+  getContour (ETH1 x) = getContour x
+  getContourLevel (ETH1 x) = getContourLevel x
+  getContourLevelPad (ETH1 x) = getContourLevelPad x
+  getBin (ETH1 x) = getBin x
+  getBinCenter (ETH1 x) = getBinCenter x
+  getBinContent1 (ETH1 x) = getBinContent1 x
+  getBinContent2 (ETH1 x) = getBinContent2 x
+  getBinContent3 (ETH1 x) = getBinContent3 x
+  getBinError1 (ETH1 x) = getBinError1 x
+  getBinError2 (ETH1 x) = getBinError2 x
+  getBinError3 (ETH1 x) = getBinError3 x
+  getBinLowEdge (ETH1 x) = getBinLowEdge x
+  getBinWidth (ETH1 x) = getBinWidth x
+  getCellContent (ETH1 x) = getCellContent x
+  getCellError (ETH1 x) = getCellError x
+  scale (ETH1 x) = scale x
+  setAxisColor (ETH1 x) = setAxisColor x
+  setAxisRange (ETH1 x) = setAxisRange x
+  setBarOffset (ETH1 x) = setBarOffset x
+  setBarWidth (ETH1 x) = setBarWidth x
+  setBinContent1 (ETH1 x) = setBinContent1 x
+  setBinContent2 (ETH1 x) = setBinContent2 x
+  setBinContent3 (ETH1 x) = setBinContent3 x
+  setBinError1 (ETH1 x) = setBinError1 x
+  setBinError2 (ETH1 x) = setBinError2 x
+  setBinError3 (ETH1 x) = setBinError3 x
+  setBins1 (ETH1 x) = setBins1 x
+  setBins2 (ETH1 x) = setBins2 x
+  setBins3 (ETH1 x) = setBins3 x
+  setMaximum (ETH1 x) = setMaximum x
+  setMinimum (ETH1 x) = setMinimum x
+  setXTitle (ETH1 x) = setXTitle x
+  setYTitle (ETH1 x) = setYTitle x
+  setZTitle (ETH1 x) = setZTitle x
+
 instance ITNamed (Exist TH1) where
   setTitle (ETH1 x) = setTitle x
 
@@ -2928,6 +2804,30 @@
 instance IDeletable (Exist TH1) where
   delete (ETH1 x) = delete x
 
+instance ITH2 (Exist TH2) where
+  fill2 (ETH2 x) = fill2 x
+  fillRandom2 (ETH2 x) = fillRandom2 x
+  findFirstBinAbove2 (ETH2 x) = findFirstBinAbove2 x
+  findLastBinAbove2 (ETH2 x) = findLastBinAbove2 x
+  fitSlicesX (ETH2 x) = fitSlicesX x
+  fitSlicesY (ETH2 x) = fitSlicesY x
+  getCorrelationFactor (ETH2 x) = getCorrelationFactor x
+  getCovariance (ETH2 x) = getCovariance x
+  getStats (ETH2 x) = getStats x
+  integral (ETH2 x) = integral x
+  interpolate (ETH2 x) = interpolate x
+  kolmogorovTest (ETH2 x) = kolmogorovTest x
+  rebinX (ETH2 x) = rebinX x
+  rebinY (ETH2 x) = rebinY x
+  rebin2D (ETH2 x) = rebin2D x
+  putStats (ETH2 x) = putStats x
+  reset (ETH2 x) = reset x
+  setShowProjectionX (ETH2 x) = setShowProjectionX x
+  setShowProjectionY (ETH2 x) = setShowProjectionY x
+  showBackground (ETH2 x) = showBackground x
+  showPeaks (ETH2 x) = showPeaks x
+  smooth (ETH2 x) = smooth x
+
 instance ITH1 (Exist TH2) where
   add (ETH2 x) = add x
   addBinContent (ETH2 x) = addBinContent x
@@ -3023,6 +2923,9 @@
 instance IDeletable (Exist TH2) where
   delete (ETH2 x) = delete x
 
+instance ITH3 (Exist TH3) where
+
+
 instance ITH1 (Exist TH3) where
   add (ETH3 x) = add x
   addBinContent (ETH3 x) = addBinContent x
@@ -3121,6 +3024,9 @@
 instance IDeletable (Exist TH3) where
   delete (ETH3 x) = delete x
 
+instance ITH1C (Exist TH1C) where
+
+
 instance ITH1 (Exist TH1C) where
   add (ETH1C x) = add x
   addBinContent (ETH1C x) = addBinContent x
@@ -3222,6 +3128,9 @@
 instance ITArray (Exist TH1C) where
 
 
+instance ITH1D (Exist TH1D) where
+
+
 instance ITH1 (Exist TH1D) where
   add (ETH1D x) = add x
   addBinContent (ETH1D x) = addBinContent x
@@ -3323,6 +3232,9 @@
 instance ITArray (Exist TH1D) where
 
 
+instance ITH1F (Exist TH1F) where
+
+
 instance ITH1 (Exist TH1F) where
   add (ETH1F x) = add x
   addBinContent (ETH1F x) = addBinContent x
@@ -3424,6 +3336,9 @@
 instance ITArray (Exist TH1F) where
 
 
+instance ITH1I (Exist TH1I) where
+
+
 instance ITH1 (Exist TH1I) where
   add (ETH1I x) = add x
   addBinContent (ETH1I x) = addBinContent x
@@ -3525,6 +3440,9 @@
 instance ITArray (Exist TH1I) where
 
 
+instance ITH1S (Exist TH1S) where
+
+
 instance ITH1 (Exist TH1S) where
   add (ETH1S x) = add x
   addBinContent (ETH1S x) = addBinContent x
@@ -3626,6 +3544,9 @@
 instance ITArray (Exist TH1S) where
 
 
+instance ITH2C (Exist TH2C) where
+
+
 instance ITH2 (Exist TH2C) where
   fill2 (ETH2C x) = fill2 x
   fillRandom2 (ETH2C x) = fillRandom2 x
@@ -3751,6 +3672,9 @@
 instance ITArray (Exist TH2C) where
 
 
+instance ITH2D (Exist TH2D) where
+
+
 instance ITH2 (Exist TH2D) where
   fill2 (ETH2D x) = fill2 x
   fillRandom2 (ETH2D x) = fillRandom2 x
@@ -3876,6 +3800,9 @@
 instance ITArray (Exist TH2D) where
 
 
+instance ITH2F (Exist TH2F) where
+
+
 instance ITH2 (Exist TH2F) where
   fill2 (ETH2F x) = fill2 x
   fillRandom2 (ETH2F x) = fillRandom2 x
@@ -4001,6 +3928,9 @@
 instance ITArray (Exist TH2F) where
 
 
+instance ITH2I (Exist TH2I) where
+
+
 instance ITH2 (Exist TH2I) where
   fill2 (ETH2I x) = fill2 x
   fillRandom2 (ETH2I x) = fillRandom2 x
@@ -4126,6 +4056,9 @@
 instance ITArray (Exist TH2I) where
 
 
+instance ITH2Poly (Exist TH2Poly) where
+
+
 instance ITH2 (Exist TH2Poly) where
   fill2 (ETH2Poly x) = fill2 x
   fillRandom2 (ETH2Poly x) = fillRandom2 x
@@ -4245,6 +4178,9 @@
 instance IDeletable (Exist TH2Poly) where
   delete (ETH2Poly x) = delete x
 
+instance ITH2S (Exist TH2S) where
+
+
 instance ITH2 (Exist TH2S) where
   fill2 (ETH2S x) = fill2 x
   fillRandom2 (ETH2S x) = fillRandom2 x
@@ -4370,6 +4306,9 @@
 instance ITArray (Exist TH2S) where
 
 
+instance ITH3C (Exist TH3C) where
+
+
 instance ITH3 (Exist TH3C) where
 
 
@@ -4477,6 +4416,9 @@
 instance ITArray (Exist TH3C) where
 
 
+instance ITH3D (Exist TH3D) where
+
+
 instance ITH3 (Exist TH3D) where
 
 
@@ -4584,6 +4526,9 @@
 instance ITArray (Exist TH3D) where
 
 
+instance ITH3F (Exist TH3F) where
+
+
 instance ITH3 (Exist TH3F) where
 
 
@@ -4691,6 +4636,9 @@
 instance ITArray (Exist TH3F) where
 
 
+instance ITH3I (Exist TH3I) where
+
+
 instance ITH3 (Exist TH3I) where
 
 
@@ -4798,6 +4746,9 @@
 instance ITArray (Exist TH3I) where
 
 
+instance ITH3S (Exist TH3S) where
+
+
 instance ITH3 (Exist TH3S) where
 
 
@@ -4905,9 +4856,16 @@
 instance ITArray (Exist TH3S) where
 
 
+instance ITQObject (Exist TQObject) where
+
+
 instance IDeletable (Exist TQObject) where
   delete (ETQObject x) = delete x
 
+instance ITVirtualPad (Exist TVirtualPad) where
+  getFrame (ETVirtualPad x) = getFrame x
+  range (ETVirtualPad x) = range x
+
 instance ITObject (Exist TVirtualPad) where
   getName (ETVirtualPad x) = getName x
   draw (ETVirtualPad x) = draw x
@@ -4933,6 +4891,9 @@
 instance IDeletable (Exist TVirtualPad) where
   delete (ETVirtualPad x) = delete x
 
+instance ITPad (Exist TPad) where
+
+
 instance ITVirtualPad (Exist TPad) where
   getFrame (ETPad x) = getFrame x
   range (ETPad x) = range x
@@ -4962,6 +4923,9 @@
 instance IDeletable (Exist TPad) where
   delete (ETPad x) = delete x
 
+instance ITButton (Exist TButton) where
+
+
 instance ITPad (Exist TButton) where
 
 
@@ -4999,6 +4963,9 @@
 instance IDeletable (Exist TButton) where
   delete (ETButton x) = delete x
 
+instance ITGroupButton (Exist TGroupButton) where
+
+
 instance ITButton (Exist TGroupButton) where
 
 
@@ -5039,6 +5006,9 @@
 instance IDeletable (Exist TGroupButton) where
   delete (ETGroupButton x) = delete x
 
+instance ITCanvas (Exist TCanvas) where
+
+
 instance ITPad (Exist TCanvas) where
 
 
@@ -5071,6 +5041,9 @@
 instance IDeletable (Exist TCanvas) where
   delete (ETCanvas x) = delete x
 
+instance ITDialogCanvas (Exist TDialogCanvas) where
+
+
 instance ITCanvas (Exist TDialogCanvas) where
 
 
@@ -5111,6 +5084,9 @@
 instance IDeletable (Exist TDialogCanvas) where
   delete (ETDialogCanvas x) = delete x
 
+instance ITInspectCanvas (Exist TInspectCanvas) where
+
+
 instance ITCanvas (Exist TInspectCanvas) where
 
 
@@ -5151,6 +5127,9 @@
 instance IDeletable (Exist TInspectCanvas) where
   delete (ETInspectCanvas x) = delete x
 
+instance ITEvePad (Exist TEvePad) where
+
+
 instance ITPad (Exist TEvePad) where
 
 
@@ -5183,6 +5162,9 @@
 instance IDeletable (Exist TEvePad) where
   delete (ETEvePad x) = delete x
 
+instance ITSlider (Exist TSlider) where
+
+
 instance ITPad (Exist TSlider) where
 
 
@@ -5215,6 +5197,9 @@
 instance IDeletable (Exist TSlider) where
   delete (ETSlider x) = delete x
 
+instance ITApplication (Exist TApplication) where
+  run (ETApplication x) = run x
+
 instance ITObject (Exist TApplication) where
   getName (ETApplication x) = getName x
   draw (ETApplication x) = draw x
@@ -5230,6 +5215,9 @@
 instance IDeletable (Exist TApplication) where
   delete (ETApplication x) = delete x
 
+instance ITRint (Exist TRint) where
+
+
 instance ITApplication (Exist TRint) where
   run (ETRint x) = run x
 
@@ -5248,6 +5236,10 @@
 instance IDeletable (Exist TRint) where
   delete (ETRint x) = delete x
 
+instance ITRandom (Exist TRandom) where
+  gaus (ETRandom x) = gaus x
+  uniform (ETRandom x) = uniform x
+
 instance ITNamed (Exist TRandom) where
   setTitle (ETRandom x) = setTitle x
 
@@ -5263,6 +5255,9 @@
 instance IDeletable (Exist TRandom) where
   delete (ETRandom x) = delete x
 
+instance ITCollection (Exist TCollection) where
+
+
 instance ITObject (Exist TCollection) where
   getName (ETCollection x) = getName x
   draw (ETCollection x) = draw x
@@ -5275,6 +5270,9 @@
 instance IDeletable (Exist TCollection) where
   delete (ETCollection x) = delete x
 
+instance ITSeqCollection (Exist TSeqCollection) where
+
+
 instance ITCollection (Exist TSeqCollection) where
 
 
@@ -5290,6 +5288,9 @@
 instance IDeletable (Exist TSeqCollection) where
   delete (ETSeqCollection x) = delete x
 
+instance ITObjArray (Exist TObjArray) where
+
+
 instance ITSeqCollection (Exist TObjArray) where
 
 
@@ -5308,6 +5309,9 @@
 instance IDeletable (Exist TObjArray) where
   delete (ETObjArray x) = delete x
 
+instance ITList (Exist TList) where
+
+
 instance ITSeqCollection (Exist TList) where
 
 
@@ -5326,6 +5330,9 @@
 instance IDeletable (Exist TList) where
   delete (ETList x) = delete x
 
+instance ITKey (Exist TKey) where
+
+
 instance ITNamed (Exist TKey) where
   setTitle (ETKey x) = setTitle x
 
@@ -5341,8 +5348,14 @@
 instance IDeletable (Exist TKey) where
   delete (ETKey x) = delete x
 
+instance ITDatime (Exist TDatime) where
+  convert (ETDatime x) = convert x
 
+instance IDeletable (Exist TDatime) where
+  delete (ETDatime x) = delete x
 
+
+
 instance ITObject TObject where
   getName = xform0 c_tobject_getname
   draw = xform1 c_tobject_draw
@@ -5485,6 +5498,9 @@
 instance ITEfficiency TEfficiency where
 
 instance ITAxis TAxis where
+  setTimeDisplay = xform1 c_taxis_settimedisplay
+  setTimeFormat = xform1 c_taxis_settimeformat
+  setTimeOffset = xform2 c_taxis_settimeoffset
 
 instance ITLatex TLatex where
 
@@ -5693,6 +5709,12 @@
 
 instance ITKey TKey where
 
+instance ITDatime TDatime where
+  convert = xform1 c_tdatime_convert
+
+instance IDeletable TDatime where
+  delete = xform0 c_tdatime_delete
+
 instance IDeletable TKey where
   delete = xform0 c_tkey_delete
 
@@ -9643,6 +9665,10 @@
 
 newTKey :: String -> String -> TClass -> Int -> TDirectory -> IO TKey
 newTKey = xform4 c_tkey_newtkey
+
+
+newTDatime :: Int -> Int -> Int -> Int -> Int -> Int -> IO TDatime
+newTDatime = xform5 c_tdatime_newtdatime
 
 tLatexDrawLatex :: TLatex -> Double -> Double -> String -> IO TLatex
 tLatexDrawLatex = xform3 c_tlatex_tlatexdrawlatex
diff --git a/src/HROOT/Class/Interface.hs b/src/HROOT/Class/Interface.hs
--- a/src/HROOT/Class/Interface.hs
+++ b/src/HROOT/Class/Interface.hs
@@ -1,12 +1,12 @@
 {-# LANGUAGE ForeignFunctionInterface, TypeFamilies, MultiParamTypeClasses, 
-             FlexibleInstances, TypeSynonymInstances, UndecidableInstances, 
-             EmptyDataDecls, IncoherentInstances, ExistentialQuantification, 
-             ScopedTypeVariables #-}
+             FlexibleInstances, TypeSynonymInstances, 
+             EmptyDataDecls, ExistentialQuantification, ScopedTypeVariables #-}
 
 -- module HROOT.Class.Interface where
 
 module HROOT.Class.Interface  where
 
+import Data.Word
 import Foreign.C            
 import Foreign.Ptr
 import Foreign.ForeignPtr
@@ -27,13 +27,24 @@
 class Existable a where
   data Exist a :: *  
 
+{-
+-- eliminate this for the time being to have a solution with Repl
 instance Castable a a where
   cast = id
   uncast = id
+-}
 
+instance Castable () () where
+  cast = id 
+  uncast = id 
+
 instance Castable Int CInt where
   cast = fromIntegral 
   uncast = fromIntegral
+
+instance Castable Word CUInt where
+  cast = fromIntegral
+  uncast = fromIntegral
   
 instance Castable Double CDouble where
   cast = realToFrac
@@ -1139,7 +1150,16 @@
 instance Existable TKey where
   data Exist TKey = forall a. (FPtr a, ITKey a) => ETKey a
 
+data RawTDatime
+newtype TDatime = TDatime (ForeignPtr RawTDatime) deriving (Eq, Ord, Show)
+instance FPtr TDatime where
+   type Raw TDatime = RawTDatime
+   get_fptr (TDatime fptr) = fptr
+   cast_fptr_to_obj = TDatime
+instance Existable TDatime where
+  data Exist TDatime = forall a. (FPtr a, ITDatime a) => ETDatime a
 
+
 class IDeletable a where
 
     delete :: a -> IO () 
@@ -1386,7 +1406,13 @@
 
 class (ITNamed a,ITAttAxis a) => ITAxis a where
 
+    setTimeDisplay :: a -> Int -> IO () 
 
+    setTimeFormat :: a -> String -> IO () 
+
+    setTimeOffset :: a -> Double -> String -> IO () 
+
+
 class (ITText a,ITAttLine a) => ITLatex a where
 
 
@@ -1846,6 +1872,11 @@
 
 class (ITNamed a) => ITKey a where
 
+
+class (IDeletable a) => ITDatime a where
+
+    convert :: a -> Int -> IO Word 
+
 upcastTObject :: (FPtr a, ITObject a) => a -> TObject
 upcastTObject h = let fh = get_fptr h
                       fh2 :: ForeignPtr RawTObject = castForeignPtr fh
@@ -2405,3 +2436,8 @@
 upcastTKey h = let fh = get_fptr h
                    fh2 :: ForeignPtr RawTKey = castForeignPtr fh
                in cast_fptr_to_obj fh2
+
+upcastTDatime :: (FPtr a, ITDatime a) => a -> TDatime
+upcastTDatime h = let fh = get_fptr h
+                      fh2 :: ForeignPtr RawTDatime = castForeignPtr fh
+                  in cast_fptr_to_obj fh2
diff --git a/src/HROOT/Class/TAxis.hs b/src/HROOT/Class/TAxis.hs
--- a/src/HROOT/Class/TAxis.hs
+++ b/src/HROOT/Class/TAxis.hs
@@ -1,7 +1,7 @@
 module HROOT.Class.TAxis
   (
     TAxis(..)
-  , ITAxis
+  , ITAxis(..)
   , upcastTAxis 
   ) where
 
diff --git a/src/HROOT/Class/TDatime.hs b/src/HROOT/Class/TDatime.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Class/TDatime.hs
@@ -0,0 +1,10 @@
+module HROOT.Class.TDatime
+  (
+    TDatime(..)
+  , ITDatime(..)
+  , upcastTDatime 
+  ) where
+
+import HROOT.Class.Interface
+import HROOT.Class.Implementation ()
+
