diff --git a/CHANGES b/CHANGES
new file mode 100644
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,60 @@
+# Changelog for HROOT
+
+## 0.10.0.1
+- Use hackage-version of fficxx (#18)
+- Generate docs in CI (#17)
+- Update flake.nix with recent fficxx and ormolu format (#16)
+- Update fficxx to support GHC 9.4 (#15)
+- Add TMutex and test multithreading with GUI (#12)
+- HROOT now uses common stdcxx (#11)
+- idealized gas simulation (#10)
+- Add TMarker and Range. Test 2D graphics using gas example (#9)
+- HROOT generation and packing via nix (#8)
+- Revive umbrella package generation (#7)
+- Static files (Config.hs, Setup.lhs) and custom-setup dependency (#6)
+- Modernize HROOT with fficxx 0.5.1 (#5)
+
+## 0.9.0.1
+
+## 0.9
+- HROOT-tree
+- HROOT only support ROOT > 6
+
+## 0.8
+- separate packages into HROOT-core, HROOT-hist, HROOT-io, HROOT-math, HROOT-graf and HROOT is now an umbrella package
+
+## 0.7
+- separate all class interfaces and implementation in different modules
+- overhaul Existential
+
+## 0.7.1
+- support for static methods
+- add TROOT
+
+## 0.6.9
+- implement almost all class methods of TLine, TAttLine, TAttMarker, TAttText and TAttPad
+
+## 0.6.8
+- implement almost all class methods of TH2, TH3, TFormula, TF1 and TGraph
+
+## 0.6.7
+- implement almost all TH1 class methods
+
+## 0.6.6
+- do not need OverlappingInstances, IncoherentInstances, UndecidableInstances
+
+## 0.6.4
+- add many TH2 class methods
+
+## 0.6.3
+- Implement Existential Types
+
+## 0.6
+- implement Deletable. delete method for every object
+- refactor HROOT generated file names (Interface.hs, Implementation.hs, FFI.hs)
+
+## 0.5.1
+- support for delete
+
+## 0.5.0
+- initial preview release
diff --git a/Config.hs b/Config.hs
deleted file mode 100644
--- a/Config.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Config where
- 
-import Distribution.Simple
-import Distribution.Simple.Setup
-import Distribution.PackageDescription
-import Distribution.Simple.LocalBuildInfo
-
-import System.Exit
-import System.Process
-
-config :: LocalBuildInfo -> IO (Maybe HookedBuildInfo)
-config bInfo = do 
-  (excode, out, err) <- readProcessWithExitCode "root-config" ["--glibs"] ""
-  liboptset' <- case excode of 
-                  ExitSuccess -> do  
-                    return . Just .  mkLibraryOptionSet . words $ out
-                  _ -> do 
-                    putStrLn $ "root-config failure but I am installing HROOT without ROOT. It will not work. This is only for documentation." 
-                    return Nothing              
-  (excode2,out2,err2) <- readProcessWithExitCode "root-config" ["--incdir"] ""
-  incdir' <- case excode2 of 
-               ExitSuccess -> do  
-                 return . Just . head . words $ out2
-               _ -> do 
-                 putStrLn $ "root-config failure but I am installing HROOT without ROOT. It will not work. This is only for documentation." 
-                 return Nothing
-  let Just lib = library . localPkgDescr $ bInfo
-      buildinfo = libBuildInfo lib
-  let (r :: Maybe HookedBuildInfo) = case liboptset' of 
-            Nothing -> Nothing
-            Just liboptset -> 
-              case incdir' of 
-                Nothing -> Nothing 
-                Just incdir -> 
-                  let hbi = emptyBuildInfo { extraLibs = extraLibs buildinfo 
-                                                         ++ libs liboptset
-                                           , extraLibDirs = libdirs liboptset 
-                                           , includeDirs = incdir : includeDirs buildinfo
-                                           }
-                  in Just (Just hbi, []) 
-  return r 
-
-
-data LibraryOptionSet = LibraryOptionSet { 
-  libs :: [String], 
-  libdirs :: [String], 
-  libopts :: [String]
-} deriving Show
-
-data LibraryOption = Lib String 
-                   | Dir String
-                   | Opt String 
-                   deriving Show
-
-mkLibraryOptionSet :: [String] -> LibraryOptionSet
-mkLibraryOptionSet strs = let opts = libraryOptions strs
-                          in  foldr f (LibraryOptionSet [] [] []) opts 
-  where f x (LibraryOptionSet l d o) = case x of
-                                         Lib st -> LibraryOptionSet (st:l) d o 
-                                         Dir st -> LibraryOptionSet l (st:d) o 
-                                         Opt st -> LibraryOptionSet l d (st:o) 
-
-libraryOptions :: [String] -> [LibraryOption] -- LibraryOptionSet 
-libraryOptions = map f 
-  where f x = let r = parseLibraryOptionClassifier x
-              in  case r of 
-                    Left msg -> error (show msg)
-                    Right result -> result
-
-
-parseLibraryOptionClassifier :: String -> Either String LibraryOption 
-parseLibraryOptionClassifier [] = Left "empty option"
-parseLibraryOptionClassifier str@(x:xs) = 
-  case x of
-    '-' -> if null xs 
-             then Left "parse error"
-             else let (y:ys) = xs
-                  in  case y of
-                        'L' -> Right (Dir ys)
-                        'l' -> Right (Lib ys)
-                        _ -> Right (Opt str)
-    _ -> Right (Opt str) 
-
diff --git a/HROOT-hist.cabal b/HROOT-hist.cabal
--- a/HROOT-hist.cabal
+++ b/HROOT-hist.cabal
@@ -1,94 +1,107 @@
-Name:                HROOT-hist
-Version:     0.9.0.1
-Synopsis:    Haskell binding to ROOT Hist modules
-Description:         HROOT is a haskell Foreign Function Interface (FFI) binding to ROOT. ROOT(http://root.cern.ch) is an object-oriented program and library developed by CERN for physics data analysis.
-Homepage:       http://ianwookim.org/HROOT
-license: LGPL-2.1
-license-file: LICENSE
-Author:              Ian-Woo Kim
-Maintainer:  Ian-Woo Kim <ianwookim@gmail.com>
-Category:       Graphics, Statistics, Math, Numerical
-Tested-with:    GHC >= 7.6
-Build-Type:  Custom
-cabal-version:  >=1.10
+Cabal-version: 3.0
+Name:          HROOT-hist
+Version:       0.10.0.1
+Synopsis:      Haskell binding to ROOT Hist modules
+Description:
+  HROOT is a haskell Foreign Function Interface (FFI) binding to ROOT.
+  ROOT(http://root.cern.ch) is an object-oriented program and library
+  developed by CERN for physics data analysis.
+Homepage:      https://wavewave.github.io/HROOT
+license:       LGPL-2.1-or-later
+license-file:  LICENSE
+Author:        Ian-Woo Kim
+Maintainer:    Ian-Woo Kim <ianwookim@gmail.com>
+Category:      Graphics, Statistics, Math, Numerical
+Tested-with:   GHC == 9.0.2 || == 9.2.4 || == 9.4.2 
 Extra-source-files:
-                       Config.hs
-                       csrc/HROOTHistTAxis.h
-                       csrc/HROOTHistTF1.h
-                       csrc/HROOTHistTFitResult.h
-                       csrc/HROOTHistTFitResultPtr.h
-                       csrc/HROOTHistTGraph.h
-                       csrc/HROOTHistTGraphAsymmErrors.h
-                       csrc/HROOTHistTGraphBentErrors.h
-                       csrc/HROOTHistTGraphErrors.h
-                       csrc/HROOTHistTH1.h
-                       csrc/HROOTHistTH1C.h
-                       csrc/HROOTHistTH1D.h
-                       csrc/HROOTHistTH1F.h
-                       csrc/HROOTHistTH1I.h
-                       csrc/HROOTHistTH1K.h
-                       csrc/HROOTHistTH1S.h
-                       csrc/HROOTHistTH2.h
-                       csrc/HROOTHistTH2C.h
-                       csrc/HROOTHistTH2D.h
-                       csrc/HROOTHistTH2F.h
-                       csrc/HROOTHistTH2I.h
-                       csrc/HROOTHistTH2Poly.h
-                       csrc/HROOTHistTH2S.h
-                       csrc/HROOTHistTH3.h
-                       csrc/HROOTHistTH3C.h
-                       csrc/HROOTHistTH3D.h
-                       csrc/HROOTHistTH3F.h
-                       csrc/HROOTHistTH3I.h
-                       csrc/HROOTHistTH3S.h
-                       csrc/HROOTHistTHStack.h
-                       csrc/HROOTHistTAxis.cpp
-                       csrc/HROOTHistTF1.cpp
-                       csrc/HROOTHistTFitResult.cpp
-                       csrc/HROOTHistTFitResultPtr.cpp
-                       csrc/HROOTHistTGraph.cpp
-                       csrc/HROOTHistTGraphAsymmErrors.cpp
-                       csrc/HROOTHistTGraphBentErrors.cpp
-                       csrc/HROOTHistTGraphErrors.cpp
-                       csrc/HROOTHistTH1.cpp
-                       csrc/HROOTHistTH1C.cpp
-                       csrc/HROOTHistTH1D.cpp
-                       csrc/HROOTHistTH1F.cpp
-                       csrc/HROOTHistTH1I.cpp
-                       csrc/HROOTHistTH1K.cpp
-                       csrc/HROOTHistTH1S.cpp
-                       csrc/HROOTHistTH2.cpp
-                       csrc/HROOTHistTH2C.cpp
-                       csrc/HROOTHistTH2D.cpp
-                       csrc/HROOTHistTH2F.cpp
-                       csrc/HROOTHistTH2I.cpp
-                       csrc/HROOTHistTH2Poly.cpp
-                       csrc/HROOTHistTH2S.cpp
-                       csrc/HROOTHistTH3.cpp
-                       csrc/HROOTHistTH3C.cpp
-                       csrc/HROOTHistTH3D.cpp
-                       csrc/HROOTHistTH3F.cpp
-                       csrc/HROOTHistTH3I.cpp
-                       csrc/HROOTHistTH3S.cpp
-                       csrc/HROOTHistTHStack.cpp
-
-
+  CHANGES
+  csrc/HROOTHistTAxis.h
+  csrc/HROOTHistTF1.h
+  csrc/HROOTHistTFitResult.h
+  csrc/HROOTHistTFitResultPtr.h
+  csrc/HROOTHistTGraph.h
+  csrc/HROOTHistTGraph2D.h
+  csrc/HROOTHistTGraphAsymmErrors.h
+  csrc/HROOTHistTGraphBentErrors.h
+  csrc/HROOTHistTGraphErrors.h
+  csrc/HROOTHistTH1.h
+  csrc/HROOTHistTH1C.h
+  csrc/HROOTHistTH1D.h
+  csrc/HROOTHistTH1F.h
+  csrc/HROOTHistTH1I.h
+  csrc/HROOTHistTH1K.h
+  csrc/HROOTHistTH1S.h
+  csrc/HROOTHistTH2.h
+  csrc/HROOTHistTH2C.h
+  csrc/HROOTHistTH2D.h
+  csrc/HROOTHistTH2F.h
+  csrc/HROOTHistTH2I.h
+  csrc/HROOTHistTH2Poly.h
+  csrc/HROOTHistTH2S.h
+  csrc/HROOTHistTH3.h
+  csrc/HROOTHistTH3C.h
+  csrc/HROOTHistTH3D.h
+  csrc/HROOTHistTH3F.h
+  csrc/HROOTHistTH3I.h
+  csrc/HROOTHistTH3S.h
+  csrc/HROOTHistTHStack.h
+  csrc/HROOTHistTMultiGraph.h
+  csrc/HROOTHistTAxis.cpp
+  csrc/HROOTHistTF1.cpp
+  csrc/HROOTHistTFitResult.cpp
+  csrc/HROOTHistTFitResultPtr.cpp
+  csrc/HROOTHistTGraph.cpp
+  csrc/HROOTHistTGraph2D.cpp
+  csrc/HROOTHistTGraphAsymmErrors.cpp
+  csrc/HROOTHistTGraphBentErrors.cpp
+  csrc/HROOTHistTGraphErrors.cpp
+  csrc/HROOTHistTH1.cpp
+  csrc/HROOTHistTH1C.cpp
+  csrc/HROOTHistTH1D.cpp
+  csrc/HROOTHistTH1F.cpp
+  csrc/HROOTHistTH1I.cpp
+  csrc/HROOTHistTH1K.cpp
+  csrc/HROOTHistTH1S.cpp
+  csrc/HROOTHistTH2.cpp
+  csrc/HROOTHistTH2C.cpp
+  csrc/HROOTHistTH2D.cpp
+  csrc/HROOTHistTH2F.cpp
+  csrc/HROOTHistTH2I.cpp
+  csrc/HROOTHistTH2Poly.cpp
+  csrc/HROOTHistTH2S.cpp
+  csrc/HROOTHistTH3.cpp
+  csrc/HROOTHistTH3C.cpp
+  csrc/HROOTHistTH3D.cpp
+  csrc/HROOTHistTH3F.cpp
+  csrc/HROOTHistTH3I.cpp
+  csrc/HROOTHistTH3S.cpp
+  csrc/HROOTHistTHStack.cpp
+  csrc/HROOTHistTMultiGraph.cpp
+Build-Type: Custom
+custom-setup
+  setup-depends: Cabal < 4, base > 4 && < 5, process
 
+Source-repository head
+  type:     git
+  location: https://github.com/wavewave/HROOT
 
 Library
   default-language: Haskell2010
   hs-source-dirs: src
   ghc-options:  -Wall -funbox-strict-fields -fno-warn-unused-do-bind -fno-warn-orphans -fno-warn-unused-imports
-  ghc-prof-options: -caf-all -auto-all
-  cc-options: -std=c++14
-  Build-Depends:      base>4 && < 5, fficxx >= 0.3, fficxx-runtime >= 0.3, template-haskell,HROOT-core
+  cxx-options: -std=c++17
+  Build-Depends: base > 4 && < 5, fficxx >= 0.7, fficxx-runtime >= 0.7, template-haskell, stdcxx, HROOT-core == 0.10.0.1
   Exposed-Modules:
                        HROOT.Hist
+                       HROOT.Hist.Ordinary
+                       HROOT.Hist.Template
+                       HROOT.Hist.TH
                        HROOT.Hist.TAxis
                        HROOT.Hist.TF1
                        HROOT.Hist.TFitResult
                        HROOT.Hist.TFitResultPtr
                        HROOT.Hist.TGraph
+                       HROOT.Hist.TGraph2D
                        HROOT.Hist.TGraphAsymmErrors
                        HROOT.Hist.TGraphBentErrors
                        HROOT.Hist.TGraphErrors
@@ -113,11 +126,13 @@
                        HROOT.Hist.TH3I
                        HROOT.Hist.TH3S
                        HROOT.Hist.THStack
+                       HROOT.Hist.TMultiGraph
                        HROOT.Hist.TAxis.RawType
                        HROOT.Hist.TF1.RawType
                        HROOT.Hist.TFitResult.RawType
                        HROOT.Hist.TFitResultPtr.RawType
                        HROOT.Hist.TGraph.RawType
+                       HROOT.Hist.TGraph2D.RawType
                        HROOT.Hist.TGraphAsymmErrors.RawType
                        HROOT.Hist.TGraphBentErrors.RawType
                        HROOT.Hist.TGraphErrors.RawType
@@ -142,11 +157,13 @@
                        HROOT.Hist.TH3I.RawType
                        HROOT.Hist.TH3S.RawType
                        HROOT.Hist.THStack.RawType
+                       HROOT.Hist.TMultiGraph.RawType
                        HROOT.Hist.TAxis.FFI
                        HROOT.Hist.TF1.FFI
                        HROOT.Hist.TFitResult.FFI
                        HROOT.Hist.TFitResultPtr.FFI
                        HROOT.Hist.TGraph.FFI
+                       HROOT.Hist.TGraph2D.FFI
                        HROOT.Hist.TGraphAsymmErrors.FFI
                        HROOT.Hist.TGraphBentErrors.FFI
                        HROOT.Hist.TGraphErrors.FFI
@@ -171,11 +188,13 @@
                        HROOT.Hist.TH3I.FFI
                        HROOT.Hist.TH3S.FFI
                        HROOT.Hist.THStack.FFI
+                       HROOT.Hist.TMultiGraph.FFI
                        HROOT.Hist.TAxis.Interface
                        HROOT.Hist.TF1.Interface
                        HROOT.Hist.TFitResult.Interface
                        HROOT.Hist.TFitResultPtr.Interface
                        HROOT.Hist.TGraph.Interface
+                       HROOT.Hist.TGraph2D.Interface
                        HROOT.Hist.TGraphAsymmErrors.Interface
                        HROOT.Hist.TGraphBentErrors.Interface
                        HROOT.Hist.TGraphErrors.Interface
@@ -200,11 +219,13 @@
                        HROOT.Hist.TH3I.Interface
                        HROOT.Hist.TH3S.Interface
                        HROOT.Hist.THStack.Interface
+                       HROOT.Hist.TMultiGraph.Interface
                        HROOT.Hist.TAxis.Cast
                        HROOT.Hist.TF1.Cast
                        HROOT.Hist.TFitResult.Cast
                        HROOT.Hist.TFitResultPtr.Cast
                        HROOT.Hist.TGraph.Cast
+                       HROOT.Hist.TGraph2D.Cast
                        HROOT.Hist.TGraphAsymmErrors.Cast
                        HROOT.Hist.TGraphBentErrors.Cast
                        HROOT.Hist.TGraphErrors.Cast
@@ -229,11 +250,13 @@
                        HROOT.Hist.TH3I.Cast
                        HROOT.Hist.TH3S.Cast
                        HROOT.Hist.THStack.Cast
+                       HROOT.Hist.TMultiGraph.Cast
                        HROOT.Hist.TAxis.Implementation
                        HROOT.Hist.TF1.Implementation
                        HROOT.Hist.TFitResult.Implementation
                        HROOT.Hist.TFitResultPtr.Implementation
                        HROOT.Hist.TGraph.Implementation
+                       HROOT.Hist.TGraph2D.Implementation
                        HROOT.Hist.TGraphAsymmErrors.Implementation
                        HROOT.Hist.TGraphBentErrors.Implementation
                        HROOT.Hist.TGraphErrors.Implementation
@@ -258,12 +281,12 @@
                        HROOT.Hist.TH3I.Implementation
                        HROOT.Hist.TH3S.Implementation
                        HROOT.Hist.THStack.Implementation
-
+                       HROOT.Hist.TMultiGraph.Implementation
   Other-Modules:
-
   extra-lib-dirs: 
-  extra-libraries:    stdc++ 
+  extra-libraries:    
   Include-dirs:       csrc 
+  pkgconfig-depends: 
   Install-includes:
                        HROOT-histType.h
                        HROOTHistTAxis.h
@@ -271,6 +294,7 @@
                        HROOTHistTFitResult.h
                        HROOTHistTFitResultPtr.h
                        HROOTHistTGraph.h
+                       HROOTHistTGraph2D.h
                        HROOTHistTGraphAsymmErrors.h
                        HROOTHistTGraphBentErrors.h
                        HROOTHistTGraphErrors.h
@@ -295,13 +319,14 @@
                        HROOTHistTH3I.h
                        HROOTHistTH3S.h
                        HROOTHistTHStack.h
-
-  C-sources:
+                       HROOTHistTMultiGraph.h
+  Cxx-sources:
                        csrc/HROOTHistTAxis.cpp
                        csrc/HROOTHistTF1.cpp
                        csrc/HROOTHistTFitResult.cpp
                        csrc/HROOTHistTFitResultPtr.cpp
                        csrc/HROOTHistTGraph.cpp
+                       csrc/HROOTHistTGraph2D.cpp
                        csrc/HROOTHistTGraphAsymmErrors.cpp
                        csrc/HROOTHistTGraphBentErrors.cpp
                        csrc/HROOTHistTGraphErrors.cpp
@@ -326,5 +351,5 @@
                        csrc/HROOTHistTH3I.cpp
                        csrc/HROOTHistTH3S.cpp
                        csrc/HROOTHistTHStack.cpp
-
+                       csrc/HROOTHistTMultiGraph.cpp
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,502 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,27 @@
+import Distribution.Simple
+import Distribution.Simple.Setup
+import Distribution.PackageDescription
+import Distribution.Simple.LocalBuildInfo
+import Config
+
+myconfigHook = simpleUserHooks { confHook = hookfunction }
+
+hookfunction x y = do
+  binfo <- confHook simpleUserHooks x y
+  r_pbi <- config binfo
+  let pkg_descr = localPkgDescr binfo
+
+  let newbinfo = case r_pbi of
+                   Just pbi ->  binfo { localPkgDescr = updatePackageDescription pbi pkg_descr }
+                   Nothing -> do
+                     let r_lib = library pkg_descr
+                     case r_lib of
+                       Just lib ->
+                         let binfo2 = libBuildInfo lib
+                             newlib = lib { libBuildInfo = binfo2 { cSources = [] }}
+                          in  binfo { localPkgDescr = pkg_descr { library = Just newlib }}
+                       Nothing -> error "some library setting is wrong."
+--   putStrLn (show (localPkgDescr newbinfo))
+  return newbinfo
+
+main = defaultMainWithHooks myconfigHook
diff --git a/Setup.lhs b/Setup.lhs
deleted file mode 100644
--- a/Setup.lhs
+++ /dev/null
@@ -1,33 +0,0 @@
-#! /usr/bin/env runhaskell
-  
-> import Distribution.Simple
-> import Distribution.Simple.Setup
-> import Distribution.PackageDescription
-> import Distribution.Simple.LocalBuildInfo
->
-> import Config
->
-> myconfigHook = simpleUserHooks { confHook = hookfunction } 
->
-> hookfunction x y = do 
->   binfo <- confHook simpleUserHooks x y 
->   r_pbi <- config binfo
->   let pkg_descr = localPkgDescr binfo
->   
->   let newbinfo = case r_pbi of 
->                    Just pbi ->  binfo { localPkgDescr = updatePackageDescription pbi pkg_descr }
->                    Nothing -> do 
->                      let r_lib = library pkg_descr 
->                      case r_lib of
->                        Just lib ->  
->                          let binfo2 = libBuildInfo lib
->                              newlib = lib { libBuildInfo = binfo2 { cSources = [] }}  
->                          in  binfo { localPkgDescr = pkg_descr { library = Just newlib }}  
->                        Nothing -> error "some library setting is wrong." 
-> --   putStrLn (show (localPkgDescr newbinfo))
->   return newbinfo
->  
->
-> main = defaultMainWithHooks myconfigHook
->
-
diff --git a/csrc/HROOT-histType.h b/csrc/HROOT-histType.h
--- a/csrc/HROOT-histType.h
+++ b/csrc/HROOT-histType.h
@@ -1,186 +1,72 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__
-#define __HROOT_HIST__
-
-// Opaque type definition for TAxis 
-typedef struct TAxis_tag TAxis_t; 
-typedef TAxis_t * TAxis_p; 
-typedef TAxis_t const* const_TAxis_p; 
-
-
-// Opaque type definition for TF1 
-typedef struct TF1_tag TF1_t; 
-typedef TF1_t * TF1_p; 
-typedef TF1_t const* const_TF1_p; 
-
-
-// Opaque type definition for TFitResult 
-typedef struct TFitResult_tag TFitResult_t; 
-typedef TFitResult_t * TFitResult_p; 
-typedef TFitResult_t const* const_TFitResult_p; 
-
-
-// Opaque type definition for TFitResultPtr 
-typedef struct TFitResultPtr_tag TFitResultPtr_t; 
-typedef TFitResultPtr_t * TFitResultPtr_p; 
-typedef TFitResultPtr_t const* const_TFitResultPtr_p; 
-
-
-// Opaque type definition for TGraph 
-typedef struct TGraph_tag TGraph_t; 
-typedef TGraph_t * TGraph_p; 
-typedef TGraph_t const* const_TGraph_p; 
-
-
-// Opaque type definition for TGraphAsymmErrors 
-typedef struct TGraphAsymmErrors_tag TGraphAsymmErrors_t; 
-typedef TGraphAsymmErrors_t * TGraphAsymmErrors_p; 
-typedef TGraphAsymmErrors_t const* const_TGraphAsymmErrors_p; 
-
-
-// Opaque type definition for TGraphBentErrors 
-typedef struct TGraphBentErrors_tag TGraphBentErrors_t; 
-typedef TGraphBentErrors_t * TGraphBentErrors_p; 
-typedef TGraphBentErrors_t const* const_TGraphBentErrors_p; 
-
-
-// Opaque type definition for TGraphErrors 
-typedef struct TGraphErrors_tag TGraphErrors_t; 
-typedef TGraphErrors_t * TGraphErrors_p; 
-typedef TGraphErrors_t const* const_TGraphErrors_p; 
-
-
-// Opaque type definition for TH1 
-typedef struct TH1_tag TH1_t; 
-typedef TH1_t * TH1_p; 
-typedef TH1_t const* const_TH1_p; 
-
-
-// Opaque type definition for TH1C 
-typedef struct TH1C_tag TH1C_t; 
-typedef TH1C_t * TH1C_p; 
-typedef TH1C_t const* const_TH1C_p; 
-
-
-// Opaque type definition for TH1D 
-typedef struct TH1D_tag TH1D_t; 
-typedef TH1D_t * TH1D_p; 
-typedef TH1D_t const* const_TH1D_p; 
-
-
-// Opaque type definition for TH1F 
-typedef struct TH1F_tag TH1F_t; 
-typedef TH1F_t * TH1F_p; 
-typedef TH1F_t const* const_TH1F_p; 
-
-
-// Opaque type definition for TH1I 
-typedef struct TH1I_tag TH1I_t; 
-typedef TH1I_t * TH1I_p; 
-typedef TH1I_t const* const_TH1I_p; 
-
-
-// Opaque type definition for TH1K 
-typedef struct TH1K_tag TH1K_t; 
-typedef TH1K_t * TH1K_p; 
-typedef TH1K_t const* const_TH1K_p; 
-
-
-// Opaque type definition for TH1S 
-typedef struct TH1S_tag TH1S_t; 
-typedef TH1S_t * TH1S_p; 
-typedef TH1S_t const* const_TH1S_p; 
-
-
-// Opaque type definition for TH2 
-typedef struct TH2_tag TH2_t; 
-typedef TH2_t * TH2_p; 
-typedef TH2_t const* const_TH2_p; 
-
-
-// Opaque type definition for TH2C 
-typedef struct TH2C_tag TH2C_t; 
-typedef TH2C_t * TH2C_p; 
-typedef TH2C_t const* const_TH2C_p; 
-
-
-// Opaque type definition for TH2D 
-typedef struct TH2D_tag TH2D_t; 
-typedef TH2D_t * TH2D_p; 
-typedef TH2D_t const* const_TH2D_p; 
-
-
-// Opaque type definition for TH2F 
-typedef struct TH2F_tag TH2F_t; 
-typedef TH2F_t * TH2F_p; 
-typedef TH2F_t const* const_TH2F_p; 
-
-
-// Opaque type definition for TH2I 
-typedef struct TH2I_tag TH2I_t; 
-typedef TH2I_t * TH2I_p; 
-typedef TH2I_t const* const_TH2I_p; 
-
-
-// Opaque type definition for TH2Poly 
-typedef struct TH2Poly_tag TH2Poly_t; 
-typedef TH2Poly_t * TH2Poly_p; 
-typedef TH2Poly_t const* const_TH2Poly_p; 
-
-
-// Opaque type definition for TH2S 
-typedef struct TH2S_tag TH2S_t; 
-typedef TH2S_t * TH2S_p; 
-typedef TH2S_t const* const_TH2S_p; 
-
-
-// Opaque type definition for TH3 
-typedef struct TH3_tag TH3_t; 
-typedef TH3_t * TH3_p; 
-typedef TH3_t const* const_TH3_p; 
-
-
-// Opaque type definition for TH3C 
-typedef struct TH3C_tag TH3C_t; 
-typedef TH3C_t * TH3C_p; 
-typedef TH3C_t const* const_TH3C_p; 
-
-
-// Opaque type definition for TH3D 
-typedef struct TH3D_tag TH3D_t; 
-typedef TH3D_t * TH3D_p; 
-typedef TH3D_t const* const_TH3D_p; 
-
-
-// Opaque type definition for TH3F 
-typedef struct TH3F_tag TH3F_t; 
-typedef TH3F_t * TH3F_p; 
-typedef TH3F_t const* const_TH3F_p; 
-
-
-// Opaque type definition for TH3I 
-typedef struct TH3I_tag TH3I_t; 
-typedef TH3I_t * TH3I_p; 
-typedef TH3I_t const* const_TH3I_p; 
-
-
-// Opaque type definition for TH3S 
-typedef struct TH3S_tag TH3S_t; 
-typedef TH3S_t * TH3S_p; 
-typedef TH3S_t const* const_TH3S_p; 
-
-
-// Opaque type definition for THStack 
-typedef struct THStack_tag THStack_t; 
-typedef THStack_t * THStack_p; 
-typedef THStack_t const* const_THStack_p; 
-
-
-#endif // __HROOT_HIST__
+#pragma once
 
+// Opaque type definition for $classname
+typedef struct TAxis_tag TAxis_t;typedef TAxis_t * TAxis_p;typedef TAxis_t const* const_TAxis_p;
+// Opaque type definition for $classname
+typedef struct TF1_tag TF1_t;typedef TF1_t * TF1_p;typedef TF1_t const* const_TF1_p;
+// Opaque type definition for $classname
+typedef struct TFitResult_tag TFitResult_t;typedef TFitResult_t * TFitResult_p;typedef TFitResult_t const* const_TFitResult_p;
+// Opaque type definition for $classname
+typedef struct TFitResultPtr_tag TFitResultPtr_t;typedef TFitResultPtr_t * TFitResultPtr_p;typedef TFitResultPtr_t const* const_TFitResultPtr_p;
+// Opaque type definition for $classname
+typedef struct TGraph_tag TGraph_t;typedef TGraph_t * TGraph_p;typedef TGraph_t const* const_TGraph_p;
+// Opaque type definition for $classname
+typedef struct TGraph2D_tag TGraph2D_t;typedef TGraph2D_t * TGraph2D_p;typedef TGraph2D_t const* const_TGraph2D_p;
+// Opaque type definition for $classname
+typedef struct TGraphAsymmErrors_tag TGraphAsymmErrors_t;typedef TGraphAsymmErrors_t * TGraphAsymmErrors_p;typedef TGraphAsymmErrors_t const* const_TGraphAsymmErrors_p;
+// Opaque type definition for $classname
+typedef struct TGraphBentErrors_tag TGraphBentErrors_t;typedef TGraphBentErrors_t * TGraphBentErrors_p;typedef TGraphBentErrors_t const* const_TGraphBentErrors_p;
+// Opaque type definition for $classname
+typedef struct TGraphErrors_tag TGraphErrors_t;typedef TGraphErrors_t * TGraphErrors_p;typedef TGraphErrors_t const* const_TGraphErrors_p;
+// Opaque type definition for $classname
+typedef struct TH1_tag TH1_t;typedef TH1_t * TH1_p;typedef TH1_t const* const_TH1_p;
+// Opaque type definition for $classname
+typedef struct TH1C_tag TH1C_t;typedef TH1C_t * TH1C_p;typedef TH1C_t const* const_TH1C_p;
+// Opaque type definition for $classname
+typedef struct TH1D_tag TH1D_t;typedef TH1D_t * TH1D_p;typedef TH1D_t const* const_TH1D_p;
+// Opaque type definition for $classname
+typedef struct TH1F_tag TH1F_t;typedef TH1F_t * TH1F_p;typedef TH1F_t const* const_TH1F_p;
+// Opaque type definition for $classname
+typedef struct TH1I_tag TH1I_t;typedef TH1I_t * TH1I_p;typedef TH1I_t const* const_TH1I_p;
+// Opaque type definition for $classname
+typedef struct TH1K_tag TH1K_t;typedef TH1K_t * TH1K_p;typedef TH1K_t const* const_TH1K_p;
+// Opaque type definition for $classname
+typedef struct TH1S_tag TH1S_t;typedef TH1S_t * TH1S_p;typedef TH1S_t const* const_TH1S_p;
+// Opaque type definition for $classname
+typedef struct TH2_tag TH2_t;typedef TH2_t * TH2_p;typedef TH2_t const* const_TH2_p;
+// Opaque type definition for $classname
+typedef struct TH2C_tag TH2C_t;typedef TH2C_t * TH2C_p;typedef TH2C_t const* const_TH2C_p;
+// Opaque type definition for $classname
+typedef struct TH2D_tag TH2D_t;typedef TH2D_t * TH2D_p;typedef TH2D_t const* const_TH2D_p;
+// Opaque type definition for $classname
+typedef struct TH2F_tag TH2F_t;typedef TH2F_t * TH2F_p;typedef TH2F_t const* const_TH2F_p;
+// Opaque type definition for $classname
+typedef struct TH2I_tag TH2I_t;typedef TH2I_t * TH2I_p;typedef TH2I_t const* const_TH2I_p;
+// Opaque type definition for $classname
+typedef struct TH2Poly_tag TH2Poly_t;typedef TH2Poly_t * TH2Poly_p;typedef TH2Poly_t const* const_TH2Poly_p;
+// Opaque type definition for $classname
+typedef struct TH2S_tag TH2S_t;typedef TH2S_t * TH2S_p;typedef TH2S_t const* const_TH2S_p;
+// Opaque type definition for $classname
+typedef struct TH3_tag TH3_t;typedef TH3_t * TH3_p;typedef TH3_t const* const_TH3_p;
+// Opaque type definition for $classname
+typedef struct TH3C_tag TH3C_t;typedef TH3C_t * TH3C_p;typedef TH3C_t const* const_TH3C_p;
+// Opaque type definition for $classname
+typedef struct TH3D_tag TH3D_t;typedef TH3D_t * TH3D_p;typedef TH3D_t const* const_TH3D_p;
+// Opaque type definition for $classname
+typedef struct TH3F_tag TH3F_t;typedef TH3F_t * TH3F_p;typedef TH3F_t const* const_TH3F_p;
+// Opaque type definition for $classname
+typedef struct TH3I_tag TH3I_t;typedef TH3I_t * TH3I_p;typedef TH3I_t const* const_TH3I_p;
+// Opaque type definition for $classname
+typedef struct TH3S_tag TH3S_t;typedef TH3S_t * TH3S_p;typedef TH3S_t const* const_TH3S_p;
+// Opaque type definition for $classname
+typedef struct THStack_tag THStack_t;typedef THStack_t * THStack_p;typedef THStack_t const* const_THStack_p;
+// Opaque type definition for $classname
+typedef struct TMultiGraph_tag TMultiGraph_t;typedef TMultiGraph_t * TMultiGraph_p;typedef TMultiGraph_t const* const_TMultiGraph_p;
 #ifdef __cplusplus
 }
 #endif
diff --git a/csrc/HROOTHistTAxis.cpp b/csrc/HROOTHistTAxis.cpp
--- a/csrc/HROOTHistTAxis.cpp
+++ b/csrc/HROOTHistTAxis.cpp
@@ -1,25 +1,30 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
+#include "HROOTCoreTArrayD.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttAxis.h"
+
 #include "TAxis.h"
-#include "HROOTHistTAxis.h"
 
+#include "HROOTHistTAxis.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TNAMED_DEF_VIRT(TAxis)
 TATTAXIS_DEF_VIRT(TAxis)
 TOBJECT_DEF_VIRT(TAxis)
 DELETABLE_DEF_VIRT(TAxis)
-
 TAXIS_DEF_VIRT(TAxis)
-
 TAXIS_DEF_NONVIRT(TAxis)
+TAXIS_DEF_ACCESSOR(TAxis)
 
diff --git a/csrc/HROOTHistTAxis.h b/csrc/HROOTHistTAxis.h
--- a/csrc/HROOTHistTAxis.h
+++ b/csrc/HROOTHistTAxis.h
@@ -1,98 +1,139 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TAxis__
-#define __HROOT_HIST__TAxis__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttAxis.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef TAXIS_DECL_VIRT 
+
 #define TAXIS_DECL_VIRT(Type) \
-int Type ## _findBinTAxis ( Type ## _p p, double x ); \
-int Type ## _findFixBinTAxis ( Type ## _p p, double x ); \
-double Type ## _getBinCenterTAxis ( Type ## _p p, int bin ); \
-double Type ## _GetBinCenterLog ( Type ## _p p, int bin ); \
-double Type ## _GetBinUpEdge ( Type ## _p p, int bin ); \
-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 )
+int Type##_findBinTAxis ( Type##_p p, double x );\
+int Type##_findFixBinTAxis ( Type##_p p, double x );\
+double Type##_getBinCenterTAxis ( Type##_p p, int bin );\
+double Type##_GetBinCenterLog ( Type##_p p, int bin );\
+double Type##_GetBinUpEdge ( Type##_p p, int bin );\
+void Type##_SetLimits ( Type##_p p, double xmin, double xmax );\
+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 TAXIS_DECL_NONVIRT 
+
 #define TAXIS_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTAxis ( int nbins, double xmin, double xmax ); \
-int Type ## _tAxisGetCenterLabels ( Type ## _p p ); \
-int Type ## _tAxisGetCenterTitle ( Type ## _p p )
+Type##_p Type##_newTAxis ( int nbins, double xmin, double xmax );\
+bool Type##_tAxis_GetCenterLabels ( Type##_p p );\
+bool Type##_tAxis_GetCenterTitle ( Type##_p p );\
+int Type##_tAxis_GetFirst ( Type##_p p );\
+int Type##_tAxis_GetLast ( Type##_p p );\
+int Type##_tAxis_GetNbins ( Type##_p p );\
+TArrayD_p Type##_tAxis_GetXbins ( Type##_p p );\
+double Type##_tAxis_GetXmax ( Type##_p p );\
+double Type##_tAxis_GetXmin ( Type##_p p );
 
-#undef TAXIS_DEF_VIRT
-#define TAXIS_DEF_VIRT(Type)\
-int Type ## _findBinTAxis ( Type ## _p p, double x )\
-{\
-return TYPECASTMETHOD(Type,findBinTAxis,TAxis)(p)->FindBin(x);\
+
+#define TAXIS_DECL_ACCESSOR(Type) \
+
+
+
+#define TAXIS_DEF_VIRT(Type) \
+int Type##_findBinTAxis ( Type##_p p, double x ) {\
+return ((TYPECASTMETHOD(Type, findBinTAxis, TAxis))(p))->FindBin(x);\
 }\
-int Type ## _findFixBinTAxis ( Type ## _p p, double x )\
-{\
-return TYPECASTMETHOD(Type,findFixBinTAxis,TAxis)(p)->FindFixBin(x);\
+\
+int Type##_findFixBinTAxis ( Type##_p p, double x ) {\
+return ((TYPECASTMETHOD(Type, findFixBinTAxis, TAxis))(p))->FindFixBin(x);\
 }\
-double Type ## _getBinCenterTAxis ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,getBinCenterTAxis,TAxis)(p)->GetBinCenter(bin);\
+\
+double Type##_getBinCenterTAxis ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, getBinCenterTAxis, TAxis))(p))->GetBinCenter(bin);\
 }\
-double Type ## _GetBinCenterLog ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetBinCenterLog,TAxis)(p)->GetBinCenterLog(bin);\
+\
+double Type##_GetBinCenterLog ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetBinCenterLog, TAxis))(p))->GetBinCenterLog(bin);\
 }\
-double Type ## _GetBinUpEdge ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetBinUpEdge,TAxis)(p)->GetBinUpEdge(bin);\
+\
+double Type##_GetBinUpEdge ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetBinUpEdge, TAxis))(p))->GetBinUpEdge(bin);\
 }\
-void Type ## _SetTimeDisplay ( Type ## _p p, int value )\
-{\
-TYPECASTMETHOD(Type,SetTimeDisplay,TAxis)(p)->SetTimeDisplay(value);\
+\
+void Type##_SetLimits ( Type##_p p, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, SetLimits, TAxis))(p))->SetLimits(xmin, xmax);\
 }\
-void Type ## _SetTimeFormat ( Type ## _p p, const char* format )\
-{\
-TYPECASTMETHOD(Type,SetTimeFormat,TAxis)(p)->SetTimeFormat(format);\
+\
+void Type##_SetTimeDisplay ( Type##_p p, int value ) {\
+((TYPECASTMETHOD(Type, SetTimeDisplay, TAxis))(p))->SetTimeDisplay(value);\
 }\
-void Type ## _SetTimeOffset ( Type ## _p p, double toffset, const char* option )\
-{\
-TYPECASTMETHOD(Type,SetTimeOffset,TAxis)(p)->SetTimeOffset(toffset, option);\
+\
+void Type##_SetTimeFormat ( Type##_p p, const char* format ) {\
+((TYPECASTMETHOD(Type, SetTimeFormat, TAxis))(p))->SetTimeFormat(format);\
+}\
+\
+void Type##_SetTimeOffset ( Type##_p p, double toffset, const char* option ) {\
+((TYPECASTMETHOD(Type, SetTimeOffset, TAxis))(p))->SetTimeOffset(toffset, option);\
 }
 
-#undef TAXIS_DEF_NONVIRT
-#define TAXIS_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTAxis ( int nbins, double xmin, double xmax )\
-{\
-Type * newp = new Type (nbins, xmin, xmax); \
-return to_nonconst<Type ## _t, Type >(newp);\
+
+#define TAXIS_DEF_NONVIRT(Type) \
+Type##_p Type##_newTAxis ( int nbins, double xmin, double xmax ) {\
+Type* newp=new Type(nbins, xmin, xmax);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
 }\
-int Type ## _tAxisGetCenterLabels ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tAxisGetCenterLabels,TAxis)(p)->GetCenterLabels();\
+\
+bool Type##_tAxis_GetCenterLabels ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetCenterLabels, TAxis))(p))->GetCenterLabels();\
 }\
-int Type ## _tAxisGetCenterTitle ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tAxisGetCenterTitle,TAxis)(p)->GetCenterTitle();\
+\
+bool Type##_tAxis_GetCenterTitle ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetCenterTitle, TAxis))(p))->GetCenterTitle();\
+}\
+\
+int Type##_tAxis_GetFirst ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetFirst, TAxis))(p))->GetFirst();\
+}\
+\
+int Type##_tAxis_GetLast ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetLast, TAxis))(p))->GetLast();\
+}\
+\
+int Type##_tAxis_GetNbins ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetNbins, TAxis))(p))->GetNbins();\
+}\
+\
+TArrayD_p Type##_tAxis_GetXbins ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TArrayD_t, TArrayD>((TArrayD*)((TYPECASTMETHOD(Type, tAxis_GetXbins, TAxis))(p))->GetXbins());\
+}\
+\
+double Type##_tAxis_GetXmax ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetXmax, TAxis))(p))->GetXmax();\
+}\
+\
+double Type##_tAxis_GetXmin ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tAxis_GetXmin, TAxis))(p))->GetXmin();\
 }
 
-TNAMED_DECL_VIRT(TAxis);
-TATTAXIS_DECL_VIRT(TAxis);
-TOBJECT_DECL_VIRT(TAxis);
-DELETABLE_DECL_VIRT(TAxis);
 
+#define TAXIS_DEF_ACCESSOR(Type) \
 
-TAXIS_DECL_VIRT(TAxis);
 
 
-TAXIS_DECL_NONVIRT(TAxis);
-
-
-#endif // __HROOT_HIST__TAxis__
+TNAMED_DECL_VIRT(TAxis)
+TATTAXIS_DECL_VIRT(TAxis)
+TOBJECT_DECL_VIRT(TAxis)
+DELETABLE_DECL_VIRT(TAxis)
+TAXIS_DECL_VIRT(TAxis)
+TAXIS_DECL_NONVIRT(TAxis)
+TAXIS_DECL_ACCESSOR(TAxis)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTF1.cpp b/csrc/HROOTHistTF1.cpp
--- a/csrc/HROOTHistTF1.cpp
+++ b/csrc/HROOTHistTF1.cpp
@@ -1,29 +1,36 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTCoreTObject.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTHistTAxis.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "TF1.h"
-#include "HROOTHistTF1.h"
 
+#include "HROOTHistTF1.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TATTLINE_DEF_VIRT(TF1)
 TATTFILL_DEF_VIRT(TF1)
 TATTMARKER_DEF_VIRT(TF1)
 DELETABLE_DEF_VIRT(TF1)
-
 TF1_DEF_VIRT(TF1)
-
 TF1_DEF_NONVIRT(TF1)
+TF1_DEF_ACCESSOR(TF1)
 
diff --git a/csrc/HROOTHistTF1.h b/csrc/HROOTHistTF1.h
--- a/csrc/HROOTHistTF1.h
+++ b/csrc/HROOTHistTF1.h
@@ -1,358 +1,364 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TF1__
-#define __HROOT_HIST__TF1__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef TF1_DECL_VIRT 
+
 #define TF1_DECL_VIRT(Type) \
-double Type ## _Derivative ( Type ## _p p, double x, double * params, double epsilon ); \
-double Type ## _Derivative2 ( Type ## _p p, double x, double * params, double epsilon ); \
-double Type ## _Derivative3 ( Type ## _p p, double x, double * params, double epsilon ); \
-Type ## _p Type ## _drawCopyTF1 ( Type ## _p p, const char* option ); \
-TObject_p Type ## _DrawDerivative ( Type ## _p p, const char* option ); \
-TObject_p Type ## _DrawIntegral ( Type ## _p p, const char* option ); \
-void Type ## _FixParameter ( Type ## _p p, int ipar, double value ); \
-double Type ## _getMaximumTF1 ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx ); \
-double Type ## _getMinimumTF1 ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx ); \
-double Type ## _GetMaximumX ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx ); \
-double Type ## _GetMinimumX ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx ); \
-int Type ## _GetNDF ( Type ## _p p ); \
-int Type ## _GetNpx ( Type ## _p p ); \
-int Type ## _GetNumberFreeParameters ( Type ## _p p ); \
-int Type ## _GetNumberFitPoints ( Type ## _p p ); \
-double Type ## _GetParError ( Type ## _p p, int ipar ); \
-double Type ## _GetProb ( Type ## _p p ); \
-int Type ## _getQuantilesTF1 ( Type ## _p p, int nprobSum, double * q, double * probSum ); \
-double Type ## _getRandomTF1 ( Type ## _p p, double xmin, double xmax ); \
-double Type ## _GetSave ( Type ## _p p, double * x ); \
-double Type ## _GetX ( Type ## _p p, double y, double xmin, double xmax, double epsilon, int maxiter ); \
-double Type ## _GetXmin ( Type ## _p p ); \
-double Type ## _GetXmax ( Type ## _p p ); \
-double Type ## _GradientPar ( Type ## _p p, int ipar, double * x, double eps ); \
-void Type ## _InitArgs ( Type ## _p p, double * x, double * params ); \
-double Type ## _IntegralTF1 ( Type ## _p p, double a, double b, double epsilon ); \
-double Type ## _IntegralError ( Type ## _p p, double a, double b, double * params, double * covmat, double epsilon ); \
-double Type ## _IntegralFast ( Type ## _p p, int num, double * x, double * w, double a, double b, double * params, double epsilon ); \
-int Type ## _IsInside ( Type ## _p p, double * x ); \
-void Type ## _ReleaseParameter ( Type ## _p p, int ipar ); \
-void Type ## _SetChisquare ( Type ## _p p, double chi2 ); \
-void Type ## _setMaximumTF1 ( Type ## _p p, double maximum ); \
-void Type ## _setMinimumTF1 ( Type ## _p p, double minimum ); \
-void Type ## _SetNDF ( Type ## _p p, int ndf ); \
-void Type ## _SetNumberFitPoints ( Type ## _p p, int npfits ); \
-void Type ## _SetNpx ( Type ## _p p, int npx ); \
-void Type ## _SetParError ( Type ## _p p, int ipar, double error ); \
-void Type ## _SetParErrors ( Type ## _p p, double * errors ); \
-void Type ## _SetParLimits ( Type ## _p p, int ipar, double parmin, double parmax ); \
-void Type ## _SetParent ( Type ## _p p, TObject_p parent ); \
-void Type ## _setRange1 ( Type ## _p p, double xmin, double xmax ); \
-void Type ## _setRange2 ( Type ## _p p, double xmin, double xmax, double ymin, double ymax ); \
-void Type ## _setRange3 ( Type ## _p p, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax ); \
-void Type ## _SetSavedPoint ( Type ## _p p, int point, double value ); \
-double Type ## _Moment ( Type ## _p p, double n, double a, double b, double * params, double epsilon ); \
-double Type ## _CentralMoment ( Type ## _p p, double n, double a, double b, double * params, double epsilon ); \
-double Type ## _Mean ( Type ## _p p, double a, double b, double * params, double epsilon ); \
-double Type ## _Variance ( Type ## _p p, double a, double b, double * params, double epsilon )
+double Type##_Derivative ( Type##_p p, double x, double* params, double epsilon );\
+double Type##_Derivative2 ( Type##_p p, double x, double* params, double epsilon );\
+double Type##_Derivative3 ( Type##_p p, double x, double* params, double epsilon );\
+Type##_p Type##_drawCopyTF1 ( Type##_p p, const char* option );\
+TObject_p Type##_DrawDerivative ( Type##_p p, const char* option );\
+TObject_p Type##_DrawIntegral ( Type##_p p, const char* option );\
+void Type##_FixParameter ( Type##_p p, int ipar, double value );\
+double Type##_getMaximumTF1 ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx );\
+double Type##_getMinimumTF1 ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx );\
+double Type##_GetMaximumX ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx );\
+double Type##_GetMinimumX ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx );\
+int Type##_GetNDF ( Type##_p p );\
+int Type##_GetNpx ( Type##_p p );\
+int Type##_GetNumberFreeParameters ( Type##_p p );\
+int Type##_GetNumberFitPoints ( Type##_p p );\
+double Type##_GetParError ( Type##_p p, int ipar );\
+double Type##_GetProb ( Type##_p p );\
+int Type##_getQuantilesTF1 ( Type##_p p, int nprobSum, double* q, double* probSum );\
+double Type##_getRandomTF1 ( Type##_p p, double xmin, double xmax );\
+double Type##_GetSave ( Type##_p p, double* x );\
+double Type##_GetX ( Type##_p p, double y, double xmin, double xmax, double epsilon, int maxiter );\
+double Type##_GetXmin ( Type##_p p );\
+double Type##_GetXmax ( Type##_p p );\
+double Type##_GradientPar ( Type##_p p, int ipar, double* x, double eps );\
+void Type##_InitArgs ( Type##_p p, double* x, double* params );\
+double Type##_IntegralTF1 ( Type##_p p, double a, double b, double epsilon );\
+double Type##_IntegralError ( Type##_p p, double a, double b, double* params, double* covmat, double epsilon );\
+double Type##_IntegralFast ( Type##_p p, int num, double* x, double* w, double a, double b, double* params, double epsilon );\
+bool Type##_IsInside ( Type##_p p, double* x );\
+void Type##_ReleaseParameter ( Type##_p p, int ipar );\
+void Type##_SetChisquare ( Type##_p p, double chi2 );\
+void Type##_setMaximumTF1 ( Type##_p p, double maximum );\
+void Type##_setMinimumTF1 ( Type##_p p, double minimum );\
+void Type##_SetNDF ( Type##_p p, int ndf );\
+void Type##_SetNumberFitPoints ( Type##_p p, int npfits );\
+void Type##_SetNpx ( Type##_p p, int npx );\
+void Type##_SetParError ( Type##_p p, int ipar, double error );\
+void Type##_SetParErrors ( Type##_p p, double* errors );\
+void Type##_SetParLimits ( Type##_p p, int ipar, double parmin, double parmax );\
+void Type##_SetParent ( Type##_p p, TObject_p parent );\
+void Type##_setRange1 ( Type##_p p, double xmin, double xmax );\
+void Type##_setRange2 ( Type##_p p, double xmin, double xmax, double ymin, double ymax );\
+void Type##_setRange3 ( Type##_p p, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax );\
+void Type##_SetSavedPoint ( Type##_p p, int point, double value );\
+double Type##_Moment ( Type##_p p, double n, double a, double b, double* params, double epsilon );\
+double Type##_CentralMoment ( Type##_p p, double n, double a, double b, double* params, double epsilon );\
+double Type##_Mean ( Type##_p p, double a, double b, double* params, double epsilon );\
+double Type##_Variance ( Type##_p p, double a, double b, double* params, double epsilon );
 
-#undef TF1_DECL_NONVIRT 
+
 #define TF1_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTF1 ( const char* name, const char* formula, double xmin, double xmax ); \
-double Type ## _tF1DerivativeError (  ); \
-double Type ## _tF1GetChisquare ( Type ## _p p ); \
-TH1_p Type ## _tF1GetHistogram ( Type ## _p p ); \
-TObject_p Type ## _tF1GetParent ( Type ## _p p ); \
-TAxis_p Type ## _tF1GetXaxis ( Type ## _p p ); \
-TAxis_p Type ## _tF1GetYaxis ( Type ## _p p ); \
-TAxis_p Type ## _tF1GetZaxis ( Type ## _p p ); \
-void Type ## _tF1InitStandardFunctions (  ); \
-TF1_p Type ## _tF1GetCurrent (  ); \
-void Type ## _tF1AbsValue ( int reject ); \
-void Type ## _tF1RejectPoint ( int reject ); \
-int Type ## _tF1RejectedPoint (  ); \
-void Type ## _tF1SetCurrent ( TF1_p f1 ); \
-void Type ## _tF1CalcGaussLegendreSamplingPoints ( int num, double * x, double * w, double eps )
+Type##_p Type##_newTF1 ( const char* name, const char* formula, double xmin, double xmax );\
+double Type##_tF1_DerivativeError (  );\
+double Type##_tF1_GetChisquare ( Type##_p p );\
+TH1_p Type##_tF1_GetHistogram ( Type##_p p );\
+TObject_p Type##_tF1_GetParent ( Type##_p p );\
+TAxis_p Type##_tF1_GetXaxis ( Type##_p p );\
+TAxis_p Type##_tF1_GetYaxis ( Type##_p p );\
+TAxis_p Type##_tF1_GetZaxis ( Type##_p p );\
+void Type##_tF1_InitStandardFunctions (  );\
+TF1_p Type##_tF1_GetCurrent (  );\
+void Type##_tF1_AbsValue ( bool reject );\
+void Type##_tF1_RejectPoint ( bool reject );\
+bool Type##_tF1_RejectedPoint (  );\
+void Type##_tF1_SetCurrent ( TF1_p f1 );\
+void Type##_tF1_CalcGaussLegendreSamplingPoints ( int num, double* x, double* w, double eps );
 
-#undef TF1_DEF_VIRT
-#define TF1_DEF_VIRT(Type)\
-double Type ## _Derivative ( Type ## _p p, double x, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,Derivative,TF1)(p)->Derivative(x, params, epsilon);\
+
+#define TF1_DECL_ACCESSOR(Type) \
+
+
+
+#define TF1_DEF_VIRT(Type) \
+double Type##_Derivative ( Type##_p p, double x, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, Derivative, TF1))(p))->Derivative(x, params, epsilon);\
 }\
-double Type ## _Derivative2 ( Type ## _p p, double x, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,Derivative2,TF1)(p)->Derivative2(x, params, epsilon);\
+\
+double Type##_Derivative2 ( Type##_p p, double x, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, Derivative2, TF1))(p))->Derivative2(x, params, epsilon);\
 }\
-double Type ## _Derivative3 ( Type ## _p p, double x, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,Derivative3,TF1)(p)->Derivative3(x, params, epsilon);\
+\
+double Type##_Derivative3 ( Type##_p p, double x, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, Derivative3, TF1))(p))->Derivative3(x, params, epsilon);\
 }\
-Type ## _p Type ## _drawCopyTF1 ( Type ## _p p, const char* option )\
-{\
-return to_nonconst<Type ## _t, Type>((Type *)TYPECASTMETHOD(Type,drawCopyTF1,TF1)(p)->DrawCopy(option)) ;\
+\
+Type##_p Type##_drawCopyTF1 ( Type##_p p, const char* option ) {\
+return from_nonconst_to_nonconst<Type##_t, Type>((Type*)((TYPECASTMETHOD(Type, drawCopyTF1, TF1))(p))->DrawCopy(option));\
 }\
-TObject_p Type ## _DrawDerivative ( Type ## _p p, const char* option )\
-{\
-return to_nonconst<TObject_t,TObject>((TObject*)TYPECASTMETHOD(Type,DrawDerivative,TF1)(p)->DrawDerivative(option));\
+\
+TObject_p Type##_DrawDerivative ( Type##_p p, const char* option ) {\
+return from_nonconst_to_nonconst<TObject_t, TObject>((TObject*)((TYPECASTMETHOD(Type, DrawDerivative, TF1))(p))->DrawDerivative(option));\
 }\
-TObject_p Type ## _DrawIntegral ( Type ## _p p, const char* option )\
-{\
-return to_nonconst<TObject_t,TObject>((TObject*)TYPECASTMETHOD(Type,DrawIntegral,TF1)(p)->DrawIntegral(option));\
+\
+TObject_p Type##_DrawIntegral ( Type##_p p, const char* option ) {\
+return from_nonconst_to_nonconst<TObject_t, TObject>((TObject*)((TYPECASTMETHOD(Type, DrawIntegral, TF1))(p))->DrawIntegral(option));\
 }\
-void Type ## _FixParameter ( Type ## _p p, int ipar, double value )\
-{\
-TYPECASTMETHOD(Type,FixParameter,TF1)(p)->FixParameter(ipar, value);\
+\
+void Type##_FixParameter ( Type##_p p, int ipar, double value ) {\
+((TYPECASTMETHOD(Type, FixParameter, TF1))(p))->FixParameter(ipar, value);\
 }\
-double Type ## _getMaximumTF1 ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx )\
-{\
-return TYPECASTMETHOD(Type,getMaximumTF1,TF1)(p)->GetMaximum(xmin, xmax, epsilon, maxiter, logx);\
+\
+double Type##_getMaximumTF1 ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx ) {\
+return ((TYPECASTMETHOD(Type, getMaximumTF1, TF1))(p))->GetMaximum(xmin, xmax, epsilon, maxiter, logx);\
 }\
-double Type ## _getMinimumTF1 ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx )\
-{\
-return TYPECASTMETHOD(Type,getMinimumTF1,TF1)(p)->GetMinimum(xmin, xmax, epsilon, maxiter, logx);\
+\
+double Type##_getMinimumTF1 ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx ) {\
+return ((TYPECASTMETHOD(Type, getMinimumTF1, TF1))(p))->GetMinimum(xmin, xmax, epsilon, maxiter, logx);\
 }\
-double Type ## _GetMaximumX ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx )\
-{\
-return TYPECASTMETHOD(Type,GetMaximumX,TF1)(p)->GetMaximumX(xmin, xmax, epsilon, maxiter, logx);\
+\
+double Type##_GetMaximumX ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx ) {\
+return ((TYPECASTMETHOD(Type, GetMaximumX, TF1))(p))->GetMaximumX(xmin, xmax, epsilon, maxiter, logx);\
 }\
-double Type ## _GetMinimumX ( Type ## _p p, double xmin, double xmax, double epsilon, double maxiter, int logx )\
-{\
-return TYPECASTMETHOD(Type,GetMinimumX,TF1)(p)->GetMinimumX(xmin, xmax, epsilon, maxiter, logx);\
+\
+double Type##_GetMinimumX ( Type##_p p, double xmin, double xmax, double epsilon, double maxiter, bool logx ) {\
+return ((TYPECASTMETHOD(Type, GetMinimumX, TF1))(p))->GetMinimumX(xmin, xmax, epsilon, maxiter, logx);\
 }\
-int Type ## _GetNDF ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNDF,TF1)(p)->GetNDF();\
+\
+int Type##_GetNDF ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNDF, TF1))(p))->GetNDF();\
 }\
-int Type ## _GetNpx ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNpx,TF1)(p)->GetNpx();\
+\
+int Type##_GetNpx ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNpx, TF1))(p))->GetNpx();\
 }\
-int Type ## _GetNumberFreeParameters ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNumberFreeParameters,TF1)(p)->GetNumberFreeParameters();\
+\
+int Type##_GetNumberFreeParameters ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNumberFreeParameters, TF1))(p))->GetNumberFreeParameters();\
 }\
-int Type ## _GetNumberFitPoints ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNumberFitPoints,TF1)(p)->GetNumberFitPoints();\
+\
+int Type##_GetNumberFitPoints ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNumberFitPoints, TF1))(p))->GetNumberFitPoints();\
 }\
-double Type ## _GetParError ( Type ## _p p, int ipar )\
-{\
-return TYPECASTMETHOD(Type,GetParError,TF1)(p)->GetParError(ipar);\
+\
+double Type##_GetParError ( Type##_p p, int ipar ) {\
+return ((TYPECASTMETHOD(Type, GetParError, TF1))(p))->GetParError(ipar);\
 }\
-double Type ## _GetProb ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetProb,TF1)(p)->GetProb();\
+\
+double Type##_GetProb ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetProb, TF1))(p))->GetProb();\
 }\
-int Type ## _getQuantilesTF1 ( Type ## _p p, int nprobSum, double * q, double * probSum )\
-{\
-return TYPECASTMETHOD(Type,getQuantilesTF1,TF1)(p)->GetQuantiles(nprobSum, q, probSum);\
+\
+int Type##_getQuantilesTF1 ( Type##_p p, int nprobSum, double* q, double* probSum ) {\
+return ((TYPECASTMETHOD(Type, getQuantilesTF1, TF1))(p))->GetQuantiles(nprobSum, q, probSum);\
 }\
-double Type ## _getRandomTF1 ( Type ## _p p, double xmin, double xmax )\
-{\
-return TYPECASTMETHOD(Type,getRandomTF1,TF1)(p)->GetRandom(xmin, xmax);\
+\
+double Type##_getRandomTF1 ( Type##_p p, double xmin, double xmax ) {\
+return ((TYPECASTMETHOD(Type, getRandomTF1, TF1))(p))->GetRandom(xmin, xmax);\
 }\
-double Type ## _GetSave ( Type ## _p p, double * x )\
-{\
-return TYPECASTMETHOD(Type,GetSave,TF1)(p)->GetSave(x);\
+\
+double Type##_GetSave ( Type##_p p, double* x ) {\
+return ((TYPECASTMETHOD(Type, GetSave, TF1))(p))->GetSave(x);\
 }\
-double Type ## _GetX ( Type ## _p p, double y, double xmin, double xmax, double epsilon, int maxiter )\
-{\
-return TYPECASTMETHOD(Type,GetX,TF1)(p)->GetX(y, xmin, xmax, epsilon, maxiter);\
+\
+double Type##_GetX ( Type##_p p, double y, double xmin, double xmax, double epsilon, int maxiter ) {\
+return ((TYPECASTMETHOD(Type, GetX, TF1))(p))->GetX(y, xmin, xmax, epsilon, maxiter);\
 }\
-double Type ## _GetXmin ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetXmin,TF1)(p)->GetXmin();\
+\
+double Type##_GetXmin ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetXmin, TF1))(p))->GetXmin();\
 }\
-double Type ## _GetXmax ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetXmax,TF1)(p)->GetXmax();\
+\
+double Type##_GetXmax ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetXmax, TF1))(p))->GetXmax();\
 }\
-double Type ## _GradientPar ( Type ## _p p, int ipar, double * x, double eps )\
-{\
-return TYPECASTMETHOD(Type,GradientPar,TF1)(p)->GradientPar(ipar, x, eps);\
+\
+double Type##_GradientPar ( Type##_p p, int ipar, double* x, double eps ) {\
+return ((TYPECASTMETHOD(Type, GradientPar, TF1))(p))->GradientPar(ipar, x, eps);\
 }\
-void Type ## _InitArgs ( Type ## _p p, double * x, double * params )\
-{\
-TYPECASTMETHOD(Type,InitArgs,TF1)(p)->InitArgs(x, params);\
+\
+void Type##_InitArgs ( Type##_p p, double* x, double* params ) {\
+((TYPECASTMETHOD(Type, InitArgs, TF1))(p))->InitArgs(x, params);\
 }\
-double Type ## _IntegralTF1 ( Type ## _p p, double a, double b, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,IntegralTF1,TF1)(p)->Integral(a, b, epsilon);\
+\
+double Type##_IntegralTF1 ( Type##_p p, double a, double b, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, IntegralTF1, TF1))(p))->Integral(a, b, epsilon);\
 }\
-double Type ## _IntegralError ( Type ## _p p, double a, double b, double * params, double * covmat, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,IntegralError,TF1)(p)->IntegralError(a, b, params, covmat, epsilon);\
+\
+double Type##_IntegralError ( Type##_p p, double a, double b, double* params, double* covmat, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, IntegralError, TF1))(p))->IntegralError(a, b, params, covmat, epsilon);\
 }\
-double Type ## _IntegralFast ( Type ## _p p, int num, double * x, double * w, double a, double b, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,IntegralFast,TF1)(p)->IntegralFast(num, x, w, a, b, params, epsilon);\
+\
+double Type##_IntegralFast ( Type##_p p, int num, double* x, double* w, double a, double b, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, IntegralFast, TF1))(p))->IntegralFast(num, x, w, a, b, params, epsilon);\
 }\
-int Type ## _IsInside ( Type ## _p p, double * x )\
-{\
-return TYPECASTMETHOD(Type,IsInside,TF1)(p)->IsInside(x);\
+\
+bool Type##_IsInside ( Type##_p p, double* x ) {\
+return ((TYPECASTMETHOD(Type, IsInside, TF1))(p))->IsInside(x);\
 }\
-void Type ## _ReleaseParameter ( Type ## _p p, int ipar )\
-{\
-TYPECASTMETHOD(Type,ReleaseParameter,TF1)(p)->ReleaseParameter(ipar);\
+\
+void Type##_ReleaseParameter ( Type##_p p, int ipar ) {\
+((TYPECASTMETHOD(Type, ReleaseParameter, TF1))(p))->ReleaseParameter(ipar);\
 }\
-void Type ## _SetChisquare ( Type ## _p p, double chi2 )\
-{\
-TYPECASTMETHOD(Type,SetChisquare,TF1)(p)->SetChisquare(chi2);\
+\
+void Type##_SetChisquare ( Type##_p p, double chi2 ) {\
+((TYPECASTMETHOD(Type, SetChisquare, TF1))(p))->SetChisquare(chi2);\
 }\
-void Type ## _setMaximumTF1 ( Type ## _p p, double maximum )\
-{\
-TYPECASTMETHOD(Type,setMaximumTF1,TF1)(p)->SetMaximum(maximum);\
+\
+void Type##_setMaximumTF1 ( Type##_p p, double maximum ) {\
+((TYPECASTMETHOD(Type, setMaximumTF1, TF1))(p))->SetMaximum(maximum);\
 }\
-void Type ## _setMinimumTF1 ( Type ## _p p, double minimum )\
-{\
-TYPECASTMETHOD(Type,setMinimumTF1,TF1)(p)->SetMinimum(minimum);\
+\
+void Type##_setMinimumTF1 ( Type##_p p, double minimum ) {\
+((TYPECASTMETHOD(Type, setMinimumTF1, TF1))(p))->SetMinimum(minimum);\
 }\
-void Type ## _SetNDF ( Type ## _p p, int ndf )\
-{\
-TYPECASTMETHOD(Type,SetNDF,TF1)(p)->SetNDF(ndf);\
+\
+void Type##_SetNDF ( Type##_p p, int ndf ) {\
+((TYPECASTMETHOD(Type, SetNDF, TF1))(p))->SetNDF(ndf);\
 }\
-void Type ## _SetNumberFitPoints ( Type ## _p p, int npfits )\
-{\
-TYPECASTMETHOD(Type,SetNumberFitPoints,TF1)(p)->SetNumberFitPoints(npfits);\
+\
+void Type##_SetNumberFitPoints ( Type##_p p, int npfits ) {\
+((TYPECASTMETHOD(Type, SetNumberFitPoints, TF1))(p))->SetNumberFitPoints(npfits);\
 }\
-void Type ## _SetNpx ( Type ## _p p, int npx )\
-{\
-TYPECASTMETHOD(Type,SetNpx,TF1)(p)->SetNpx(npx);\
+\
+void Type##_SetNpx ( Type##_p p, int npx ) {\
+((TYPECASTMETHOD(Type, SetNpx, TF1))(p))->SetNpx(npx);\
 }\
-void Type ## _SetParError ( Type ## _p p, int ipar, double error )\
-{\
-TYPECASTMETHOD(Type,SetParError,TF1)(p)->SetParError(ipar, error);\
+\
+void Type##_SetParError ( Type##_p p, int ipar, double error ) {\
+((TYPECASTMETHOD(Type, SetParError, TF1))(p))->SetParError(ipar, error);\
 }\
-void Type ## _SetParErrors ( Type ## _p p, double * errors )\
-{\
-TYPECASTMETHOD(Type,SetParErrors,TF1)(p)->SetParErrors(errors);\
+\
+void Type##_SetParErrors ( Type##_p p, double* errors ) {\
+((TYPECASTMETHOD(Type, SetParErrors, TF1))(p))->SetParErrors(errors);\
 }\
-void Type ## _SetParLimits ( Type ## _p p, int ipar, double parmin, double parmax )\
-{\
-TYPECASTMETHOD(Type,SetParLimits,TF1)(p)->SetParLimits(ipar, parmin, parmax);\
+\
+void Type##_SetParLimits ( Type##_p p, int ipar, double parmin, double parmax ) {\
+((TYPECASTMETHOD(Type, SetParLimits, TF1))(p))->SetParLimits(ipar, parmin, parmax);\
 }\
-void Type ## _SetParent ( Type ## _p p, TObject_p parent )\
-{\
-TYPECASTMETHOD(Type,SetParent,TF1)(p)->SetParent(to_nonconst<TObject,TObject_t>(parent));\
+\
+void Type##_SetParent ( Type##_p p, TObject_p parent ) {\
+((TYPECASTMETHOD(Type, SetParent, TF1))(p))->SetParent(from_nonconst_to_nonconst<TObject, TObject_t>(parent));\
 }\
-void Type ## _setRange1 ( Type ## _p p, double xmin, double xmax )\
-{\
-TYPECASTMETHOD(Type,setRange1,TF1)(p)->SetRange(xmin, xmax);\
+\
+void Type##_setRange1 ( Type##_p p, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, setRange1, TF1))(p))->SetRange(xmin, xmax);\
 }\
-void Type ## _setRange2 ( Type ## _p p, double xmin, double xmax, double ymin, double ymax )\
-{\
-TYPECASTMETHOD(Type,setRange2,TF1)(p)->SetRange(xmin, xmax, ymin, ymax);\
+\
+void Type##_setRange2 ( Type##_p p, double xmin, double xmax, double ymin, double ymax ) {\
+((TYPECASTMETHOD(Type, setRange2, TF1))(p))->SetRange(xmin, xmax, ymin, ymax);\
 }\
-void Type ## _setRange3 ( Type ## _p p, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax )\
-{\
-TYPECASTMETHOD(Type,setRange3,TF1)(p)->SetRange(xmin, xmax, ymin, ymax, zmin, zmax);\
+\
+void Type##_setRange3 ( Type##_p p, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax ) {\
+((TYPECASTMETHOD(Type, setRange3, TF1))(p))->SetRange(xmin, xmax, ymin, ymax, zmin, zmax);\
 }\
-void Type ## _SetSavedPoint ( Type ## _p p, int point, double value )\
-{\
-TYPECASTMETHOD(Type,SetSavedPoint,TF1)(p)->SetSavedPoint(point, value);\
+\
+void Type##_SetSavedPoint ( Type##_p p, int point, double value ) {\
+((TYPECASTMETHOD(Type, SetSavedPoint, TF1))(p))->SetSavedPoint(point, value);\
 }\
-double Type ## _Moment ( Type ## _p p, double n, double a, double b, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,Moment,TF1)(p)->Moment(n, a, b, params, epsilon);\
+\
+double Type##_Moment ( Type##_p p, double n, double a, double b, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, Moment, TF1))(p))->Moment(n, a, b, params, epsilon);\
 }\
-double Type ## _CentralMoment ( Type ## _p p, double n, double a, double b, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,CentralMoment,TF1)(p)->CentralMoment(n, a, b, params, epsilon);\
+\
+double Type##_CentralMoment ( Type##_p p, double n, double a, double b, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, CentralMoment, TF1))(p))->CentralMoment(n, a, b, params, epsilon);\
 }\
-double Type ## _Mean ( Type ## _p p, double a, double b, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,Mean,TF1)(p)->Mean(a, b, params, epsilon);\
+\
+double Type##_Mean ( Type##_p p, double a, double b, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, Mean, TF1))(p))->Mean(a, b, params, epsilon);\
 }\
-double Type ## _Variance ( Type ## _p p, double a, double b, double * params, double epsilon )\
-{\
-return TYPECASTMETHOD(Type,Variance,TF1)(p)->Variance(a, b, params, epsilon);\
+\
+double Type##_Variance ( Type##_p p, double a, double b, double* params, double epsilon ) {\
+return ((TYPECASTMETHOD(Type, Variance, TF1))(p))->Variance(a, b, params, epsilon);\
 }
 
-#undef TF1_DEF_NONVIRT
-#define TF1_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTF1 ( const char* name, const char* formula, double xmin, double xmax )\
-{\
-Type * newp = new Type (name, formula, xmin, xmax); \
-return to_nonconst<Type ## _t, Type >(newp);\
+
+#define TF1_DEF_NONVIRT(Type) \
+Type##_p Type##_newTF1 ( const char* name, const char* formula, double xmin, double xmax ) {\
+Type* newp=new Type(name, formula, xmin, xmax);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
 }\
-double Type ## _tF1DerivativeError (  )\
-{\
+\
+double Type##_tF1_DerivativeError (  ) {\
 return TF1::DerivativeError();\
 }\
-double Type ## _tF1GetChisquare ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tF1GetChisquare,TF1)(p)->GetChisquare();\
+\
+double Type##_tF1_GetChisquare ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tF1_GetChisquare, TF1))(p))->GetChisquare();\
 }\
-TH1_p Type ## _tF1GetHistogram ( Type ## _p p )\
-{\
-return to_nonconst<TH1_t,TH1>((TH1*)TYPECASTMETHOD(Type,tF1GetHistogram,TF1)(p)->GetHistogram());\
+\
+TH1_p Type##_tF1_GetHistogram ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TH1_t, TH1>((TH1*)((TYPECASTMETHOD(Type, tF1_GetHistogram, TF1))(p))->GetHistogram());\
 }\
-TObject_p Type ## _tF1GetParent ( Type ## _p p )\
-{\
-return to_nonconst<TObject_t,TObject>((TObject*)TYPECASTMETHOD(Type,tF1GetParent,TF1)(p)->GetParent());\
+\
+TObject_p Type##_tF1_GetParent ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TObject_t, TObject>((TObject*)((TYPECASTMETHOD(Type, tF1_GetParent, TF1))(p))->GetParent());\
 }\
-TAxis_p Type ## _tF1GetXaxis ( Type ## _p p )\
-{\
-return to_nonconst<TAxis_t,TAxis>((TAxis*)TYPECASTMETHOD(Type,tF1GetXaxis,TF1)(p)->GetXaxis());\
+\
+TAxis_p Type##_tF1_GetXaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tF1_GetXaxis, TF1))(p))->GetXaxis());\
 }\
-TAxis_p Type ## _tF1GetYaxis ( Type ## _p p )\
-{\
-return to_nonconst<TAxis_t,TAxis>((TAxis*)TYPECASTMETHOD(Type,tF1GetYaxis,TF1)(p)->GetYaxis());\
+\
+TAxis_p Type##_tF1_GetYaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tF1_GetYaxis, TF1))(p))->GetYaxis());\
 }\
-TAxis_p Type ## _tF1GetZaxis ( Type ## _p p )\
-{\
-return to_nonconst<TAxis_t,TAxis>((TAxis*)TYPECASTMETHOD(Type,tF1GetZaxis,TF1)(p)->GetZaxis());\
+\
+TAxis_p Type##_tF1_GetZaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tF1_GetZaxis, TF1))(p))->GetZaxis());\
 }\
-void Type ## _tF1InitStandardFunctions (  )\
-{\
+\
+void Type##_tF1_InitStandardFunctions (  ) {\
 TF1::InitStandardFunctions();\
 }\
-TF1_p Type ## _tF1GetCurrent (  )\
-{\
-return to_nonconst<TF1_t,TF1>((TF1*)TF1::GetCurrent());\
+\
+TF1_p Type##_tF1_GetCurrent (  ) {\
+return from_nonconst_to_nonconst<TF1_t, TF1>((TF1*)TF1::GetCurrent());\
 }\
-void Type ## _tF1AbsValue ( int reject )\
-{\
+\
+void Type##_tF1_AbsValue ( bool reject ) {\
 TF1::AbsValue(reject);\
 }\
-void Type ## _tF1RejectPoint ( int reject )\
-{\
+\
+void Type##_tF1_RejectPoint ( bool reject ) {\
 TF1::RejectPoint(reject);\
 }\
-int Type ## _tF1RejectedPoint (  )\
-{\
+\
+bool Type##_tF1_RejectedPoint (  ) {\
 return TF1::RejectedPoint();\
 }\
-void Type ## _tF1SetCurrent ( TF1_p f1 )\
-{\
-TF1::SetCurrent(to_nonconst<TF1,TF1_t>(f1));\
+\
+void Type##_tF1_SetCurrent ( TF1_p f1 ) {\
+TF1::SetCurrent(from_nonconst_to_nonconst<TF1, TF1_t>(f1));\
 }\
-void Type ## _tF1CalcGaussLegendreSamplingPoints ( int num, double * x, double * w, double eps )\
-{\
+\
+void Type##_tF1_CalcGaussLegendreSamplingPoints ( int num, double* x, double* w, double eps ) {\
 TF1::CalcGaussLegendreSamplingPoints(num, x, w, eps);\
 }
 
-TATTLINE_DECL_VIRT(TF1);
-TATTFILL_DECL_VIRT(TF1);
-TATTMARKER_DECL_VIRT(TF1);
-DELETABLE_DECL_VIRT(TF1);
 
+#define TF1_DEF_ACCESSOR(Type) \
 
-TF1_DECL_VIRT(TF1);
 
 
-TF1_DECL_NONVIRT(TF1);
-
-
-#endif // __HROOT_HIST__TF1__
+TATTLINE_DECL_VIRT(TF1)
+TATTFILL_DECL_VIRT(TF1)
+TATTMARKER_DECL_VIRT(TF1)
+DELETABLE_DECL_VIRT(TF1)
+TF1_DECL_VIRT(TF1)
+TF1_DECL_NONVIRT(TF1)
+TF1_DECL_ACCESSOR(TF1)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTFitResult.cpp b/csrc/HROOTHistTFitResult.cpp
--- a/csrc/HROOTHistTFitResult.cpp
+++ b/csrc/HROOTHistTFitResult.cpp
@@ -1,23 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "TFitResult.h"
-#include "HROOTHistTFitResult.h"
 
+#include "HROOTHistTFitResult.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TNAMED_DEF_VIRT(TFitResult)
 TOBJECT_DEF_VIRT(TFitResult)
 DELETABLE_DEF_VIRT(TFitResult)
-
 TFITRESULT_DEF_VIRT(TFitResult)
-
 TFITRESULT_DEF_NONVIRT(TFitResult)
+TFITRESULT_DEF_ACCESSOR(TFitResult)
 
diff --git a/csrc/HROOTHistTFitResult.h b/csrc/HROOTHistTFitResult.h
--- a/csrc/HROOTHistTFitResult.h
+++ b/csrc/HROOTHistTFitResult.h
@@ -1,44 +1,52 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TFitResult__
-#define __HROOT_HIST__TFitResult__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef TFITRESULT_DECL_VIRT 
+
 #define TFITRESULT_DECL_VIRT(Type) \
 
 
-#undef TFITRESULT_DECL_NONVIRT 
+
 #define TFITRESULT_DECL_NONVIRT(Type) \
 
 
-#undef TFITRESULT_DEF_VIRT
-#define TFITRESULT_DEF_VIRT(Type)\
 
+#define TFITRESULT_DECL_ACCESSOR(Type) \
 
-#undef TFITRESULT_DEF_NONVIRT
-#define TFITRESULT_DEF_NONVIRT(Type)\
 
 
-TNAMED_DECL_VIRT(TFitResult);
-TOBJECT_DECL_VIRT(TFitResult);
-DELETABLE_DECL_VIRT(TFitResult);
+#define TFITRESULT_DEF_VIRT(Type) \
 
 
-TFITRESULT_DECL_VIRT(TFitResult);
 
+#define TFITRESULT_DEF_NONVIRT(Type) \
 
-TFITRESULT_DECL_NONVIRT(TFitResult);
 
 
-#endif // __HROOT_HIST__TFitResult__
+#define TFITRESULT_DEF_ACCESSOR(Type) \
+
+
+
+TNAMED_DECL_VIRT(TFitResult)
+TOBJECT_DECL_VIRT(TFitResult)
+DELETABLE_DECL_VIRT(TFitResult)
+TFITRESULT_DECL_VIRT(TFitResult)
+TFITRESULT_DECL_NONVIRT(TFitResult)
+TFITRESULT_DECL_ACCESSOR(TFitResult)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTFitResultPtr.cpp b/csrc/HROOTHistTFitResultPtr.cpp
--- a/csrc/HROOTHistTFitResultPtr.cpp
+++ b/csrc/HROOTHistTFitResultPtr.cpp
@@ -1,20 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTFitResult.h"
+
 #include "TFitResultPtr.h"
-#include "HROOTHistTFitResultPtr.h"
 
+#include "HROOTHistTFitResultPtr.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TFITRESULTPTR_DEF_VIRT(TFitResultPtr)
-
 TFITRESULTPTR_DEF_NONVIRT(TFitResultPtr)
+TFITRESULTPTR_DEF_ACCESSOR(TFitResultPtr)
 
diff --git a/csrc/HROOTHistTFitResultPtr.h b/csrc/HROOTHistTFitResultPtr.h
--- a/csrc/HROOTHistTFitResultPtr.h
+++ b/csrc/HROOTHistTFitResultPtr.h
@@ -1,41 +1,43 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TFitResultPtr__
-#define __HROOT_HIST__TFitResultPtr__
+#pragma once
 
+
 #include "HROOT-histType.h"
 
 
-#undef TFITRESULTPTR_DECL_VIRT 
 #define TFITRESULTPTR_DECL_VIRT(Type) \
 
 
-#undef TFITRESULTPTR_DECL_NONVIRT 
+
 #define TFITRESULTPTR_DECL_NONVIRT(Type) \
-TFitResult_p Type ## _tFitResultPtrGet ( Type ## _p p )
+TFitResult_p Type##_tFitResultPtr_Get ( Type##_p p );
 
-#undef TFITRESULTPTR_DEF_VIRT
-#define TFITRESULTPTR_DEF_VIRT(Type)\
 
+#define TFITRESULTPTR_DECL_ACCESSOR(Type) \
 
-#undef TFITRESULTPTR_DEF_NONVIRT
-#define TFITRESULTPTR_DEF_NONVIRT(Type)\
-TFitResult_p Type ## _tFitResultPtrGet ( Type ## _p p )\
-{\
-return to_nonconst<TFitResult_t,TFitResult>((TFitResult*)TYPECASTMETHOD(Type,tFitResultPtrGet,TFitResultPtr)(p)->Get());\
-}
 
 
+#define TFITRESULTPTR_DEF_VIRT(Type) \
 
-TFITRESULTPTR_DECL_VIRT(TFitResultPtr);
 
 
-TFITRESULTPTR_DECL_NONVIRT(TFitResultPtr);
+#define TFITRESULTPTR_DEF_NONVIRT(Type) \
+TFitResult_p Type##_tFitResultPtr_Get ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TFitResult_t, TFitResult>((TFitResult*)((TYPECASTMETHOD(Type, tFitResultPtr_Get, TFitResultPtr))(p))->Get());\
+}
 
 
-#endif // __HROOT_HIST__TFitResultPtr__
+#define TFITRESULTPTR_DEF_ACCESSOR(Type) \
+
+
+
+TFITRESULTPTR_DECL_VIRT(TFitResultPtr)
+TFITRESULTPTR_DECL_NONVIRT(TFitResultPtr)
+TFITRESULTPTR_DECL_ACCESSOR(TFitResultPtr)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTGraph.cpp b/csrc/HROOTHistTGraph.cpp
--- a/csrc/HROOTHistTGraph.cpp
+++ b/csrc/HROOTHistTGraph.cpp
@@ -1,23 +1,32 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTF1.h"
+
 #include "HROOTHistTH1F.h"
+
 #include "HROOTHistTAxis.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "TGraph.h"
-#include "HROOTHistTGraph.h"
 
+#include "HROOTHistTGraph.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TNAMED_DEF_VIRT(TGraph)
 TATTLINE_DEF_VIRT(TGraph)
@@ -25,8 +34,7 @@
 TATTMARKER_DEF_VIRT(TGraph)
 TOBJECT_DEF_VIRT(TGraph)
 DELETABLE_DEF_VIRT(TGraph)
-
 TGRAPH_DEF_VIRT(TGraph)
-
 TGRAPH_DEF_NONVIRT(TGraph)
+TGRAPH_DEF_ACCESSOR(TGraph)
 
diff --git a/csrc/HROOTHistTGraph.h b/csrc/HROOTHistTGraph.h
--- a/csrc/HROOTHistTGraph.h
+++ b/csrc/HROOTHistTGraph.h
@@ -1,267 +1,275 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TGraph__
-#define __HROOT_HIST__TGraph__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef TGRAPH_DECL_VIRT 
+
 #define TGRAPH_DECL_VIRT(Type) \
-void Type ## _Apply ( Type ## _p p, TF1_p f ); \
-double Type ## _Chisquare ( Type ## _p p, TF1_p f1 ); \
-void Type ## _DrawGraph ( Type ## _p p, int n, double * x, double * y, const char* option ); \
-void Type ## _drawPanelTGraph ( Type ## _p p ); \
-void Type ## _Expand ( Type ## _p p, int newsize, int step ); \
-void Type ## _FitPanelTGraph ( Type ## _p p ); \
-double Type ## _getCorrelationFactorTGraph ( Type ## _p p ); \
-double Type ## _getCovarianceTGraph ( Type ## _p p ); \
-double Type ## _getMeanTGraph ( Type ## _p p, int axis ); \
-double Type ## _getRMSTGraph ( Type ## _p p, int axis ); \
-double Type ## _GetErrorX ( Type ## _p p, int bin ); \
-double Type ## _GetErrorY ( Type ## _p p, int bin ); \
-double Type ## _GetErrorXhigh ( Type ## _p p, int bin ); \
-double Type ## _GetErrorXlow ( Type ## _p p, int bin ); \
-double Type ## _GetErrorYhigh ( Type ## _p p, int bin ); \
-double Type ## _GetErrorYlow ( Type ## _p p, int bin ); \
-void Type ## _InitExpo ( Type ## _p p, double xmin, double xmax ); \
-void Type ## _InitGaus ( Type ## _p p, double xmin, double xmax ); \
-void Type ## _InitPolynom ( Type ## _p p, double xmin, double xmax ); \
-int Type ## _InsertPoint ( Type ## _p p ); \
-double Type ## _integralTGraph ( Type ## _p p, int first, int last ); \
-int Type ## _IsEditable ( Type ## _p p ); \
-int Type ## _isInsideTGraph ( Type ## _p p, double x, double y ); \
-void Type ## _LeastSquareFit ( Type ## _p p, int m, double * a, double xmin, double xmax ); \
-void Type ## _PaintStats ( Type ## _p p, TF1_p fit ); \
-int Type ## _RemovePoint ( Type ## _p p, int ipoint ); \
-void Type ## _SetEditable ( Type ## _p p, int editable ); \
-void Type ## _SetHistogram ( Type ## _p p, TH1F_p h ); \
-void Type ## _setMaximumTGraph ( Type ## _p p, double maximum ); \
-void Type ## _setMinimumTGraph ( Type ## _p p, double minimum ); \
-void Type ## _Set ( Type ## _p p, int n ); \
-void Type ## _SetPoint ( Type ## _p p, int i, double x, double y )
+void Type##_Apply ( Type##_p p, TF1_p f );\
+double Type##_Chisquare ( Type##_p p, TF1_p f1 );\
+void Type##_DrawGraph ( Type##_p p, int n, double* x, double* y, const char* option );\
+void Type##_drawPanelTGraph ( Type##_p p );\
+void Type##_Expand ( Type##_p p, int newsize, int step );\
+void Type##_FitPanelTGraph ( Type##_p p );\
+double Type##_getCorrelationFactorTGraph ( Type##_p p );\
+double Type##_getCovarianceTGraph ( Type##_p p );\
+double Type##_getMeanTGraph ( Type##_p p, int axis );\
+double Type##_getRMSTGraph ( Type##_p p, int axis );\
+double Type##_GetErrorX ( Type##_p p, int bin );\
+double Type##_GetErrorY ( Type##_p p, int bin );\
+double Type##_GetErrorXhigh ( Type##_p p, int bin );\
+double Type##_GetErrorXlow ( Type##_p p, int bin );\
+double Type##_GetErrorYhigh ( Type##_p p, int bin );\
+double Type##_GetErrorYlow ( Type##_p p, int bin );\
+void Type##_InitExpo ( Type##_p p, double xmin, double xmax );\
+void Type##_InitGaus ( Type##_p p, double xmin, double xmax );\
+void Type##_InitPolynom ( Type##_p p, double xmin, double xmax );\
+int Type##_InsertPoint ( Type##_p p );\
+double Type##_integralTGraph ( Type##_p p, int first, int last );\
+bool Type##_IsEditable ( Type##_p p );\
+int Type##_isInsideTGraph ( Type##_p p, double x, double y );\
+void Type##_LeastSquareFit ( Type##_p p, int m, double* a, double xmin, double xmax );\
+void Type##_PaintStats ( Type##_p p, TF1_p fit );\
+int Type##_RemovePoint ( Type##_p p, int ipoint );\
+void Type##_SetEditable ( Type##_p p, bool editable );\
+void Type##_SetHistogram ( Type##_p p, TH1F_p h );\
+void Type##_setMaximumTGraph ( Type##_p p, double maximum );\
+void Type##_setMinimumTGraph ( Type##_p p, double minimum );\
+void Type##_Set ( Type##_p p, int n );\
+void Type##_SetPoint ( Type##_p p, int i, double x, double y );
 
-#undef TGRAPH_DECL_NONVIRT 
+
 #define TGRAPH_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTGraph ( int n, double * x, double * y ); \
-int Type ## _tGraphGetEditable ( Type ## _p p ); \
-TF1_p Type ## _tGraphGetFunction ( Type ## _p p, const char* name ); \
-TH1F_p Type ## _tGraphGetHistogram ( Type ## _p p ); \
-int Type ## _tGraphGetMaxSize ( Type ## _p p ); \
-int Type ## _tGraphGetN ( Type ## _p p ); \
-double Type ## _tGraphGetMaximum ( Type ## _p p ); \
-double Type ## _tGraphGetMinimum ( Type ## _p p ); \
-TAxis_p Type ## _tGraphGetXaxis ( Type ## _p p ); \
-TAxis_p Type ## _tGraphGetYaxis ( Type ## _p p ); \
-void Type ## _tGraphPaintGraph ( Type ## _p p, int npoints, double * x, double * y, const char* chopt ); \
-void Type ## _tGraphPaintGrapHist ( Type ## _p p, int npoints, double * x, double * y, const char* chopt )
+Type##_p Type##_newTGraph ( int n, double* x, double* y );\
+bool Type##_tGraph_GetEditable ( Type##_p p );\
+TF1_p Type##_tGraph_GetFunction ( Type##_p p, const char* name );\
+TH1F_p Type##_tGraph_GetHistogram ( Type##_p p );\
+int Type##_tGraph_GetMaxSize ( Type##_p p );\
+int Type##_tGraph_GetN ( Type##_p p );\
+double Type##_tGraph_GetMaximum ( Type##_p p );\
+double Type##_tGraph_GetMinimum ( Type##_p p );\
+TAxis_p Type##_tGraph_GetXaxis ( Type##_p p );\
+TAxis_p Type##_tGraph_GetYaxis ( Type##_p p );\
+void Type##_tGraph_PaintGraph ( Type##_p p, int npoints, double* x, double* y, const char* chopt );\
+void Type##_tGraph_PaintGrapHist ( Type##_p p, int npoints, double* x, double* y, const char* chopt );
 
-#undef TGRAPH_DEF_VIRT
-#define TGRAPH_DEF_VIRT(Type)\
-void Type ## _Apply ( Type ## _p p, TF1_p f )\
-{\
-TYPECASTMETHOD(Type,Apply,TGraph)(p)->Apply(to_nonconst<TF1,TF1_t>(f));\
+
+#define TGRAPH_DECL_ACCESSOR(Type) \
+
+
+
+#define TGRAPH_DEF_VIRT(Type) \
+void Type##_Apply ( Type##_p p, TF1_p f ) {\
+((TYPECASTMETHOD(Type, Apply, TGraph))(p))->Apply(from_nonconst_to_nonconst<TF1, TF1_t>(f));\
 }\
-double Type ## _Chisquare ( Type ## _p p, TF1_p f1 )\
-{\
-return TYPECASTMETHOD(Type,Chisquare,TGraph)(p)->Chisquare(to_nonconst<TF1,TF1_t>(f1));\
+\
+double Type##_Chisquare ( Type##_p p, TF1_p f1 ) {\
+return ((TYPECASTMETHOD(Type, Chisquare, TGraph))(p))->Chisquare(from_nonconst_to_nonconst<TF1, TF1_t>(f1));\
 }\
-void Type ## _DrawGraph ( Type ## _p p, int n, double * x, double * y, const char* option )\
-{\
-TYPECASTMETHOD(Type,DrawGraph,TGraph)(p)->DrawGraph(n, x, y, option);\
+\
+void Type##_DrawGraph ( Type##_p p, int n, double* x, double* y, const char* option ) {\
+((TYPECASTMETHOD(Type, DrawGraph, TGraph))(p))->DrawGraph(n, x, y, option);\
 }\
-void Type ## _drawPanelTGraph ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,drawPanelTGraph,TGraph)(p)->DrawPanel();\
+\
+void Type##_drawPanelTGraph ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, drawPanelTGraph, TGraph))(p))->DrawPanel();\
 }\
-void Type ## _Expand ( Type ## _p p, int newsize, int step )\
-{\
-TYPECASTMETHOD(Type,Expand,TGraph)(p)->Expand(newsize, step);\
+\
+void Type##_Expand ( Type##_p p, int newsize, int step ) {\
+((TYPECASTMETHOD(Type, Expand, TGraph))(p))->Expand(newsize, step);\
 }\
-void Type ## _FitPanelTGraph ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,FitPanelTGraph,TGraph)(p)->FitPanel();\
+\
+void Type##_FitPanelTGraph ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, FitPanelTGraph, TGraph))(p))->FitPanel();\
 }\
-double Type ## _getCorrelationFactorTGraph ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,getCorrelationFactorTGraph,TGraph)(p)->GetCorrelationFactor();\
+\
+double Type##_getCorrelationFactorTGraph ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, getCorrelationFactorTGraph, TGraph))(p))->GetCorrelationFactor();\
 }\
-double Type ## _getCovarianceTGraph ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,getCovarianceTGraph,TGraph)(p)->GetCovariance();\
+\
+double Type##_getCovarianceTGraph ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, getCovarianceTGraph, TGraph))(p))->GetCovariance();\
 }\
-double Type ## _getMeanTGraph ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,getMeanTGraph,TGraph)(p)->GetMean(axis);\
+\
+double Type##_getMeanTGraph ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, getMeanTGraph, TGraph))(p))->GetMean(axis);\
 }\
-double Type ## _getRMSTGraph ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,getRMSTGraph,TGraph)(p)->GetRMS(axis);\
+\
+double Type##_getRMSTGraph ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, getRMSTGraph, TGraph))(p))->GetRMS(axis);\
 }\
-double Type ## _GetErrorX ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetErrorX,TGraph)(p)->GetErrorX(bin);\
+\
+double Type##_GetErrorX ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetErrorX, TGraph))(p))->GetErrorX(bin);\
 }\
-double Type ## _GetErrorY ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetErrorY,TGraph)(p)->GetErrorY(bin);\
+\
+double Type##_GetErrorY ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetErrorY, TGraph))(p))->GetErrorY(bin);\
 }\
-double Type ## _GetErrorXhigh ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetErrorXhigh,TGraph)(p)->GetErrorXhigh(bin);\
+\
+double Type##_GetErrorXhigh ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetErrorXhigh, TGraph))(p))->GetErrorXhigh(bin);\
 }\
-double Type ## _GetErrorXlow ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetErrorXlow,TGraph)(p)->GetErrorXlow(bin);\
+\
+double Type##_GetErrorXlow ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetErrorXlow, TGraph))(p))->GetErrorXlow(bin);\
 }\
-double Type ## _GetErrorYhigh ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetErrorYhigh,TGraph)(p)->GetErrorYhigh(bin);\
+\
+double Type##_GetErrorYhigh ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetErrorYhigh, TGraph))(p))->GetErrorYhigh(bin);\
 }\
-double Type ## _GetErrorYlow ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetErrorYlow,TGraph)(p)->GetErrorYlow(bin);\
+\
+double Type##_GetErrorYlow ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetErrorYlow, TGraph))(p))->GetErrorYlow(bin);\
 }\
-void Type ## _InitExpo ( Type ## _p p, double xmin, double xmax )\
-{\
-TYPECASTMETHOD(Type,InitExpo,TGraph)(p)->InitExpo(xmin, xmax);\
+\
+void Type##_InitExpo ( Type##_p p, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, InitExpo, TGraph))(p))->InitExpo(xmin, xmax);\
 }\
-void Type ## _InitGaus ( Type ## _p p, double xmin, double xmax )\
-{\
-TYPECASTMETHOD(Type,InitGaus,TGraph)(p)->InitGaus(xmin, xmax);\
+\
+void Type##_InitGaus ( Type##_p p, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, InitGaus, TGraph))(p))->InitGaus(xmin, xmax);\
 }\
-void Type ## _InitPolynom ( Type ## _p p, double xmin, double xmax )\
-{\
-TYPECASTMETHOD(Type,InitPolynom,TGraph)(p)->InitPolynom(xmin, xmax);\
+\
+void Type##_InitPolynom ( Type##_p p, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, InitPolynom, TGraph))(p))->InitPolynom(xmin, xmax);\
 }\
-int Type ## _InsertPoint ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,InsertPoint,TGraph)(p)->InsertPoint();\
+\
+int Type##_InsertPoint ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, InsertPoint, TGraph))(p))->InsertPoint();\
 }\
-double Type ## _integralTGraph ( Type ## _p p, int first, int last )\
-{\
-return TYPECASTMETHOD(Type,integralTGraph,TGraph)(p)->Integral(first, last);\
+\
+double Type##_integralTGraph ( Type##_p p, int first, int last ) {\
+return ((TYPECASTMETHOD(Type, integralTGraph, TGraph))(p))->Integral(first, last);\
 }\
-int Type ## _IsEditable ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,IsEditable,TGraph)(p)->IsEditable();\
+\
+bool Type##_IsEditable ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, IsEditable, TGraph))(p))->IsEditable();\
 }\
-int Type ## _isInsideTGraph ( Type ## _p p, double x, double y )\
-{\
-return TYPECASTMETHOD(Type,isInsideTGraph,TGraph)(p)->IsInside(x, y);\
+\
+int Type##_isInsideTGraph ( Type##_p p, double x, double y ) {\
+return ((TYPECASTMETHOD(Type, isInsideTGraph, TGraph))(p))->IsInside(x, y);\
 }\
-void Type ## _LeastSquareFit ( Type ## _p p, int m, double * a, double xmin, double xmax )\
-{\
-TYPECASTMETHOD(Type,LeastSquareFit,TGraph)(p)->LeastSquareFit(m, a, xmin, xmax);\
+\
+void Type##_LeastSquareFit ( Type##_p p, int m, double* a, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, LeastSquareFit, TGraph))(p))->LeastSquareFit(m, a, xmin, xmax);\
 }\
-void Type ## _PaintStats ( Type ## _p p, TF1_p fit )\
-{\
-TYPECASTMETHOD(Type,PaintStats,TGraph)(p)->PaintStats(to_nonconst<TF1,TF1_t>(fit));\
+\
+void Type##_PaintStats ( Type##_p p, TF1_p fit ) {\
+((TYPECASTMETHOD(Type, PaintStats, TGraph))(p))->PaintStats(from_nonconst_to_nonconst<TF1, TF1_t>(fit));\
 }\
-int Type ## _RemovePoint ( Type ## _p p, int ipoint )\
-{\
-return TYPECASTMETHOD(Type,RemovePoint,TGraph)(p)->RemovePoint(ipoint);\
+\
+int Type##_RemovePoint ( Type##_p p, int ipoint ) {\
+return ((TYPECASTMETHOD(Type, RemovePoint, TGraph))(p))->RemovePoint(ipoint);\
 }\
-void Type ## _SetEditable ( Type ## _p p, int editable )\
-{\
-TYPECASTMETHOD(Type,SetEditable,TGraph)(p)->SetEditable(editable);\
+\
+void Type##_SetEditable ( Type##_p p, bool editable ) {\
+((TYPECASTMETHOD(Type, SetEditable, TGraph))(p))->SetEditable(editable);\
 }\
-void Type ## _SetHistogram ( Type ## _p p, TH1F_p h )\
-{\
-TYPECASTMETHOD(Type,SetHistogram,TGraph)(p)->SetHistogram(to_nonconst<TH1F,TH1F_t>(h));\
+\
+void Type##_SetHistogram ( Type##_p p, TH1F_p h ) {\
+((TYPECASTMETHOD(Type, SetHistogram, TGraph))(p))->SetHistogram(from_nonconst_to_nonconst<TH1F, TH1F_t>(h));\
 }\
-void Type ## _setMaximumTGraph ( Type ## _p p, double maximum )\
-{\
-TYPECASTMETHOD(Type,setMaximumTGraph,TGraph)(p)->SetMaximum(maximum);\
+\
+void Type##_setMaximumTGraph ( Type##_p p, double maximum ) {\
+((TYPECASTMETHOD(Type, setMaximumTGraph, TGraph))(p))->SetMaximum(maximum);\
 }\
-void Type ## _setMinimumTGraph ( Type ## _p p, double minimum )\
-{\
-TYPECASTMETHOD(Type,setMinimumTGraph,TGraph)(p)->SetMinimum(minimum);\
+\
+void Type##_setMinimumTGraph ( Type##_p p, double minimum ) {\
+((TYPECASTMETHOD(Type, setMinimumTGraph, TGraph))(p))->SetMinimum(minimum);\
 }\
-void Type ## _Set ( Type ## _p p, int n )\
-{\
-TYPECASTMETHOD(Type,Set,TGraph)(p)->Set(n);\
+\
+void Type##_Set ( Type##_p p, int n ) {\
+((TYPECASTMETHOD(Type, Set, TGraph))(p))->Set(n);\
 }\
-void Type ## _SetPoint ( Type ## _p p, int i, double x, double y )\
-{\
-TYPECASTMETHOD(Type,SetPoint,TGraph)(p)->SetPoint(i, x, y);\
+\
+void Type##_SetPoint ( Type##_p p, int i, double x, double y ) {\
+((TYPECASTMETHOD(Type, SetPoint, TGraph))(p))->SetPoint(i, x, y);\
 }
 
-#undef TGRAPH_DEF_NONVIRT
-#define TGRAPH_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTGraph ( int n, double * x, double * y )\
-{\
-Type * newp = new Type (n, x, y); \
-return to_nonconst<Type ## _t, Type >(newp);\
+
+#define TGRAPH_DEF_NONVIRT(Type) \
+Type##_p Type##_newTGraph ( int n, double* x, double* y ) {\
+Type* newp=new Type(n, x, y);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
 }\
-int Type ## _tGraphGetEditable ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tGraphGetEditable,TGraph)(p)->GetEditable();\
+\
+bool Type##_tGraph_GetEditable ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tGraph_GetEditable, TGraph))(p))->GetEditable();\
 }\
-TF1_p Type ## _tGraphGetFunction ( Type ## _p p, const char* name )\
-{\
-return to_nonconst<TF1_t,TF1>((TF1*)TYPECASTMETHOD(Type,tGraphGetFunction,TGraph)(p)->GetFunction(name));\
+\
+TF1_p Type##_tGraph_GetFunction ( Type##_p p, const char* name ) {\
+return from_nonconst_to_nonconst<TF1_t, TF1>((TF1*)((TYPECASTMETHOD(Type, tGraph_GetFunction, TGraph))(p))->GetFunction(name));\
 }\
-TH1F_p Type ## _tGraphGetHistogram ( Type ## _p p )\
-{\
-return to_nonconst<TH1F_t,TH1F>((TH1F*)TYPECASTMETHOD(Type,tGraphGetHistogram,TGraph)(p)->GetHistogram());\
+\
+TH1F_p Type##_tGraph_GetHistogram ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TH1F_t, TH1F>((TH1F*)((TYPECASTMETHOD(Type, tGraph_GetHistogram, TGraph))(p))->GetHistogram());\
 }\
-int Type ## _tGraphGetMaxSize ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tGraphGetMaxSize,TGraph)(p)->GetMaxSize();\
+\
+int Type##_tGraph_GetMaxSize ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tGraph_GetMaxSize, TGraph))(p))->GetMaxSize();\
 }\
-int Type ## _tGraphGetN ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tGraphGetN,TGraph)(p)->GetN();\
+\
+int Type##_tGraph_GetN ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tGraph_GetN, TGraph))(p))->GetN();\
 }\
-double Type ## _tGraphGetMaximum ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tGraphGetMaximum,TGraph)(p)->GetMaximum();\
+\
+double Type##_tGraph_GetMaximum ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tGraph_GetMaximum, TGraph))(p))->GetMaximum();\
 }\
-double Type ## _tGraphGetMinimum ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tGraphGetMinimum,TGraph)(p)->GetMinimum();\
+\
+double Type##_tGraph_GetMinimum ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tGraph_GetMinimum, TGraph))(p))->GetMinimum();\
 }\
-TAxis_p Type ## _tGraphGetXaxis ( Type ## _p p )\
-{\
-return to_nonconst<TAxis_t,TAxis>((TAxis*)TYPECASTMETHOD(Type,tGraphGetXaxis,TGraph)(p)->GetXaxis());\
+\
+TAxis_p Type##_tGraph_GetXaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tGraph_GetXaxis, TGraph))(p))->GetXaxis());\
 }\
-TAxis_p Type ## _tGraphGetYaxis ( Type ## _p p )\
-{\
-return to_nonconst<TAxis_t,TAxis>((TAxis*)TYPECASTMETHOD(Type,tGraphGetYaxis,TGraph)(p)->GetYaxis());\
+\
+TAxis_p Type##_tGraph_GetYaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tGraph_GetYaxis, TGraph))(p))->GetYaxis());\
 }\
-void Type ## _tGraphPaintGraph ( Type ## _p p, int npoints, double * x, double * y, const char* chopt )\
-{\
-TYPECASTMETHOD(Type,tGraphPaintGraph,TGraph)(p)->PaintGraph(npoints, x, y, chopt);\
+\
+void Type##_tGraph_PaintGraph ( Type##_p p, int npoints, double* x, double* y, const char* chopt ) {\
+((TYPECASTMETHOD(Type, tGraph_PaintGraph, TGraph))(p))->PaintGraph(npoints, x, y, chopt);\
 }\
-void Type ## _tGraphPaintGrapHist ( Type ## _p p, int npoints, double * x, double * y, const char* chopt )\
-{\
-TYPECASTMETHOD(Type,tGraphPaintGrapHist,TGraph)(p)->PaintGrapHist(npoints, x, y, chopt);\
+\
+void Type##_tGraph_PaintGrapHist ( Type##_p p, int npoints, double* x, double* y, const char* chopt ) {\
+((TYPECASTMETHOD(Type, tGraph_PaintGrapHist, TGraph))(p))->PaintGrapHist(npoints, x, y, chopt);\
 }
 
-TNAMED_DECL_VIRT(TGraph);
-TATTLINE_DECL_VIRT(TGraph);
-TATTFILL_DECL_VIRT(TGraph);
-TATTMARKER_DECL_VIRT(TGraph);
-TOBJECT_DECL_VIRT(TGraph);
-DELETABLE_DECL_VIRT(TGraph);
 
+#define TGRAPH_DEF_ACCESSOR(Type) \
 
-TGRAPH_DECL_VIRT(TGraph);
 
 
-TGRAPH_DECL_NONVIRT(TGraph);
-
-
-#endif // __HROOT_HIST__TGraph__
+TNAMED_DECL_VIRT(TGraph)
+TATTLINE_DECL_VIRT(TGraph)
+TATTFILL_DECL_VIRT(TGraph)
+TATTMARKER_DECL_VIRT(TGraph)
+TOBJECT_DECL_VIRT(TGraph)
+DELETABLE_DECL_VIRT(TGraph)
+TGRAPH_DECL_VIRT(TGraph)
+TGRAPH_DECL_NONVIRT(TGraph)
+TGRAPH_DECL_ACCESSOR(TGraph)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTGraph2D.cpp b/csrc/HROOTHistTGraph2D.cpp
new file mode 100644
--- /dev/null
+++ b/csrc/HROOTHistTGraph2D.cpp
@@ -0,0 +1,36 @@
+
+#include "MacroPatternMatch.h"
+
+#include "HROOTHistTAxis.h"
+
+#include "HROOTCoreTNamed.h"
+
+#include "HROOTCoreTAttLine.h"
+
+#include "HROOTCoreTAttFill.h"
+
+#include "HROOTCoreTAttMarker.h"
+
+#include "TGraph2D.h"
+
+#include "HROOTHistTGraph2D.h"
+
+using namespace ROOT;
+
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+
+#define TYPECASTMETHOD(cname,mname,oname) \
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
+
+TNAMED_DEF_VIRT(TGraph2D)
+TATTLINE_DEF_VIRT(TGraph2D)
+TATTFILL_DEF_VIRT(TGraph2D)
+TATTMARKER_DEF_VIRT(TGraph2D)
+TOBJECT_DEF_VIRT(TGraph2D)
+DELETABLE_DEF_VIRT(TGraph2D)
+TGRAPH2D_DEF_VIRT(TGraph2D)
+TGRAPH2D_DEF_NONVIRT(TGraph2D)
+TGRAPH2D_DEF_ACCESSOR(TGraph2D)
+
diff --git a/csrc/HROOTHistTGraph2D.h b/csrc/HROOTHistTGraph2D.h
new file mode 100644
--- /dev/null
+++ b/csrc/HROOTHistTGraph2D.h
@@ -0,0 +1,102 @@
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma once
+
+
+#include "HROOT-histType.h"
+
+#include "HROOTCoreTNamed.h"
+
+#include "HROOTCoreTAttLine.h"
+
+#include "HROOTCoreTAttFill.h"
+
+#include "HROOTCoreTAttMarker.h"
+
+#include "HROOTCoreTObject.h"
+
+#include "STDDeletable.h"
+
+#include "HROOT-coreType.h"
+
+
+#define TGRAPH2D_DECL_VIRT(Type) \
+void Type##_SetN ( Type##_p p, int n );\
+void Type##_SetPointXYZ ( Type##_p p, int i, double x, double y, double z );
+
+
+#define TGRAPH2D_DECL_NONVIRT(Type) \
+Type##_p Type##_newTGraph2D_ (  );\
+Type##_p Type##_newTGraph2D ( int n, double* x, double* y, double* z );\
+TAxis_p Type##_tGraph2D_GetXaxis ( Type##_p p );\
+TAxis_p Type##_tGraph2D_GetYaxis ( Type##_p p );\
+TAxis_p Type##_tGraph2D_GetZaxis ( Type##_p p );\
+void Type##_tGraph2D_SetMaximum ( Type##_p p, double x );\
+void Type##_tGraph2D_SetMinimum ( Type##_p p, double x );
+
+
+#define TGRAPH2D_DECL_ACCESSOR(Type) \
+
+
+
+#define TGRAPH2D_DEF_VIRT(Type) \
+void Type##_SetN ( Type##_p p, int n ) {\
+((TYPECASTMETHOD(Type, SetN, TGraph2D))(p))->Set(n);\
+}\
+\
+void Type##_SetPointXYZ ( Type##_p p, int i, double x, double y, double z ) {\
+((TYPECASTMETHOD(Type, SetPointXYZ, TGraph2D))(p))->SetPoint(i, x, y, z);\
+}
+
+
+#define TGRAPH2D_DEF_NONVIRT(Type) \
+Type##_p Type##_newTGraph2D_ (  ) {\
+Type* newp=new Type();return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}\
+\
+Type##_p Type##_newTGraph2D ( int n, double* x, double* y, double* z ) {\
+Type* newp=new Type(n, x, y, z);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}\
+\
+TAxis_p Type##_tGraph2D_GetXaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tGraph2D_GetXaxis, TGraph2D))(p))->GetXaxis());\
+}\
+\
+TAxis_p Type##_tGraph2D_GetYaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tGraph2D_GetYaxis, TGraph2D))(p))->GetYaxis());\
+}\
+\
+TAxis_p Type##_tGraph2D_GetZaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tGraph2D_GetZaxis, TGraph2D))(p))->GetZaxis());\
+}\
+\
+void Type##_tGraph2D_SetMaximum ( Type##_p p, double x ) {\
+((TYPECASTMETHOD(Type, tGraph2D_SetMaximum, TGraph2D))(p))->SetMaximum(x);\
+}\
+\
+void Type##_tGraph2D_SetMinimum ( Type##_p p, double x ) {\
+((TYPECASTMETHOD(Type, tGraph2D_SetMinimum, TGraph2D))(p))->SetMinimum(x);\
+}
+
+
+#define TGRAPH2D_DEF_ACCESSOR(Type) \
+
+
+
+TNAMED_DECL_VIRT(TGraph2D)
+TATTLINE_DECL_VIRT(TGraph2D)
+TATTFILL_DECL_VIRT(TGraph2D)
+TATTMARKER_DECL_VIRT(TGraph2D)
+TOBJECT_DECL_VIRT(TGraph2D)
+DELETABLE_DECL_VIRT(TGraph2D)
+TGRAPH2D_DECL_VIRT(TGraph2D)
+TGRAPH2D_DECL_NONVIRT(TGraph2D)
+TGRAPH2D_DECL_ACCESSOR(TGraph2D)
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/csrc/HROOTHistTGraphAsymmErrors.cpp b/csrc/HROOTHistTGraphAsymmErrors.cpp
--- a/csrc/HROOTHistTGraphAsymmErrors.cpp
+++ b/csrc/HROOTHistTGraphAsymmErrors.cpp
@@ -1,17 +1,20 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTGraph.h"
+
 #include "TGraphAsymmErrors.h"
-#include "HROOTHistTGraphAsymmErrors.h"
 
+#include "HROOTHistTGraphAsymmErrors.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TGRAPH_DEF_VIRT(TGraphAsymmErrors)
 TNAMED_DEF_VIRT(TGraphAsymmErrors)
@@ -20,8 +23,7 @@
 TATTMARKER_DEF_VIRT(TGraphAsymmErrors)
 TOBJECT_DEF_VIRT(TGraphAsymmErrors)
 DELETABLE_DEF_VIRT(TGraphAsymmErrors)
-
 TGRAPHASYMMERRORS_DEF_VIRT(TGraphAsymmErrors)
-
 TGRAPHASYMMERRORS_DEF_NONVIRT(TGraphAsymmErrors)
+TGRAPHASYMMERRORS_DEF_ACCESSOR(TGraphAsymmErrors)
 
diff --git a/csrc/HROOTHistTGraphAsymmErrors.h b/csrc/HROOTHistTGraphAsymmErrors.h
--- a/csrc/HROOTHistTGraphAsymmErrors.h
+++ b/csrc/HROOTHistTGraphAsymmErrors.h
@@ -1,55 +1,66 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TGraphAsymmErrors__
-#define __HROOT_HIST__TGraphAsymmErrors__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTGraph.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
 
-#undef TGRAPHASYMMERRORS_DECL_VIRT 
+#include "STDDeletable.h"
+
+
 #define TGRAPHASYMMERRORS_DECL_VIRT(Type) \
+void Type##_SetPointErrorA ( Type##_p p, int i, double exl, double exh, double eyl, double eyh );
 
 
-#undef TGRAPHASYMMERRORS_DECL_NONVIRT 
 #define TGRAPHASYMMERRORS_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTGraphAsymmErrors ( int n, double * x, double * y, double * exl, double * exh, double * eyl, double * eyh )
+Type##_p Type##_newTGraphAsymmErrors ( int n, double* x, double* y, double* exl, double* exh, double* eyl, double* eyh );
 
-#undef TGRAPHASYMMERRORS_DEF_VIRT
-#define TGRAPHASYMMERRORS_DEF_VIRT(Type)\
 
+#define TGRAPHASYMMERRORS_DECL_ACCESSOR(Type) \
 
-#undef TGRAPHASYMMERRORS_DEF_NONVIRT
-#define TGRAPHASYMMERRORS_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTGraphAsymmErrors ( int n, double * x, double * y, double * exl, double * exh, double * eyl, double * eyh )\
-{\
-Type * newp = new Type (n, x, y, exl, exh, eyl, eyh); \
-return to_nonconst<Type ## _t, Type >(newp);\
+
+
+#define TGRAPHASYMMERRORS_DEF_VIRT(Type) \
+void Type##_SetPointErrorA ( Type##_p p, int i, double exl, double exh, double eyl, double eyh ) {\
+((TYPECASTMETHOD(Type, SetPointErrorA, TGraphAsymmErrors))(p))->SetPointError(i, exl, exh, eyl, eyh);\
 }
 
-TGRAPH_DECL_VIRT(TGraphAsymmErrors);
-TNAMED_DECL_VIRT(TGraphAsymmErrors);
-TATTLINE_DECL_VIRT(TGraphAsymmErrors);
-TATTFILL_DECL_VIRT(TGraphAsymmErrors);
-TATTMARKER_DECL_VIRT(TGraphAsymmErrors);
-TOBJECT_DECL_VIRT(TGraphAsymmErrors);
-DELETABLE_DECL_VIRT(TGraphAsymmErrors);
 
+#define TGRAPHASYMMERRORS_DEF_NONVIRT(Type) \
+Type##_p Type##_newTGraphAsymmErrors ( int n, double* x, double* y, double* exl, double* exh, double* eyl, double* eyh ) {\
+Type* newp=new Type(n, x, y, exl, exh, eyl, eyh);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
-TGRAPHASYMMERRORS_DECL_VIRT(TGraphAsymmErrors);
 
+#define TGRAPHASYMMERRORS_DEF_ACCESSOR(Type) \
 
-TGRAPHASYMMERRORS_DECL_NONVIRT(TGraphAsymmErrors);
 
 
-#endif // __HROOT_HIST__TGraphAsymmErrors__
+TGRAPH_DECL_VIRT(TGraphAsymmErrors)
+TNAMED_DECL_VIRT(TGraphAsymmErrors)
+TATTLINE_DECL_VIRT(TGraphAsymmErrors)
+TATTFILL_DECL_VIRT(TGraphAsymmErrors)
+TATTMARKER_DECL_VIRT(TGraphAsymmErrors)
+TOBJECT_DECL_VIRT(TGraphAsymmErrors)
+DELETABLE_DECL_VIRT(TGraphAsymmErrors)
+TGRAPHASYMMERRORS_DECL_VIRT(TGraphAsymmErrors)
+TGRAPHASYMMERRORS_DECL_NONVIRT(TGraphAsymmErrors)
+TGRAPHASYMMERRORS_DECL_ACCESSOR(TGraphAsymmErrors)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTGraphBentErrors.cpp b/csrc/HROOTHistTGraphBentErrors.cpp
--- a/csrc/HROOTHistTGraphBentErrors.cpp
+++ b/csrc/HROOTHistTGraphBentErrors.cpp
@@ -1,17 +1,20 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTGraph.h"
+
 #include "TGraphBentErrors.h"
-#include "HROOTHistTGraphBentErrors.h"
 
+#include "HROOTHistTGraphBentErrors.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TGRAPH_DEF_VIRT(TGraphBentErrors)
 TNAMED_DEF_VIRT(TGraphBentErrors)
@@ -20,8 +23,7 @@
 TATTMARKER_DEF_VIRT(TGraphBentErrors)
 TOBJECT_DEF_VIRT(TGraphBentErrors)
 DELETABLE_DEF_VIRT(TGraphBentErrors)
-
 TGRAPHBENTERRORS_DEF_VIRT(TGraphBentErrors)
-
 TGRAPHBENTERRORS_DEF_NONVIRT(TGraphBentErrors)
+TGRAPHBENTERRORS_DEF_ACCESSOR(TGraphBentErrors)
 
diff --git a/csrc/HROOTHistTGraphBentErrors.h b/csrc/HROOTHistTGraphBentErrors.h
--- a/csrc/HROOTHistTGraphBentErrors.h
+++ b/csrc/HROOTHistTGraphBentErrors.h
@@ -1,55 +1,64 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TGraphBentErrors__
-#define __HROOT_HIST__TGraphBentErrors__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTGraph.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
 
-#undef TGRAPHBENTERRORS_DECL_VIRT 
+#include "STDDeletable.h"
+
+
 #define TGRAPHBENTERRORS_DECL_VIRT(Type) \
 
 
-#undef TGRAPHBENTERRORS_DECL_NONVIRT 
+
 #define TGRAPHBENTERRORS_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTGraphBentErrors ( int n, double * x, double * y, double * exl, double * exh, double * eyl, double * eyh, double * exld, double * exhd, double * eyld, double * eyhd )
+Type##_p Type##_newTGraphBentErrors ( int n, double* x, double* y, double* exl, double* exh, double* eyl, double* eyh, double* exld, double* exhd, double* eyld, double* eyhd );
 
-#undef TGRAPHBENTERRORS_DEF_VIRT
-#define TGRAPHBENTERRORS_DEF_VIRT(Type)\
 
+#define TGRAPHBENTERRORS_DECL_ACCESSOR(Type) \
 
-#undef TGRAPHBENTERRORS_DEF_NONVIRT
-#define TGRAPHBENTERRORS_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTGraphBentErrors ( int n, double * x, double * y, double * exl, double * exh, double * eyl, double * eyh, double * exld, double * exhd, double * eyld, double * eyhd )\
-{\
-Type * newp = new Type (n, x, y, exl, exh, eyl, eyh, exld, exhd, eyld, eyhd); \
-return to_nonconst<Type ## _t, Type >(newp);\
-}
 
-TGRAPH_DECL_VIRT(TGraphBentErrors);
-TNAMED_DECL_VIRT(TGraphBentErrors);
-TATTLINE_DECL_VIRT(TGraphBentErrors);
-TATTFILL_DECL_VIRT(TGraphBentErrors);
-TATTMARKER_DECL_VIRT(TGraphBentErrors);
-TOBJECT_DECL_VIRT(TGraphBentErrors);
-DELETABLE_DECL_VIRT(TGraphBentErrors);
 
+#define TGRAPHBENTERRORS_DEF_VIRT(Type) \
 
-TGRAPHBENTERRORS_DECL_VIRT(TGraphBentErrors);
 
 
-TGRAPHBENTERRORS_DECL_NONVIRT(TGraphBentErrors);
+#define TGRAPHBENTERRORS_DEF_NONVIRT(Type) \
+Type##_p Type##_newTGraphBentErrors ( int n, double* x, double* y, double* exl, double* exh, double* eyl, double* eyh, double* exld, double* exhd, double* eyld, double* eyhd ) {\
+Type* newp=new Type(n, x, y, exl, exh, eyl, eyh, exld, exhd, eyld, eyhd);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
 
-#endif // __HROOT_HIST__TGraphBentErrors__
+#define TGRAPHBENTERRORS_DEF_ACCESSOR(Type) \
+
+
+
+TGRAPH_DECL_VIRT(TGraphBentErrors)
+TNAMED_DECL_VIRT(TGraphBentErrors)
+TATTLINE_DECL_VIRT(TGraphBentErrors)
+TATTFILL_DECL_VIRT(TGraphBentErrors)
+TATTMARKER_DECL_VIRT(TGraphBentErrors)
+TOBJECT_DECL_VIRT(TGraphBentErrors)
+DELETABLE_DECL_VIRT(TGraphBentErrors)
+TGRAPHBENTERRORS_DECL_VIRT(TGraphBentErrors)
+TGRAPHBENTERRORS_DECL_NONVIRT(TGraphBentErrors)
+TGRAPHBENTERRORS_DECL_ACCESSOR(TGraphBentErrors)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTGraphErrors.cpp b/csrc/HROOTHistTGraphErrors.cpp
--- a/csrc/HROOTHistTGraphErrors.cpp
+++ b/csrc/HROOTHistTGraphErrors.cpp
@@ -1,17 +1,20 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTGraph.h"
+
 #include "TGraphErrors.h"
-#include "HROOTHistTGraphErrors.h"
 
+#include "HROOTHistTGraphErrors.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TGRAPH_DEF_VIRT(TGraphErrors)
 TNAMED_DEF_VIRT(TGraphErrors)
@@ -20,8 +23,7 @@
 TATTMARKER_DEF_VIRT(TGraphErrors)
 TOBJECT_DEF_VIRT(TGraphErrors)
 DELETABLE_DEF_VIRT(TGraphErrors)
-
 TGRAPHERRORS_DEF_VIRT(TGraphErrors)
-
 TGRAPHERRORS_DEF_NONVIRT(TGraphErrors)
+TGRAPHERRORS_DEF_ACCESSOR(TGraphErrors)
 
diff --git a/csrc/HROOTHistTGraphErrors.h b/csrc/HROOTHistTGraphErrors.h
--- a/csrc/HROOTHistTGraphErrors.h
+++ b/csrc/HROOTHistTGraphErrors.h
@@ -1,55 +1,66 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TGraphErrors__
-#define __HROOT_HIST__TGraphErrors__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTGraph.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
 
-#undef TGRAPHERRORS_DECL_VIRT 
+#include "STDDeletable.h"
+
+
 #define TGRAPHERRORS_DECL_VIRT(Type) \
+void Type##_SetPointError ( Type##_p p, int i, double ex, double ey );
 
 
-#undef TGRAPHERRORS_DECL_NONVIRT 
 #define TGRAPHERRORS_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTGraphErrors ( int n, double * x, double * y, double * ex, double * ey )
+Type##_p Type##_newTGraphErrors ( int n, double* x, double* y, double* ex, double* ey );
 
-#undef TGRAPHERRORS_DEF_VIRT
-#define TGRAPHERRORS_DEF_VIRT(Type)\
 
+#define TGRAPHERRORS_DECL_ACCESSOR(Type) \
 
-#undef TGRAPHERRORS_DEF_NONVIRT
-#define TGRAPHERRORS_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTGraphErrors ( int n, double * x, double * y, double * ex, double * ey )\
-{\
-Type * newp = new Type (n, x, y, ex, ey); \
-return to_nonconst<Type ## _t, Type >(newp);\
+
+
+#define TGRAPHERRORS_DEF_VIRT(Type) \
+void Type##_SetPointError ( Type##_p p, int i, double ex, double ey ) {\
+((TYPECASTMETHOD(Type, SetPointError, TGraphErrors))(p))->SetPointError(i, ex, ey);\
 }
 
-TGRAPH_DECL_VIRT(TGraphErrors);
-TNAMED_DECL_VIRT(TGraphErrors);
-TATTLINE_DECL_VIRT(TGraphErrors);
-TATTFILL_DECL_VIRT(TGraphErrors);
-TATTMARKER_DECL_VIRT(TGraphErrors);
-TOBJECT_DECL_VIRT(TGraphErrors);
-DELETABLE_DECL_VIRT(TGraphErrors);
 
+#define TGRAPHERRORS_DEF_NONVIRT(Type) \
+Type##_p Type##_newTGraphErrors ( int n, double* x, double* y, double* ex, double* ey ) {\
+Type* newp=new Type(n, x, y, ex, ey);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
-TGRAPHERRORS_DECL_VIRT(TGraphErrors);
 
+#define TGRAPHERRORS_DEF_ACCESSOR(Type) \
 
-TGRAPHERRORS_DECL_NONVIRT(TGraphErrors);
 
 
-#endif // __HROOT_HIST__TGraphErrors__
+TGRAPH_DECL_VIRT(TGraphErrors)
+TNAMED_DECL_VIRT(TGraphErrors)
+TATTLINE_DECL_VIRT(TGraphErrors)
+TATTFILL_DECL_VIRT(TGraphErrors)
+TATTMARKER_DECL_VIRT(TGraphErrors)
+TOBJECT_DECL_VIRT(TGraphErrors)
+DELETABLE_DECL_VIRT(TGraphErrors)
+TGRAPHERRORS_DECL_VIRT(TGraphErrors)
+TGRAPHERRORS_DECL_NONVIRT(TGraphErrors)
+TGRAPHERRORS_DECL_ACCESSOR(TGraphErrors)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1.cpp b/csrc/HROOTHistTH1.cpp
--- a/csrc/HROOTHistTH1.cpp
+++ b/csrc/HROOTHistTH1.cpp
@@ -1,25 +1,36 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTCoreTDirectory.h"
+
 #include "HROOTHistTF1.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "HROOTHistTAxis.h"
+
 #include "HROOTCoreTObject.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "TH1.h"
-#include "HROOTHistTH1.h"
 
+#include "HROOTHistTH1.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TNAMED_DEF_VIRT(TH1)
 TATTLINE_DEF_VIRT(TH1)
@@ -27,8 +38,7 @@
 TATTMARKER_DEF_VIRT(TH1)
 TOBJECT_DEF_VIRT(TH1)
 DELETABLE_DEF_VIRT(TH1)
-
 TH1_DEF_VIRT(TH1)
-
 TH1_DEF_NONVIRT(TH1)
+TH1_DEF_ACCESSOR(TH1)
 
diff --git a/csrc/HROOTHistTH1.h b/csrc/HROOTHistTH1.h
--- a/csrc/HROOTHistTH1.h
+++ b/csrc/HROOTHistTH1.h
@@ -1,766 +1,770 @@
-#ifdef __cplusplus
-extern "C" { 
-#endif
-
-#ifndef __HROOT_HIST__TH1__
-#define __HROOT_HIST__TH1__
-
-#include "HROOT-histType.h"
-#include "HROOTCoreTNamed.h"
-#include "HROOTCoreTAttLine.h"
-#include "HROOTCoreTAttFill.h"
-#include "HROOTCoreTAttMarker.h"
-#include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
-#include "HROOT-coreType.h"
-
-#undef TH1_DECL_VIRT 
-#define TH1_DECL_VIRT(Type) \
-void Type ## _Add ( Type ## _p p, TH1_p h1, double c1 ); \
-void Type ## _AddBinContent ( Type ## _p p, int bin, double w ); \
-double Type ## _Chi2Test ( Type ## _p p, TH1_p h2, const char* option, double * res ); \
-double Type ## _ComputeIntegral ( Type ## _p p ); \
-void Type ## _DirectoryAutoAdd ( Type ## _p p, TDirectory_p dir ); \
-void Type ## _Divide ( Type ## _p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option ); \
-Type ## _p Type ## _drawCopyTH1 ( Type ## _p p, const char* option ); \
-TH1_p Type ## _DrawNormalized ( Type ## _p p, const char* option, double norm ); \
-void Type ## _drawPanelTH1 ( Type ## _p p ); \
-int Type ## _BufferEmpty ( Type ## _p p, int action ); \
-void Type ## _evalF ( Type ## _p p, TF1_p f1, const char* option ); \
-TH1_p Type ## _FFT ( Type ## _p p, TH1_p h_output, const char* option ); \
-int Type ## _fill1 ( Type ## _p p, double x ); \
-int Type ## _fill1w ( Type ## _p p, double x, double w ); \
-void Type ## _fillN1 ( Type ## _p p, int ntimes, double * x, double * w, int stride ); \
-void Type ## _FillRandom ( Type ## _p p, TH1_p h, int ntimes ); \
-int Type ## _FindBin ( Type ## _p p, double x, double y, double z ); \
-int Type ## _FindFixBin ( Type ## _p p, double x, double y, double z ); \
-int Type ## _FindFirstBinAbove ( Type ## _p p, double threshold, int axis ); \
-int Type ## _FindLastBinAbove ( Type ## _p p, double threshold, int axis ); \
-void Type ## _Fit ( Type ## _p p, TF1_p f1, const char* option, const char* goption, double xmin, double xmax ); \
-void Type ## _FitPanelTH1 ( Type ## _p p ); \
-int Type ## _getNdivisionA ( Type ## _p p, const char* axis ); \
-int Type ## _getAxisColorA ( Type ## _p p, const char* axis ); \
-int Type ## _getLabelColorA ( Type ## _p p, const char* axis ); \
-int Type ## _getLabelFontA ( Type ## _p p, const char* axis ); \
-double Type ## _getLabelOffsetA ( Type ## _p p, const char* axis ); \
-double Type ## _getLabelSizeA ( Type ## _p p, const char* axis ); \
-int Type ## _getTitleFontA ( Type ## _p p, const char* axis ); \
-double Type ## _getTitleOffsetA ( Type ## _p p, const char* axis ); \
-double Type ## _getTitleSizeA ( Type ## _p p, const char* axis ); \
-double Type ## _getTickLengthA ( Type ## _p p, const char* axis ); \
-double Type ## _GetBarOffset ( Type ## _p p ); \
-double Type ## _GetBarWidth ( Type ## _p p ); \
-int Type ## _GetContour ( Type ## _p p, double * levels ); \
-double Type ## _GetContourLevel ( Type ## _p p, int level ); \
-double Type ## _GetContourLevelPad ( Type ## _p p, int level ); \
-int Type ## _GetBin ( Type ## _p p, int binx, int biny, int binz ); \
-double Type ## _GetBinCenter ( Type ## _p p, int bin ); \
-double Type ## _GetBinContent1 ( Type ## _p p, int binx ); \
-double Type ## _GetBinContent2 ( Type ## _p p, int binx, int biny ); \
-double Type ## _GetBinContent3 ( Type ## _p p, int binx, int biny, int binz ); \
-double Type ## _GetBinError1 ( Type ## _p p, int binx ); \
-double Type ## _GetBinError2 ( Type ## _p p, int binx, int biny ); \
-double Type ## _GetBinError3 ( Type ## _p p, int binx, int biny, int binz ); \
-double Type ## _GetBinLowEdge ( Type ## _p p, int bin ); \
-double Type ## _GetBinWidth ( Type ## _p p, int bin ); \
-double Type ## _GetCellContent ( Type ## _p p, int binx, int biny ); \
-double Type ## _GetCellError ( Type ## _p p, int binx, int biny ); \
-double Type ## _GetEntries ( Type ## _p p ); \
-double Type ## _GetEffectiveEntries ( Type ## _p p ); \
-TF1_p Type ## _GetFunction ( Type ## _p p, const char* name ); \
-int Type ## _GetDimension ( Type ## _p p ); \
-double Type ## _GetKurtosis ( Type ## _p p, int axis ); \
-void Type ## _GetLowEdge ( Type ## _p p, double * edge ); \
-double Type ## _getMaximumTH1 ( Type ## _p p, double maxval ); \
-int Type ## _GetMaximumBin ( Type ## _p p ); \
-double Type ## _GetMaximumStored ( Type ## _p p ); \
-double Type ## _getMinimumTH1 ( Type ## _p p, double minval ); \
-int Type ## _GetMinimumBin ( Type ## _p p ); \
-double Type ## _GetMinimumStored ( Type ## _p p ); \
-double Type ## _GetMean ( Type ## _p p, int axis ); \
-double Type ## _GetMeanError ( Type ## _p p, int axis ); \
-double Type ## _GetNbinsX ( Type ## _p p ); \
-double Type ## _GetNbinsY ( Type ## _p p ); \
-double Type ## _GetNbinsZ ( Type ## _p p ); \
-int Type ## _getQuantilesTH1 ( Type ## _p p, int nprobSum, double * q, double * pbSum ); \
-double Type ## _GetRandom ( Type ## _p p ); \
-void Type ## _GetStats ( Type ## _p p, double * stats ); \
-double Type ## _GetSumOfWeights ( Type ## _p p ); \
-TArrayD_p Type ## _GetSumw2 ( Type ## _p p ); \
-int Type ## _GetSumw2N ( Type ## _p p ); \
-double Type ## _GetRMS ( Type ## _p p, int axis ); \
-double Type ## _GetRMSError ( Type ## _p p, int axis ); \
-double Type ## _GetSkewness ( Type ## _p p, int axis ); \
-double Type ## _integral1 ( Type ## _p p, int binx1, int binx2, const char* option ); \
-double Type ## _interpolate1 ( Type ## _p p, double x ); \
-double Type ## _interpolate2 ( Type ## _p p, double x, double y ); \
-double Type ## _interpolate3 ( Type ## _p p, double x, double y, double z ); \
-double Type ## _KolmogorovTest ( Type ## _p p, TH1_p h2, const char* option ); \
-void Type ## _LabelsDeflate ( Type ## _p p, const char* axis ); \
-void Type ## _LabelsInflate ( Type ## _p p, const char* axis ); \
-void Type ## _LabelsOption ( Type ## _p p, const char* option, const char* axis ); \
-void Type ## _multiflyF ( Type ## _p p, TF1_p h1, double c1 ); \
-void Type ## _Multiply ( Type ## _p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option ); \
-void Type ## _PutStats ( Type ## _p p, double * stats ); \
-TH1_p Type ## _Rebin ( Type ## _p p, int ngroup, const char* newname, double * xbins ); \
-void Type ## _RebinAxis ( Type ## _p p, double x, TAxis_p axis ); \
-void Type ## _Rebuild ( Type ## _p p, const char* option ); \
-void Type ## _RecursiveRemove ( Type ## _p p, TObject_p obj ); \
-void Type ## _Reset ( Type ## _p p, const char* option ); \
-void Type ## _ResetStats ( Type ## _p p ); \
-void Type ## _Scale ( Type ## _p p, double c1, const char* option ); \
-void Type ## _setAxisColorA ( Type ## _p p, int color, const char* axis ); \
-void Type ## _SetAxisRange ( Type ## _p p, double xmin, double xmax, const char* axis ); \
-void Type ## _SetBarOffset ( Type ## _p p, double offset ); \
-void Type ## _SetBarWidth ( Type ## _p p, double width ); \
-void Type ## _setBinContent1 ( Type ## _p p, int bin, double content ); \
-void Type ## _setBinContent2 ( Type ## _p p, int binx, int biny, double content ); \
-void Type ## _setBinContent3 ( Type ## _p p, int binx, int biny, int binz, double content ); \
-void Type ## _setBinError1 ( Type ## _p p, int bin, double error ); \
-void Type ## _setBinError2 ( Type ## _p p, int binx, int biny, double error ); \
-void Type ## _setBinError3 ( Type ## _p p, int binx, int biny, int binz, double error ); \
-void Type ## _setBins1 ( Type ## _p p, int nx, double * xBins ); \
-void Type ## _setBins2 ( Type ## _p p, int nx, double * xBins, int ny, double * yBins ); \
-void Type ## _setBins3 ( Type ## _p p, int nx, double * xBins, int ny, double * yBins, int nz, double * zBins ); \
-void Type ## _SetBinsLength ( Type ## _p p, int bin ); \
-void Type ## _SetBuffer ( Type ## _p p, int buffersize, const char* option ); \
-void Type ## _SetCellContent ( Type ## _p p, int binx, int biny, double content ); \
-void Type ## _SetContent ( Type ## _p p, double * content ); \
-void Type ## _SetContour ( Type ## _p p, int nlevels, double * levels ); \
-void Type ## _SetContourLevel ( Type ## _p p, int level, double value ); \
-void Type ## _SetDirectory ( Type ## _p p, TDirectory_p dir ); \
-void Type ## _SetEntries ( Type ## _p p, double n ); \
-void Type ## _SetError ( Type ## _p p, double * error ); \
-void Type ## _setLabelColorA ( Type ## _p p, int color, const char* axis ); \
-void Type ## _setLabelSizeA ( Type ## _p p, double size, const char* axis ); \
-void Type ## _setLabelFontA ( Type ## _p p, int font, const char* axis ); \
-void Type ## _setLabelOffsetA ( Type ## _p p, double offset, const char* axis ); \
-void Type ## _SetMaximum ( Type ## _p p, double maximum ); \
-void Type ## _SetMinimum ( Type ## _p p, double minimum ); \
-void Type ## _SetNormFactor ( Type ## _p p, double factor ); \
-void Type ## _SetStats ( Type ## _p p, int stats ); \
-void Type ## _SetOption ( Type ## _p p, const char* option ); \
-void Type ## _SetXTitle ( Type ## _p p, const char* title ); \
-void Type ## _SetYTitle ( Type ## _p p, const char* title ); \
-void Type ## _SetZTitle ( Type ## _p p, const char* title ); \
-TH1_p Type ## _ShowBackground ( Type ## _p p, int niter, const char* option ); \
-int Type ## _ShowPeaks ( Type ## _p p, double sigma, const char* option, double threshold ); \
-void Type ## _Smooth ( Type ## _p p, int ntimes, const char* option ); \
-void Type ## _Sumw2 ( Type ## _p p )
-
-#undef TH1_DECL_NONVIRT 
-#define TH1_DECL_NONVIRT(Type) \
-Type ## _p Type ## _tH1GetAsymmetry ( Type ## _p p, TH1_p h2, double c2, double dc2 ); \
-int Type ## _tH1GetBufferLength ( Type ## _p p ); \
-int Type ## _tH1GetBufferSize ( Type ## _p p ); \
-int Type ## _tH1GetDefaultBufferSize (  ); \
-int Type ## _tH1GetDefaultSumw2 (  ); \
-TDirectory_p Type ## _tH1GetDirectory ( Type ## _p p ); \
-int Type ## _tH1IsBinOverflow ( Type ## _p p, int bin ); \
-int Type ## _tH1IsBinUnderflow ( Type ## _p p, int bin ); \
-void Type ## _tH1SetDefaultBufferSize ( int buffersize ); \
-void Type ## _tH1SetDefaultSumw2 ( int sumw2 ); \
-void Type ## _tH1SmoothArray ( int NN, double * XX, int ntimes ); \
-void Type ## _tH1StatOverflows ( int flag ); \
-void Type ## _tH1UseCurrentStyle ( Type ## _p p )
-
-#undef TH1_DEF_VIRT
-#define TH1_DEF_VIRT(Type)\
-void Type ## _Add ( Type ## _p p, TH1_p h1, double c1 )\
-{\
-TYPECASTMETHOD(Type,Add,TH1)(p)->Add(to_nonconst<TH1,TH1_t>(h1), c1);\
-}\
-void Type ## _AddBinContent ( Type ## _p p, int bin, double w )\
-{\
-TYPECASTMETHOD(Type,AddBinContent,TH1)(p)->AddBinContent(bin, w);\
-}\
-double Type ## _Chi2Test ( Type ## _p p, TH1_p h2, const char* option, double * res )\
-{\
-return TYPECASTMETHOD(Type,Chi2Test,TH1)(p)->Chi2Test(to_nonconst<TH1,TH1_t>(h2), option, res);\
-}\
-double Type ## _ComputeIntegral ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,ComputeIntegral,TH1)(p)->ComputeIntegral();\
-}\
-void Type ## _DirectoryAutoAdd ( Type ## _p p, TDirectory_p dir )\
-{\
-TYPECASTMETHOD(Type,DirectoryAutoAdd,TH1)(p)->DirectoryAutoAdd(to_nonconst<TDirectory,TDirectory_t>(dir));\
-}\
-void Type ## _Divide ( Type ## _p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option )\
-{\
-TYPECASTMETHOD(Type,Divide,TH1)(p)->Divide(to_nonconst<TH1,TH1_t>(h1), to_nonconst<TH1,TH1_t>(h2), c1, c2, option);\
-}\
-Type ## _p Type ## _drawCopyTH1 ( Type ## _p p, const char* option )\
-{\
-return to_nonconst<Type ## _t, Type>((Type *)TYPECASTMETHOD(Type,drawCopyTH1,TH1)(p)->DrawCopy(option)) ;\
-}\
-TH1_p Type ## _DrawNormalized ( Type ## _p p, const char* option, double norm )\
-{\
-return to_nonconst<TH1_t,TH1>((TH1*)TYPECASTMETHOD(Type,DrawNormalized,TH1)(p)->DrawNormalized(option, norm));\
-}\
-void Type ## _drawPanelTH1 ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,drawPanelTH1,TH1)(p)->DrawPanel();\
-}\
-int Type ## _BufferEmpty ( Type ## _p p, int action )\
-{\
-return TYPECASTMETHOD(Type,BufferEmpty,TH1)(p)->BufferEmpty(action);\
-}\
-void Type ## _evalF ( Type ## _p p, TF1_p f1, const char* option )\
-{\
-TYPECASTMETHOD(Type,evalF,TH1)(p)->Eval(to_nonconst<TF1,TF1_t>(f1), option);\
-}\
-TH1_p Type ## _FFT ( Type ## _p p, TH1_p h_output, const char* option )\
-{\
-return to_nonconst<TH1_t,TH1>((TH1*)TYPECASTMETHOD(Type,FFT,TH1)(p)->FFT(to_nonconst<TH1,TH1_t>(h_output), option));\
-}\
-int Type ## _fill1 ( Type ## _p p, double x )\
-{\
-return TYPECASTMETHOD(Type,fill1,TH1)(p)->Fill(x);\
-}\
-int Type ## _fill1w ( Type ## _p p, double x, double w )\
-{\
-return TYPECASTMETHOD(Type,fill1w,TH1)(p)->Fill(x, w);\
-}\
-void Type ## _fillN1 ( Type ## _p p, int ntimes, double * x, double * w, int stride )\
-{\
-TYPECASTMETHOD(Type,fillN1,TH1)(p)->FillN(ntimes, x, w, stride);\
-}\
-void Type ## _FillRandom ( Type ## _p p, TH1_p h, int ntimes )\
-{\
-TYPECASTMETHOD(Type,FillRandom,TH1)(p)->FillRandom(to_nonconst<TH1,TH1_t>(h), ntimes);\
-}\
-int Type ## _FindBin ( Type ## _p p, double x, double y, double z )\
-{\
-return TYPECASTMETHOD(Type,FindBin,TH1)(p)->FindBin(x, y, z);\
-}\
-int Type ## _FindFixBin ( Type ## _p p, double x, double y, double z )\
-{\
-return TYPECASTMETHOD(Type,FindFixBin,TH1)(p)->FindFixBin(x, y, z);\
-}\
-int Type ## _FindFirstBinAbove ( Type ## _p p, double threshold, int axis )\
-{\
-return TYPECASTMETHOD(Type,FindFirstBinAbove,TH1)(p)->FindFirstBinAbove(threshold, axis);\
-}\
-int Type ## _FindLastBinAbove ( Type ## _p p, double threshold, int axis )\
-{\
-return TYPECASTMETHOD(Type,FindLastBinAbove,TH1)(p)->FindLastBinAbove(threshold, axis);\
-}\
-void Type ## _Fit ( Type ## _p p, TF1_p f1, const char* option, const char* goption, double xmin, double xmax )\
-{\
-TYPECASTMETHOD(Type,Fit,TH1)(p)->Fit(to_nonconst<TF1,TF1_t>(f1), option, goption, xmin, xmax);\
-}\
-void Type ## _FitPanelTH1 ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,FitPanelTH1,TH1)(p)->FitPanel();\
-}\
-int Type ## _getNdivisionA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getNdivisionA,TH1)(p)->GetNdivisions(axis);\
-}\
-int Type ## _getAxisColorA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getAxisColorA,TH1)(p)->GetAxisColor(axis);\
-}\
-int Type ## _getLabelColorA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getLabelColorA,TH1)(p)->GetLabelColor(axis);\
-}\
-int Type ## _getLabelFontA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getLabelFontA,TH1)(p)->GetLabelFont(axis);\
-}\
-double Type ## _getLabelOffsetA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getLabelOffsetA,TH1)(p)->GetLabelOffset(axis);\
-}\
-double Type ## _getLabelSizeA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getLabelSizeA,TH1)(p)->GetLabelSize(axis);\
-}\
-int Type ## _getTitleFontA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getTitleFontA,TH1)(p)->GetTitleFont(axis);\
-}\
-double Type ## _getTitleOffsetA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getTitleOffsetA,TH1)(p)->GetTitleOffset(axis);\
-}\
-double Type ## _getTitleSizeA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getTitleSizeA,TH1)(p)->GetTitleSize(axis);\
-}\
-double Type ## _getTickLengthA ( Type ## _p p, const char* axis )\
-{\
-return TYPECASTMETHOD(Type,getTickLengthA,TH1)(p)->GetTickLength(axis);\
-}\
-double Type ## _GetBarOffset ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetBarOffset,TH1)(p)->GetBarOffset();\
-}\
-double Type ## _GetBarWidth ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetBarWidth,TH1)(p)->GetBarWidth();\
-}\
-int Type ## _GetContour ( Type ## _p p, double * levels )\
-{\
-return TYPECASTMETHOD(Type,GetContour,TH1)(p)->GetContour(levels);\
-}\
-double Type ## _GetContourLevel ( Type ## _p p, int level )\
-{\
-return TYPECASTMETHOD(Type,GetContourLevel,TH1)(p)->GetContourLevel(level);\
-}\
-double Type ## _GetContourLevelPad ( Type ## _p p, int level )\
-{\
-return TYPECASTMETHOD(Type,GetContourLevelPad,TH1)(p)->GetContourLevelPad(level);\
-}\
-int Type ## _GetBin ( Type ## _p p, int binx, int biny, int binz )\
-{\
-return TYPECASTMETHOD(Type,GetBin,TH1)(p)->GetBin(binx, biny, binz);\
-}\
-double Type ## _GetBinCenter ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetBinCenter,TH1)(p)->GetBinCenter(bin);\
-}\
-double Type ## _GetBinContent1 ( Type ## _p p, int binx )\
-{\
-return TYPECASTMETHOD(Type,GetBinContent1,TH1)(p)->GetBinContent(binx);\
-}\
-double Type ## _GetBinContent2 ( Type ## _p p, int binx, int biny )\
-{\
-return TYPECASTMETHOD(Type,GetBinContent2,TH1)(p)->GetBinContent(binx, biny);\
-}\
-double Type ## _GetBinContent3 ( Type ## _p p, int binx, int biny, int binz )\
-{\
-return TYPECASTMETHOD(Type,GetBinContent3,TH1)(p)->GetBinContent(binx, biny, binz);\
-}\
-double Type ## _GetBinError1 ( Type ## _p p, int binx )\
-{\
-return TYPECASTMETHOD(Type,GetBinError1,TH1)(p)->GetBinError(binx);\
-}\
-double Type ## _GetBinError2 ( Type ## _p p, int binx, int biny )\
-{\
-return TYPECASTMETHOD(Type,GetBinError2,TH1)(p)->GetBinError(binx, biny);\
-}\
-double Type ## _GetBinError3 ( Type ## _p p, int binx, int biny, int binz )\
-{\
-return TYPECASTMETHOD(Type,GetBinError3,TH1)(p)->GetBinError(binx, biny, binz);\
-}\
-double Type ## _GetBinLowEdge ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetBinLowEdge,TH1)(p)->GetBinLowEdge(bin);\
-}\
-double Type ## _GetBinWidth ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,GetBinWidth,TH1)(p)->GetBinWidth(bin);\
-}\
-double Type ## _GetCellContent ( Type ## _p p, int binx, int biny )\
-{\
-return TYPECASTMETHOD(Type,GetCellContent,TH1)(p)->GetCellContent(binx, biny);\
-}\
-double Type ## _GetCellError ( Type ## _p p, int binx, int biny )\
-{\
-return TYPECASTMETHOD(Type,GetCellError,TH1)(p)->GetCellError(binx, biny);\
-}\
-double Type ## _GetEntries ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetEntries,TH1)(p)->GetEntries();\
-}\
-double Type ## _GetEffectiveEntries ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetEffectiveEntries,TH1)(p)->GetEffectiveEntries();\
-}\
-TF1_p Type ## _GetFunction ( Type ## _p p, const char* name )\
-{\
-return to_nonconst<TF1_t,TF1>((TF1*)TYPECASTMETHOD(Type,GetFunction,TH1)(p)->GetFunction(name));\
-}\
-int Type ## _GetDimension ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetDimension,TH1)(p)->GetDimension();\
-}\
-double Type ## _GetKurtosis ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,GetKurtosis,TH1)(p)->GetKurtosis(axis);\
-}\
-void Type ## _GetLowEdge ( Type ## _p p, double * edge )\
-{\
-TYPECASTMETHOD(Type,GetLowEdge,TH1)(p)->GetLowEdge(edge);\
-}\
-double Type ## _getMaximumTH1 ( Type ## _p p, double maxval )\
-{\
-return TYPECASTMETHOD(Type,getMaximumTH1,TH1)(p)->GetMaximum(maxval);\
-}\
-int Type ## _GetMaximumBin ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetMaximumBin,TH1)(p)->GetMaximumBin();\
-}\
-double Type ## _GetMaximumStored ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetMaximumStored,TH1)(p)->GetMaximumStored();\
-}\
-double Type ## _getMinimumTH1 ( Type ## _p p, double minval )\
-{\
-return TYPECASTMETHOD(Type,getMinimumTH1,TH1)(p)->GetMinimum(minval);\
-}\
-int Type ## _GetMinimumBin ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetMinimumBin,TH1)(p)->GetMinimumBin();\
-}\
-double Type ## _GetMinimumStored ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetMinimumStored,TH1)(p)->GetMinimumStored();\
-}\
-double Type ## _GetMean ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,GetMean,TH1)(p)->GetMean(axis);\
-}\
-double Type ## _GetMeanError ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,GetMeanError,TH1)(p)->GetMeanError(axis);\
-}\
-double Type ## _GetNbinsX ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNbinsX,TH1)(p)->GetNbinsX();\
-}\
-double Type ## _GetNbinsY ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNbinsY,TH1)(p)->GetNbinsY();\
-}\
-double Type ## _GetNbinsZ ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetNbinsZ,TH1)(p)->GetNbinsZ();\
-}\
-int Type ## _getQuantilesTH1 ( Type ## _p p, int nprobSum, double * q, double * pbSum )\
-{\
-return TYPECASTMETHOD(Type,getQuantilesTH1,TH1)(p)->GetQuantiles(nprobSum, q, pbSum);\
-}\
-double Type ## _GetRandom ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetRandom,TH1)(p)->GetRandom();\
-}\
-void Type ## _GetStats ( Type ## _p p, double * stats )\
-{\
-TYPECASTMETHOD(Type,GetStats,TH1)(p)->GetStats(stats);\
-}\
-double Type ## _GetSumOfWeights ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetSumOfWeights,TH1)(p)->GetSumOfWeights();\
-}\
-TArrayD_p Type ## _GetSumw2 ( Type ## _p p )\
-{\
-return to_nonconst<TArrayD_t,TArrayD>((TArrayD*)TYPECASTMETHOD(Type,GetSumw2,TH1)(p)->GetSumw2());\
-}\
-int Type ## _GetSumw2N ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,GetSumw2N,TH1)(p)->GetSumw2N();\
-}\
-double Type ## _GetRMS ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,GetRMS,TH1)(p)->GetRMS(axis);\
-}\
-double Type ## _GetRMSError ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,GetRMSError,TH1)(p)->GetRMSError(axis);\
-}\
-double Type ## _GetSkewness ( Type ## _p p, int axis )\
-{\
-return TYPECASTMETHOD(Type,GetSkewness,TH1)(p)->GetSkewness(axis);\
-}\
-double Type ## _integral1 ( Type ## _p p, int binx1, int binx2, const char* option )\
-{\
-return TYPECASTMETHOD(Type,integral1,TH1)(p)->Integral(binx1, binx2, option);\
-}\
-double Type ## _interpolate1 ( Type ## _p p, double x )\
-{\
-return TYPECASTMETHOD(Type,interpolate1,TH1)(p)->Interpolate(x);\
-}\
-double Type ## _interpolate2 ( Type ## _p p, double x, double y )\
-{\
-return TYPECASTMETHOD(Type,interpolate2,TH1)(p)->Interpolate(x, y);\
-}\
-double Type ## _interpolate3 ( Type ## _p p, double x, double y, double z )\
-{\
-return TYPECASTMETHOD(Type,interpolate3,TH1)(p)->Interpolate(x, y, z);\
-}\
-double Type ## _KolmogorovTest ( Type ## _p p, TH1_p h2, const char* option )\
-{\
-return TYPECASTMETHOD(Type,KolmogorovTest,TH1)(p)->KolmogorovTest(to_nonconst<TH1,TH1_t>(h2), option);\
-}\
-void Type ## _LabelsDeflate ( Type ## _p p, const char* axis )\
-{\
-TYPECASTMETHOD(Type,LabelsDeflate,TH1)(p)->LabelsDeflate(axis);\
-}\
-void Type ## _LabelsInflate ( Type ## _p p, const char* axis )\
-{\
-TYPECASTMETHOD(Type,LabelsInflate,TH1)(p)->LabelsInflate(axis);\
-}\
-void Type ## _LabelsOption ( Type ## _p p, const char* option, const char* axis )\
-{\
-TYPECASTMETHOD(Type,LabelsOption,TH1)(p)->LabelsOption(option, axis);\
-}\
-void Type ## _multiflyF ( Type ## _p p, TF1_p h1, double c1 )\
-{\
-TYPECASTMETHOD(Type,multiflyF,TH1)(p)->Multiply(to_nonconst<TF1,TF1_t>(h1), c1);\
-}\
-void Type ## _Multiply ( Type ## _p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option )\
-{\
-TYPECASTMETHOD(Type,Multiply,TH1)(p)->Multiply(to_nonconst<TH1,TH1_t>(h1), to_nonconst<TH1,TH1_t>(h2), c1, c2, option);\
-}\
-void Type ## _PutStats ( Type ## _p p, double * stats )\
-{\
-TYPECASTMETHOD(Type,PutStats,TH1)(p)->PutStats(stats);\
-}\
-TH1_p Type ## _Rebin ( Type ## _p p, int ngroup, const char* newname, double * xbins )\
-{\
-return to_nonconst<TH1_t,TH1>((TH1*)TYPECASTMETHOD(Type,Rebin,TH1)(p)->Rebin(ngroup, newname, xbins));\
-}\
-void Type ## _RebinAxis ( Type ## _p p, double x, TAxis_p axis )\
-{\
-TYPECASTMETHOD(Type,RebinAxis,TH1)(p)->RebinAxis(x, to_nonconst<TAxis,TAxis_t>(axis));\
-}\
-void Type ## _Rebuild ( Type ## _p p, const char* option )\
-{\
-TYPECASTMETHOD(Type,Rebuild,TH1)(p)->Rebuild(option);\
-}\
-void Type ## _RecursiveRemove ( Type ## _p p, TObject_p obj )\
-{\
-TYPECASTMETHOD(Type,RecursiveRemove,TH1)(p)->RecursiveRemove(to_nonconst<TObject,TObject_t>(obj));\
-}\
-void Type ## _Reset ( Type ## _p p, const char* option )\
-{\
-TYPECASTMETHOD(Type,Reset,TH1)(p)->Reset(option);\
-}\
-void Type ## _ResetStats ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,ResetStats,TH1)(p)->ResetStats();\
-}\
-void Type ## _Scale ( Type ## _p p, double c1, const char* option )\
-{\
-TYPECASTMETHOD(Type,Scale,TH1)(p)->Scale(c1, option);\
-}\
-void Type ## _setAxisColorA ( Type ## _p p, int color, const char* axis )\
-{\
-TYPECASTMETHOD(Type,setAxisColorA,TH1)(p)->SetAxisColor(color, axis);\
-}\
-void Type ## _SetAxisRange ( Type ## _p p, double xmin, double xmax, const char* axis )\
-{\
-TYPECASTMETHOD(Type,SetAxisRange,TH1)(p)->SetAxisRange(xmin, xmax, axis);\
-}\
-void Type ## _SetBarOffset ( Type ## _p p, double offset )\
-{\
-TYPECASTMETHOD(Type,SetBarOffset,TH1)(p)->SetBarOffset(offset);\
-}\
-void Type ## _SetBarWidth ( Type ## _p p, double width )\
-{\
-TYPECASTMETHOD(Type,SetBarWidth,TH1)(p)->SetBarWidth(width);\
-}\
-void Type ## _setBinContent1 ( Type ## _p p, int bin, double content )\
-{\
-TYPECASTMETHOD(Type,setBinContent1,TH1)(p)->SetBinContent(bin, content);\
-}\
-void Type ## _setBinContent2 ( Type ## _p p, int binx, int biny, double content )\
-{\
-TYPECASTMETHOD(Type,setBinContent2,TH1)(p)->SetBinContent(binx, biny, content);\
-}\
-void Type ## _setBinContent3 ( Type ## _p p, int binx, int biny, int binz, double content )\
-{\
-TYPECASTMETHOD(Type,setBinContent3,TH1)(p)->SetBinContent(binx, biny, binz, content);\
-}\
-void Type ## _setBinError1 ( Type ## _p p, int bin, double error )\
-{\
-TYPECASTMETHOD(Type,setBinError1,TH1)(p)->SetBinError(bin, error);\
-}\
-void Type ## _setBinError2 ( Type ## _p p, int binx, int biny, double error )\
-{\
-TYPECASTMETHOD(Type,setBinError2,TH1)(p)->SetBinError(binx, biny, error);\
-}\
-void Type ## _setBinError3 ( Type ## _p p, int binx, int biny, int binz, double error )\
-{\
-TYPECASTMETHOD(Type,setBinError3,TH1)(p)->SetBinError(binx, biny, binz, error);\
-}\
-void Type ## _setBins1 ( Type ## _p p, int nx, double * xBins )\
-{\
-TYPECASTMETHOD(Type,setBins1,TH1)(p)->SetBins(nx, xBins);\
-}\
-void Type ## _setBins2 ( Type ## _p p, int nx, double * xBins, int ny, double * yBins )\
-{\
-TYPECASTMETHOD(Type,setBins2,TH1)(p)->SetBins(nx, xBins, ny, yBins);\
-}\
-void Type ## _setBins3 ( Type ## _p p, int nx, double * xBins, int ny, double * yBins, int nz, double * zBins )\
-{\
-TYPECASTMETHOD(Type,setBins3,TH1)(p)->SetBins(nx, xBins, ny, yBins, nz, zBins);\
-}\
-void Type ## _SetBinsLength ( Type ## _p p, int bin )\
-{\
-TYPECASTMETHOD(Type,SetBinsLength,TH1)(p)->SetBinsLength(bin);\
-}\
-void Type ## _SetBuffer ( Type ## _p p, int buffersize, const char* option )\
-{\
-TYPECASTMETHOD(Type,SetBuffer,TH1)(p)->SetBuffer(buffersize, option);\
-}\
-void Type ## _SetCellContent ( Type ## _p p, int binx, int biny, double content )\
-{\
-TYPECASTMETHOD(Type,SetCellContent,TH1)(p)->SetCellContent(binx, biny, content);\
-}\
-void Type ## _SetContent ( Type ## _p p, double * content )\
-{\
-TYPECASTMETHOD(Type,SetContent,TH1)(p)->SetContent(content);\
-}\
-void Type ## _SetContour ( Type ## _p p, int nlevels, double * levels )\
-{\
-TYPECASTMETHOD(Type,SetContour,TH1)(p)->SetContour(nlevels, levels);\
-}\
-void Type ## _SetContourLevel ( Type ## _p p, int level, double value )\
-{\
-TYPECASTMETHOD(Type,SetContourLevel,TH1)(p)->SetContourLevel(level, value);\
-}\
-void Type ## _SetDirectory ( Type ## _p p, TDirectory_p dir )\
-{\
-TYPECASTMETHOD(Type,SetDirectory,TH1)(p)->SetDirectory(to_nonconst<TDirectory,TDirectory_t>(dir));\
-}\
-void Type ## _SetEntries ( Type ## _p p, double n )\
-{\
-TYPECASTMETHOD(Type,SetEntries,TH1)(p)->SetEntries(n);\
-}\
-void Type ## _SetError ( Type ## _p p, double * error )\
-{\
-TYPECASTMETHOD(Type,SetError,TH1)(p)->SetError(error);\
-}\
-void Type ## _setLabelColorA ( Type ## _p p, int color, const char* axis )\
-{\
-TYPECASTMETHOD(Type,setLabelColorA,TH1)(p)->SetLabelColor(color, axis);\
-}\
-void Type ## _setLabelSizeA ( Type ## _p p, double size, const char* axis )\
-{\
-TYPECASTMETHOD(Type,setLabelSizeA,TH1)(p)->SetLabelSize(size, axis);\
-}\
-void Type ## _setLabelFontA ( Type ## _p p, int font, const char* axis )\
-{\
-TYPECASTMETHOD(Type,setLabelFontA,TH1)(p)->SetLabelFont(font, axis);\
-}\
-void Type ## _setLabelOffsetA ( Type ## _p p, double offset, const char* axis )\
-{\
-TYPECASTMETHOD(Type,setLabelOffsetA,TH1)(p)->SetLabelOffset(offset, axis);\
-}\
-void Type ## _SetMaximum ( Type ## _p p, double maximum )\
-{\
-TYPECASTMETHOD(Type,SetMaximum,TH1)(p)->SetMaximum(maximum);\
-}\
-void Type ## _SetMinimum ( Type ## _p p, double minimum )\
-{\
-TYPECASTMETHOD(Type,SetMinimum,TH1)(p)->SetMinimum(minimum);\
-}\
-void Type ## _SetNormFactor ( Type ## _p p, double factor )\
-{\
-TYPECASTMETHOD(Type,SetNormFactor,TH1)(p)->SetNormFactor(factor);\
-}\
-void Type ## _SetStats ( Type ## _p p, int stats )\
-{\
-TYPECASTMETHOD(Type,SetStats,TH1)(p)->SetStats(stats);\
-}\
-void Type ## _SetOption ( Type ## _p p, const char* option )\
-{\
-TYPECASTMETHOD(Type,SetOption,TH1)(p)->SetOption(option);\
-}\
-void Type ## _SetXTitle ( Type ## _p p, const char* title )\
-{\
-TYPECASTMETHOD(Type,SetXTitle,TH1)(p)->SetXTitle(title);\
-}\
-void Type ## _SetYTitle ( Type ## _p p, const char* title )\
-{\
-TYPECASTMETHOD(Type,SetYTitle,TH1)(p)->SetYTitle(title);\
-}\
-void Type ## _SetZTitle ( Type ## _p p, const char* title )\
-{\
-TYPECASTMETHOD(Type,SetZTitle,TH1)(p)->SetZTitle(title);\
-}\
-TH1_p Type ## _ShowBackground ( Type ## _p p, int niter, const char* option )\
-{\
-return to_nonconst<TH1_t,TH1>((TH1*)TYPECASTMETHOD(Type,ShowBackground,TH1)(p)->ShowBackground(niter, option));\
-}\
-int Type ## _ShowPeaks ( Type ## _p p, double sigma, const char* option, double threshold )\
-{\
-return TYPECASTMETHOD(Type,ShowPeaks,TH1)(p)->ShowPeaks(sigma, option, threshold);\
-}\
-void Type ## _Smooth ( Type ## _p p, int ntimes, const char* option )\
-{\
-TYPECASTMETHOD(Type,Smooth,TH1)(p)->Smooth(ntimes, option);\
-}\
-void Type ## _Sumw2 ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,Sumw2,TH1)(p)->Sumw2();\
-}
-
-#undef TH1_DEF_NONVIRT
-#define TH1_DEF_NONVIRT(Type)\
-Type ## _p Type ## _tH1GetAsymmetry ( Type ## _p p, TH1_p h2, double c2, double dc2 )\
-{\
-return to_nonconst<Type ## _t, Type>((Type *)TYPECASTMETHOD(Type,tH1GetAsymmetry,TH1)(p)->GetAsymmetry(to_nonconst<TH1,TH1_t>(h2), c2, dc2)) ;\
-}\
-int Type ## _tH1GetBufferLength ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tH1GetBufferLength,TH1)(p)->GetBufferLength();\
-}\
-int Type ## _tH1GetBufferSize ( Type ## _p p )\
-{\
-return TYPECASTMETHOD(Type,tH1GetBufferSize,TH1)(p)->GetBufferSize();\
-}\
-int Type ## _tH1GetDefaultBufferSize (  )\
-{\
-return TH1::GetDefaultBufferSize();\
-}\
-int Type ## _tH1GetDefaultSumw2 (  )\
-{\
-return TH1::GetDefaultSumw2();\
-}\
-TDirectory_p Type ## _tH1GetDirectory ( Type ## _p p )\
-{\
-return to_nonconst<TDirectory_t,TDirectory>((TDirectory*)TYPECASTMETHOD(Type,tH1GetDirectory,TH1)(p)->GetDirectory());\
-}\
-int Type ## _tH1IsBinOverflow ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,tH1IsBinOverflow,TH1)(p)->IsBinOverflow(bin);\
-}\
-int Type ## _tH1IsBinUnderflow ( Type ## _p p, int bin )\
-{\
-return TYPECASTMETHOD(Type,tH1IsBinUnderflow,TH1)(p)->IsBinUnderflow(bin);\
-}\
-void Type ## _tH1SetDefaultBufferSize ( int buffersize )\
-{\
-TH1::SetDefaultBufferSize(buffersize);\
-}\
-void Type ## _tH1SetDefaultSumw2 ( int sumw2 )\
-{\
-TH1::SetDefaultSumw2(sumw2);\
-}\
-void Type ## _tH1SmoothArray ( int NN, double * XX, int ntimes )\
-{\
-TH1::SmoothArray(NN, XX, ntimes);\
-}\
-void Type ## _tH1StatOverflows ( int flag )\
-{\
-TH1::StatOverflows(flag);\
-}\
-void Type ## _tH1UseCurrentStyle ( Type ## _p p )\
-{\
-TYPECASTMETHOD(Type,tH1UseCurrentStyle,TH1)(p)->UseCurrentStyle();\
-}
-
-TNAMED_DECL_VIRT(TH1);
-TATTLINE_DECL_VIRT(TH1);
-TATTFILL_DECL_VIRT(TH1);
-TATTMARKER_DECL_VIRT(TH1);
-TOBJECT_DECL_VIRT(TH1);
-DELETABLE_DECL_VIRT(TH1);
-
-
-TH1_DECL_VIRT(TH1);
-
-
-TH1_DECL_NONVIRT(TH1);
-
-
-#endif // __HROOT_HIST__TH1__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma once
+
+
+#include "HROOT-histType.h"
+
+#include "HROOTCoreTNamed.h"
+
+#include "HROOTCoreTAttLine.h"
+
+#include "HROOTCoreTAttFill.h"
+
+#include "HROOTCoreTAttMarker.h"
+
+#include "HROOTCoreTObject.h"
+
+#include "STDDeletable.h"
+
+#include "HROOT-coreType.h"
+
+
+#define TH1_DECL_VIRT(Type) \
+void Type##_Add ( Type##_p p, TH1_p h1, double c1 );\
+void Type##_AddBinContent ( Type##_p p, int bin, double w );\
+double Type##_Chi2Test ( Type##_p p, TH1_p h2, const char* option, double* res );\
+void Type##_DirectoryAutoAdd ( Type##_p p, TDirectory_p dir );\
+void Type##_Divide ( Type##_p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option );\
+Type##_p Type##_drawCopyTH1 ( Type##_p p, const char* option );\
+TH1_p Type##_DrawNormalized ( Type##_p p, const char* option, double norm );\
+void Type##_drawPanelTH1 ( Type##_p p );\
+int Type##_BufferEmpty ( Type##_p p, int action );\
+void Type##_evalF ( Type##_p p, TF1_p f1, const char* option );\
+TH1_p Type##_FFT ( Type##_p p, TH1_p h_output, const char* option );\
+int Type##_fill1 ( Type##_p p, double x );\
+int Type##_fill1w ( Type##_p p, double x, double w );\
+void Type##_fillN1 ( Type##_p p, int ntimes, double* x, double* w, int stride );\
+void Type##_FillRandom ( Type##_p p, TH1_p h, int ntimes );\
+int Type##_FindBin ( Type##_p p, double x, double y, double z );\
+int Type##_FindFixBin ( Type##_p p, double x, double y, double z );\
+int Type##_FindFirstBinAbove ( Type##_p p, double threshold, int axis );\
+int Type##_FindLastBinAbove ( Type##_p p, double threshold, int axis );\
+void Type##_Fit ( Type##_p p, TF1_p f1, const char* option, const char* goption, double xmin, double xmax );\
+void Type##_FitPanelTH1 ( Type##_p p );\
+int Type##_getNdivisionA ( Type##_p p, const char* axis );\
+short Type##_getAxisColorA ( Type##_p p, const char* axis );\
+short Type##_getLabelColorA ( Type##_p p, const char* axis );\
+short Type##_getLabelFontA ( Type##_p p, const char* axis );\
+float Type##_getLabelOffsetA ( Type##_p p, const char* axis );\
+float Type##_getLabelSizeA ( Type##_p p, const char* axis );\
+short Type##_getTitleFontA ( Type##_p p, const char* axis );\
+float Type##_getTitleOffsetA ( Type##_p p, const char* axis );\
+float Type##_getTitleSizeA ( Type##_p p, const char* axis );\
+float Type##_getTickLengthA ( Type##_p p, const char* axis );\
+float Type##_GetBarOffset ( Type##_p p );\
+float Type##_GetBarWidth ( Type##_p p );\
+int Type##_GetContour ( Type##_p p, double* levels );\
+double Type##_GetContourLevel ( Type##_p p, int level );\
+double Type##_GetContourLevelPad ( Type##_p p, int level );\
+int Type##_GetBin ( Type##_p p, int binx, int biny, int binz );\
+double Type##_GetBinCenter ( Type##_p p, int bin );\
+double Type##_GetBinContent1 ( Type##_p p, int binx );\
+double Type##_GetBinContent2 ( Type##_p p, int binx, int biny );\
+double Type##_GetBinContent3 ( Type##_p p, int binx, int biny, int binz );\
+double Type##_GetBinError1 ( Type##_p p, int binx );\
+double Type##_GetBinError2 ( Type##_p p, int binx, int biny );\
+double Type##_GetBinError3 ( Type##_p p, int binx, int biny, int binz );\
+double Type##_GetBinLowEdge ( Type##_p p, int bin );\
+double Type##_GetBinWidth ( Type##_p p, int bin );\
+double Type##_GetCellContent ( Type##_p p, int binx, int biny );\
+double Type##_GetCellError ( Type##_p p, int binx, int biny );\
+double Type##_GetEntries ( Type##_p p );\
+double Type##_GetEffectiveEntries ( Type##_p p );\
+TF1_p Type##_GetFunction ( Type##_p p, const char* name );\
+int Type##_GetDimension ( Type##_p p );\
+double Type##_GetKurtosis ( Type##_p p, int axis );\
+void Type##_GetLowEdge ( Type##_p p, double* edge );\
+double Type##_getMaximumTH1 ( Type##_p p, double maxval );\
+int Type##_GetMaximumBin ( Type##_p p );\
+double Type##_GetMaximumStored ( Type##_p p );\
+double Type##_getMinimumTH1 ( Type##_p p, double minval );\
+int Type##_GetMinimumBin ( Type##_p p );\
+double Type##_GetMinimumStored ( Type##_p p );\
+double Type##_GetMean ( Type##_p p, int axis );\
+double Type##_GetMeanError ( Type##_p p, int axis );\
+double Type##_GetNbinsX ( Type##_p p );\
+double Type##_GetNbinsY ( Type##_p p );\
+double Type##_GetNbinsZ ( Type##_p p );\
+int Type##_getQuantilesTH1 ( Type##_p p, int nprobSum, double* q, double* pbSum );\
+double Type##_GetRandom ( Type##_p p );\
+void Type##_GetStats ( Type##_p p, double* stats );\
+double Type##_GetSumOfWeights ( Type##_p p );\
+TArrayD_p Type##_GetSumw2 ( Type##_p p );\
+int Type##_GetSumw2N ( Type##_p p );\
+double Type##_GetRMS ( Type##_p p, int axis );\
+double Type##_GetRMSError ( Type##_p p, int axis );\
+double Type##_GetSkewness ( Type##_p p, int axis );\
+double Type##_interpolate3 ( Type##_p p, double x, double y, double z );\
+double Type##_KolmogorovTest ( Type##_p p, TH1_p h2, const char* option );\
+void Type##_LabelsDeflate ( Type##_p p, const char* axis );\
+void Type##_LabelsInflate ( Type##_p p, const char* axis );\
+void Type##_LabelsOption ( Type##_p p, const char* option, const char* axis );\
+void Type##_multiflyF ( Type##_p p, TF1_p h1, double c1 );\
+void Type##_Multiply ( Type##_p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option );\
+void Type##_PutStats ( Type##_p p, double* stats );\
+TH1_p Type##_Rebin ( Type##_p p, int ngroup, const char* newname, double* xbins );\
+void Type##_RebinAxis ( Type##_p p, double x, TAxis_p axis );\
+void Type##_Rebuild ( Type##_p p, const char* option );\
+void Type##_RecursiveRemove ( Type##_p p, TObject_p obj );\
+void Type##_Reset ( Type##_p p, const char* option );\
+void Type##_ResetStats ( Type##_p p );\
+void Type##_Scale ( Type##_p p, double c1, const char* option );\
+void Type##_setAxisColorA ( Type##_p p, short color, const char* axis );\
+void Type##_SetAxisRange ( Type##_p p, double xmin, double xmax, const char* axis );\
+void Type##_SetBarOffset ( Type##_p p, float offset );\
+void Type##_SetBarWidth ( Type##_p p, float width );\
+void Type##_setBinContent1 ( Type##_p p, int bin, double content );\
+void Type##_setBinContent2 ( Type##_p p, int binx, int biny, double content );\
+void Type##_setBinContent3 ( Type##_p p, int binx, int biny, int binz, double content );\
+void Type##_setBinError1 ( Type##_p p, int bin, double error );\
+void Type##_setBinError2 ( Type##_p p, int binx, int biny, double error );\
+void Type##_setBinError3 ( Type##_p p, int binx, int biny, int binz, double error );\
+void Type##_setBins1 ( Type##_p p, int nx, double* xBins );\
+void Type##_setBins2 ( Type##_p p, int nx, double* xBins, int ny, double* yBins );\
+void Type##_setBins3 ( Type##_p p, int nx, double* xBins, int ny, double* yBins, int nz, double* zBins );\
+void Type##_SetBinsLength ( Type##_p p, int bin );\
+void Type##_SetBuffer ( Type##_p p, int buffersize, const char* option );\
+void Type##_SetCellContent ( Type##_p p, int binx, int biny, double content );\
+void Type##_SetContent ( Type##_p p, double* content );\
+void Type##_SetContour ( Type##_p p, int nlevels, double* levels );\
+void Type##_SetContourLevel ( Type##_p p, int level, double value );\
+void Type##_SetDirectory ( Type##_p p, TDirectory_p dir );\
+void Type##_SetEntries ( Type##_p p, double n );\
+void Type##_SetError ( Type##_p p, double* error );\
+void Type##_setLabelColorA ( Type##_p p, short color, const char* axis );\
+void Type##_setLabelSizeA ( Type##_p p, float size, const char* axis );\
+void Type##_setLabelFontA ( Type##_p p, short font, const char* axis );\
+void Type##_setLabelOffsetA ( Type##_p p, float offset, const char* axis );\
+void Type##_SetMaximum ( Type##_p p, double maximum );\
+void Type##_SetMinimum ( Type##_p p, double minimum );\
+void Type##_SetNormFactor ( Type##_p p, double factor );\
+void Type##_SetStats ( Type##_p p, bool stats );\
+void Type##_SetOption ( Type##_p p, const char* option );\
+void Type##_SetXTitle ( Type##_p p, const char* title );\
+void Type##_SetYTitle ( Type##_p p, const char* title );\
+void Type##_SetZTitle ( Type##_p p, const char* title );\
+TH1_p Type##_ShowBackground ( Type##_p p, int niter, const char* option );\
+int Type##_ShowPeaks ( Type##_p p, double sigma, const char* option, double threshold );\
+void Type##_Smooth ( Type##_p p, int ntimes, const char* option );\
+void Type##_Sumw2 ( Type##_p p );
+
+
+#define TH1_DECL_NONVIRT(Type) \
+Type##_p Type##_tH1_GetAsymmetry ( Type##_p p, TH1_p h2, double c2, double dc2 );\
+int Type##_tH1_GetBufferLength ( Type##_p p );\
+int Type##_tH1_GetBufferSize ( Type##_p p );\
+int Type##_tH1_GetDefaultBufferSize (  );\
+bool Type##_tH1_GetDefaultSumw2 (  );\
+TDirectory_p Type##_tH1_GetDirectory ( Type##_p p );\
+TAxis_p Type##_tH1_GetXaxis ( Type##_p p );\
+TAxis_p Type##_tH1_GetYaxis ( Type##_p p );\
+TAxis_p Type##_tH1_GetZaxis ( Type##_p p );\
+bool Type##_tH1_IsBinOverflow ( Type##_p p, int bin );\
+bool Type##_tH1_IsBinUnderflow ( Type##_p p, int bin );\
+void Type##_tH1_SetDefaultBufferSize ( int buffersize );\
+void Type##_tH1_SetDefaultSumw2 ( bool sumw2 );\
+void Type##_tH1_SmoothArray ( int NN, double* XX, int ntimes );\
+void Type##_tH1_StatOverflows ( bool flag );\
+void Type##_tH1_UseCurrentStyle ( Type##_p p );
+
+
+#define TH1_DECL_ACCESSOR(Type) \
+
+
+
+#define TH1_DEF_VIRT(Type) \
+void Type##_Add ( Type##_p p, TH1_p h1, double c1 ) {\
+((TYPECASTMETHOD(Type, Add, TH1))(p))->Add(from_nonconst_to_nonconst<TH1, TH1_t>(h1), c1);\
+}\
+\
+void Type##_AddBinContent ( Type##_p p, int bin, double w ) {\
+((TYPECASTMETHOD(Type, AddBinContent, TH1))(p))->AddBinContent(bin, w);\
+}\
+\
+double Type##_Chi2Test ( Type##_p p, TH1_p h2, const char* option, double* res ) {\
+return ((TYPECASTMETHOD(Type, Chi2Test, TH1))(p))->Chi2Test(from_nonconst_to_nonconst<TH1, TH1_t>(h2), option, res);\
+}\
+\
+void Type##_DirectoryAutoAdd ( Type##_p p, TDirectory_p dir ) {\
+((TYPECASTMETHOD(Type, DirectoryAutoAdd, TH1))(p))->DirectoryAutoAdd(from_nonconst_to_nonconst<TDirectory, TDirectory_t>(dir));\
+}\
+\
+void Type##_Divide ( Type##_p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option ) {\
+((TYPECASTMETHOD(Type, Divide, TH1))(p))->Divide(from_nonconst_to_nonconst<TH1, TH1_t>(h1), from_nonconst_to_nonconst<TH1, TH1_t>(h2), c1, c2, option);\
+}\
+\
+Type##_p Type##_drawCopyTH1 ( Type##_p p, const char* option ) {\
+return from_nonconst_to_nonconst<Type##_t, Type>((Type*)((TYPECASTMETHOD(Type, drawCopyTH1, TH1))(p))->DrawCopy(option));\
+}\
+\
+TH1_p Type##_DrawNormalized ( Type##_p p, const char* option, double norm ) {\
+return from_nonconst_to_nonconst<TH1_t, TH1>((TH1*)((TYPECASTMETHOD(Type, DrawNormalized, TH1))(p))->DrawNormalized(option, norm));\
+}\
+\
+void Type##_drawPanelTH1 ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, drawPanelTH1, TH1))(p))->DrawPanel();\
+}\
+\
+int Type##_BufferEmpty ( Type##_p p, int action ) {\
+return ((TYPECASTMETHOD(Type, BufferEmpty, TH1))(p))->BufferEmpty(action);\
+}\
+\
+void Type##_evalF ( Type##_p p, TF1_p f1, const char* option ) {\
+((TYPECASTMETHOD(Type, evalF, TH1))(p))->Eval(from_nonconst_to_nonconst<TF1, TF1_t>(f1), option);\
+}\
+\
+TH1_p Type##_FFT ( Type##_p p, TH1_p h_output, const char* option ) {\
+return from_nonconst_to_nonconst<TH1_t, TH1>((TH1*)((TYPECASTMETHOD(Type, FFT, TH1))(p))->FFT(from_nonconst_to_nonconst<TH1, TH1_t>(h_output), option));\
+}\
+\
+int Type##_fill1 ( Type##_p p, double x ) {\
+return ((TYPECASTMETHOD(Type, fill1, TH1))(p))->Fill(x);\
+}\
+\
+int Type##_fill1w ( Type##_p p, double x, double w ) {\
+return ((TYPECASTMETHOD(Type, fill1w, TH1))(p))->Fill(x, w);\
+}\
+\
+void Type##_fillN1 ( Type##_p p, int ntimes, double* x, double* w, int stride ) {\
+((TYPECASTMETHOD(Type, fillN1, TH1))(p))->FillN(ntimes, x, w, stride);\
+}\
+\
+void Type##_FillRandom ( Type##_p p, TH1_p h, int ntimes ) {\
+((TYPECASTMETHOD(Type, FillRandom, TH1))(p))->FillRandom(from_nonconst_to_nonconst<TH1, TH1_t>(h), ntimes);\
+}\
+\
+int Type##_FindBin ( Type##_p p, double x, double y, double z ) {\
+return ((TYPECASTMETHOD(Type, FindBin, TH1))(p))->FindBin(x, y, z);\
+}\
+\
+int Type##_FindFixBin ( Type##_p p, double x, double y, double z ) {\
+return ((TYPECASTMETHOD(Type, FindFixBin, TH1))(p))->FindFixBin(x, y, z);\
+}\
+\
+int Type##_FindFirstBinAbove ( Type##_p p, double threshold, int axis ) {\
+return ((TYPECASTMETHOD(Type, FindFirstBinAbove, TH1))(p))->FindFirstBinAbove(threshold, axis);\
+}\
+\
+int Type##_FindLastBinAbove ( Type##_p p, double threshold, int axis ) {\
+return ((TYPECASTMETHOD(Type, FindLastBinAbove, TH1))(p))->FindLastBinAbove(threshold, axis);\
+}\
+\
+void Type##_Fit ( Type##_p p, TF1_p f1, const char* option, const char* goption, double xmin, double xmax ) {\
+((TYPECASTMETHOD(Type, Fit, TH1))(p))->Fit(from_nonconst_to_nonconst<TF1, TF1_t>(f1), option, goption, xmin, xmax);\
+}\
+\
+void Type##_FitPanelTH1 ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, FitPanelTH1, TH1))(p))->FitPanel();\
+}\
+\
+int Type##_getNdivisionA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getNdivisionA, TH1))(p))->GetNdivisions(axis);\
+}\
+\
+short Type##_getAxisColorA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getAxisColorA, TH1))(p))->GetAxisColor(axis);\
+}\
+\
+short Type##_getLabelColorA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getLabelColorA, TH1))(p))->GetLabelColor(axis);\
+}\
+\
+short Type##_getLabelFontA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getLabelFontA, TH1))(p))->GetLabelFont(axis);\
+}\
+\
+float Type##_getLabelOffsetA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getLabelOffsetA, TH1))(p))->GetLabelOffset(axis);\
+}\
+\
+float Type##_getLabelSizeA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getLabelSizeA, TH1))(p))->GetLabelSize(axis);\
+}\
+\
+short Type##_getTitleFontA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getTitleFontA, TH1))(p))->GetTitleFont(axis);\
+}\
+\
+float Type##_getTitleOffsetA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getTitleOffsetA, TH1))(p))->GetTitleOffset(axis);\
+}\
+\
+float Type##_getTitleSizeA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getTitleSizeA, TH1))(p))->GetTitleSize(axis);\
+}\
+\
+float Type##_getTickLengthA ( Type##_p p, const char* axis ) {\
+return ((TYPECASTMETHOD(Type, getTickLengthA, TH1))(p))->GetTickLength(axis);\
+}\
+\
+float Type##_GetBarOffset ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetBarOffset, TH1))(p))->GetBarOffset();\
+}\
+\
+float Type##_GetBarWidth ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetBarWidth, TH1))(p))->GetBarWidth();\
+}\
+\
+int Type##_GetContour ( Type##_p p, double* levels ) {\
+return ((TYPECASTMETHOD(Type, GetContour, TH1))(p))->GetContour(levels);\
+}\
+\
+double Type##_GetContourLevel ( Type##_p p, int level ) {\
+return ((TYPECASTMETHOD(Type, GetContourLevel, TH1))(p))->GetContourLevel(level);\
+}\
+\
+double Type##_GetContourLevelPad ( Type##_p p, int level ) {\
+return ((TYPECASTMETHOD(Type, GetContourLevelPad, TH1))(p))->GetContourLevelPad(level);\
+}\
+\
+int Type##_GetBin ( Type##_p p, int binx, int biny, int binz ) {\
+return ((TYPECASTMETHOD(Type, GetBin, TH1))(p))->GetBin(binx, biny, binz);\
+}\
+\
+double Type##_GetBinCenter ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetBinCenter, TH1))(p))->GetBinCenter(bin);\
+}\
+\
+double Type##_GetBinContent1 ( Type##_p p, int binx ) {\
+return ((TYPECASTMETHOD(Type, GetBinContent1, TH1))(p))->GetBinContent(binx);\
+}\
+\
+double Type##_GetBinContent2 ( Type##_p p, int binx, int biny ) {\
+return ((TYPECASTMETHOD(Type, GetBinContent2, TH1))(p))->GetBinContent(binx, biny);\
+}\
+\
+double Type##_GetBinContent3 ( Type##_p p, int binx, int biny, int binz ) {\
+return ((TYPECASTMETHOD(Type, GetBinContent3, TH1))(p))->GetBinContent(binx, biny, binz);\
+}\
+\
+double Type##_GetBinError1 ( Type##_p p, int binx ) {\
+return ((TYPECASTMETHOD(Type, GetBinError1, TH1))(p))->GetBinError(binx);\
+}\
+\
+double Type##_GetBinError2 ( Type##_p p, int binx, int biny ) {\
+return ((TYPECASTMETHOD(Type, GetBinError2, TH1))(p))->GetBinError(binx, biny);\
+}\
+\
+double Type##_GetBinError3 ( Type##_p p, int binx, int biny, int binz ) {\
+return ((TYPECASTMETHOD(Type, GetBinError3, TH1))(p))->GetBinError(binx, biny, binz);\
+}\
+\
+double Type##_GetBinLowEdge ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetBinLowEdge, TH1))(p))->GetBinLowEdge(bin);\
+}\
+\
+double Type##_GetBinWidth ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, GetBinWidth, TH1))(p))->GetBinWidth(bin);\
+}\
+\
+double Type##_GetCellContent ( Type##_p p, int binx, int biny ) {\
+return ((TYPECASTMETHOD(Type, GetCellContent, TH1))(p))->GetCellContent(binx, biny);\
+}\
+\
+double Type##_GetCellError ( Type##_p p, int binx, int biny ) {\
+return ((TYPECASTMETHOD(Type, GetCellError, TH1))(p))->GetCellError(binx, biny);\
+}\
+\
+double Type##_GetEntries ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetEntries, TH1))(p))->GetEntries();\
+}\
+\
+double Type##_GetEffectiveEntries ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetEffectiveEntries, TH1))(p))->GetEffectiveEntries();\
+}\
+\
+TF1_p Type##_GetFunction ( Type##_p p, const char* name ) {\
+return from_nonconst_to_nonconst<TF1_t, TF1>((TF1*)((TYPECASTMETHOD(Type, GetFunction, TH1))(p))->GetFunction(name));\
+}\
+\
+int Type##_GetDimension ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetDimension, TH1))(p))->GetDimension();\
+}\
+\
+double Type##_GetKurtosis ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, GetKurtosis, TH1))(p))->GetKurtosis(axis);\
+}\
+\
+void Type##_GetLowEdge ( Type##_p p, double* edge ) {\
+((TYPECASTMETHOD(Type, GetLowEdge, TH1))(p))->GetLowEdge(edge);\
+}\
+\
+double Type##_getMaximumTH1 ( Type##_p p, double maxval ) {\
+return ((TYPECASTMETHOD(Type, getMaximumTH1, TH1))(p))->GetMaximum(maxval);\
+}\
+\
+int Type##_GetMaximumBin ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetMaximumBin, TH1))(p))->GetMaximumBin();\
+}\
+\
+double Type##_GetMaximumStored ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetMaximumStored, TH1))(p))->GetMaximumStored();\
+}\
+\
+double Type##_getMinimumTH1 ( Type##_p p, double minval ) {\
+return ((TYPECASTMETHOD(Type, getMinimumTH1, TH1))(p))->GetMinimum(minval);\
+}\
+\
+int Type##_GetMinimumBin ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetMinimumBin, TH1))(p))->GetMinimumBin();\
+}\
+\
+double Type##_GetMinimumStored ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetMinimumStored, TH1))(p))->GetMinimumStored();\
+}\
+\
+double Type##_GetMean ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, GetMean, TH1))(p))->GetMean(axis);\
+}\
+\
+double Type##_GetMeanError ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, GetMeanError, TH1))(p))->GetMeanError(axis);\
+}\
+\
+double Type##_GetNbinsX ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNbinsX, TH1))(p))->GetNbinsX();\
+}\
+\
+double Type##_GetNbinsY ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNbinsY, TH1))(p))->GetNbinsY();\
+}\
+\
+double Type##_GetNbinsZ ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetNbinsZ, TH1))(p))->GetNbinsZ();\
+}\
+\
+int Type##_getQuantilesTH1 ( Type##_p p, int nprobSum, double* q, double* pbSum ) {\
+return ((TYPECASTMETHOD(Type, getQuantilesTH1, TH1))(p))->GetQuantiles(nprobSum, q, pbSum);\
+}\
+\
+double Type##_GetRandom ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetRandom, TH1))(p))->GetRandom();\
+}\
+\
+void Type##_GetStats ( Type##_p p, double* stats ) {\
+((TYPECASTMETHOD(Type, GetStats, TH1))(p))->GetStats(stats);\
+}\
+\
+double Type##_GetSumOfWeights ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetSumOfWeights, TH1))(p))->GetSumOfWeights();\
+}\
+\
+TArrayD_p Type##_GetSumw2 ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TArrayD_t, TArrayD>((TArrayD*)((TYPECASTMETHOD(Type, GetSumw2, TH1))(p))->GetSumw2());\
+}\
+\
+int Type##_GetSumw2N ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, GetSumw2N, TH1))(p))->GetSumw2N();\
+}\
+\
+double Type##_GetRMS ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, GetRMS, TH1))(p))->GetRMS(axis);\
+}\
+\
+double Type##_GetRMSError ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, GetRMSError, TH1))(p))->GetRMSError(axis);\
+}\
+\
+double Type##_GetSkewness ( Type##_p p, int axis ) {\
+return ((TYPECASTMETHOD(Type, GetSkewness, TH1))(p))->GetSkewness(axis);\
+}\
+\
+double Type##_interpolate3 ( Type##_p p, double x, double y, double z ) {\
+return ((TYPECASTMETHOD(Type, interpolate3, TH1))(p))->Interpolate(x, y, z);\
+}\
+\
+double Type##_KolmogorovTest ( Type##_p p, TH1_p h2, const char* option ) {\
+return ((TYPECASTMETHOD(Type, KolmogorovTest, TH1))(p))->KolmogorovTest(from_nonconst_to_nonconst<TH1, TH1_t>(h2), option);\
+}\
+\
+void Type##_LabelsDeflate ( Type##_p p, const char* axis ) {\
+((TYPECASTMETHOD(Type, LabelsDeflate, TH1))(p))->LabelsDeflate(axis);\
+}\
+\
+void Type##_LabelsInflate ( Type##_p p, const char* axis ) {\
+((TYPECASTMETHOD(Type, LabelsInflate, TH1))(p))->LabelsInflate(axis);\
+}\
+\
+void Type##_LabelsOption ( Type##_p p, const char* option, const char* axis ) {\
+((TYPECASTMETHOD(Type, LabelsOption, TH1))(p))->LabelsOption(option, axis);\
+}\
+\
+void Type##_multiflyF ( Type##_p p, TF1_p h1, double c1 ) {\
+((TYPECASTMETHOD(Type, multiflyF, TH1))(p))->Multiply(from_nonconst_to_nonconst<TF1, TF1_t>(h1), c1);\
+}\
+\
+void Type##_Multiply ( Type##_p p, TH1_p h1, TH1_p h2, double c1, double c2, const char* option ) {\
+((TYPECASTMETHOD(Type, Multiply, TH1))(p))->Multiply(from_nonconst_to_nonconst<TH1, TH1_t>(h1), from_nonconst_to_nonconst<TH1, TH1_t>(h2), c1, c2, option);\
+}\
+\
+void Type##_PutStats ( Type##_p p, double* stats ) {\
+((TYPECASTMETHOD(Type, PutStats, TH1))(p))->PutStats(stats);\
+}\
+\
+TH1_p Type##_Rebin ( Type##_p p, int ngroup, const char* newname, double* xbins ) {\
+return from_nonconst_to_nonconst<TH1_t, TH1>((TH1*)((TYPECASTMETHOD(Type, Rebin, TH1))(p))->Rebin(ngroup, newname, xbins));\
+}\
+\
+void Type##_RebinAxis ( Type##_p p, double x, TAxis_p axis ) {\
+((TYPECASTMETHOD(Type, RebinAxis, TH1))(p))->RebinAxis(x, from_nonconst_to_nonconst<TAxis, TAxis_t>(axis));\
+}\
+\
+void Type##_Rebuild ( Type##_p p, const char* option ) {\
+((TYPECASTMETHOD(Type, Rebuild, TH1))(p))->Rebuild(option);\
+}\
+\
+void Type##_RecursiveRemove ( Type##_p p, TObject_p obj ) {\
+((TYPECASTMETHOD(Type, RecursiveRemove, TH1))(p))->RecursiveRemove(from_nonconst_to_nonconst<TObject, TObject_t>(obj));\
+}\
+\
+void Type##_Reset ( Type##_p p, const char* option ) {\
+((TYPECASTMETHOD(Type, Reset, TH1))(p))->Reset(option);\
+}\
+\
+void Type##_ResetStats ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, ResetStats, TH1))(p))->ResetStats();\
+}\
+\
+void Type##_Scale ( Type##_p p, double c1, const char* option ) {\
+((TYPECASTMETHOD(Type, Scale, TH1))(p))->Scale(c1, option);\
+}\
+\
+void Type##_setAxisColorA ( Type##_p p, short color, const char* axis ) {\
+((TYPECASTMETHOD(Type, setAxisColorA, TH1))(p))->SetAxisColor(color, axis);\
+}\
+\
+void Type##_SetAxisRange ( Type##_p p, double xmin, double xmax, const char* axis ) {\
+((TYPECASTMETHOD(Type, SetAxisRange, TH1))(p))->SetAxisRange(xmin, xmax, axis);\
+}\
+\
+void Type##_SetBarOffset ( Type##_p p, float offset ) {\
+((TYPECASTMETHOD(Type, SetBarOffset, TH1))(p))->SetBarOffset(offset);\
+}\
+\
+void Type##_SetBarWidth ( Type##_p p, float width ) {\
+((TYPECASTMETHOD(Type, SetBarWidth, TH1))(p))->SetBarWidth(width);\
+}\
+\
+void Type##_setBinContent1 ( Type##_p p, int bin, double content ) {\
+((TYPECASTMETHOD(Type, setBinContent1, TH1))(p))->SetBinContent(bin, content);\
+}\
+\
+void Type##_setBinContent2 ( Type##_p p, int binx, int biny, double content ) {\
+((TYPECASTMETHOD(Type, setBinContent2, TH1))(p))->SetBinContent(binx, biny, content);\
+}\
+\
+void Type##_setBinContent3 ( Type##_p p, int binx, int biny, int binz, double content ) {\
+((TYPECASTMETHOD(Type, setBinContent3, TH1))(p))->SetBinContent(binx, biny, binz, content);\
+}\
+\
+void Type##_setBinError1 ( Type##_p p, int bin, double error ) {\
+((TYPECASTMETHOD(Type, setBinError1, TH1))(p))->SetBinError(bin, error);\
+}\
+\
+void Type##_setBinError2 ( Type##_p p, int binx, int biny, double error ) {\
+((TYPECASTMETHOD(Type, setBinError2, TH1))(p))->SetBinError(binx, biny, error);\
+}\
+\
+void Type##_setBinError3 ( Type##_p p, int binx, int biny, int binz, double error ) {\
+((TYPECASTMETHOD(Type, setBinError3, TH1))(p))->SetBinError(binx, biny, binz, error);\
+}\
+\
+void Type##_setBins1 ( Type##_p p, int nx, double* xBins ) {\
+((TYPECASTMETHOD(Type, setBins1, TH1))(p))->SetBins(nx, xBins);\
+}\
+\
+void Type##_setBins2 ( Type##_p p, int nx, double* xBins, int ny, double* yBins ) {\
+((TYPECASTMETHOD(Type, setBins2, TH1))(p))->SetBins(nx, xBins, ny, yBins);\
+}\
+\
+void Type##_setBins3 ( Type##_p p, int nx, double* xBins, int ny, double* yBins, int nz, double* zBins ) {\
+((TYPECASTMETHOD(Type, setBins3, TH1))(p))->SetBins(nx, xBins, ny, yBins, nz, zBins);\
+}\
+\
+void Type##_SetBinsLength ( Type##_p p, int bin ) {\
+((TYPECASTMETHOD(Type, SetBinsLength, TH1))(p))->SetBinsLength(bin);\
+}\
+\
+void Type##_SetBuffer ( Type##_p p, int buffersize, const char* option ) {\
+((TYPECASTMETHOD(Type, SetBuffer, TH1))(p))->SetBuffer(buffersize, option);\
+}\
+\
+void Type##_SetCellContent ( Type##_p p, int binx, int biny, double content ) {\
+((TYPECASTMETHOD(Type, SetCellContent, TH1))(p))->SetCellContent(binx, biny, content);\
+}\
+\
+void Type##_SetContent ( Type##_p p, double* content ) {\
+((TYPECASTMETHOD(Type, SetContent, TH1))(p))->SetContent(content);\
+}\
+\
+void Type##_SetContour ( Type##_p p, int nlevels, double* levels ) {\
+((TYPECASTMETHOD(Type, SetContour, TH1))(p))->SetContour(nlevels, levels);\
+}\
+\
+void Type##_SetContourLevel ( Type##_p p, int level, double value ) {\
+((TYPECASTMETHOD(Type, SetContourLevel, TH1))(p))->SetContourLevel(level, value);\
+}\
+\
+void Type##_SetDirectory ( Type##_p p, TDirectory_p dir ) {\
+((TYPECASTMETHOD(Type, SetDirectory, TH1))(p))->SetDirectory(from_nonconst_to_nonconst<TDirectory, TDirectory_t>(dir));\
+}\
+\
+void Type##_SetEntries ( Type##_p p, double n ) {\
+((TYPECASTMETHOD(Type, SetEntries, TH1))(p))->SetEntries(n);\
+}\
+\
+void Type##_SetError ( Type##_p p, double* error ) {\
+((TYPECASTMETHOD(Type, SetError, TH1))(p))->SetError(error);\
+}\
+\
+void Type##_setLabelColorA ( Type##_p p, short color, const char* axis ) {\
+((TYPECASTMETHOD(Type, setLabelColorA, TH1))(p))->SetLabelColor(color, axis);\
+}\
+\
+void Type##_setLabelSizeA ( Type##_p p, float size, const char* axis ) {\
+((TYPECASTMETHOD(Type, setLabelSizeA, TH1))(p))->SetLabelSize(size, axis);\
+}\
+\
+void Type##_setLabelFontA ( Type##_p p, short font, const char* axis ) {\
+((TYPECASTMETHOD(Type, setLabelFontA, TH1))(p))->SetLabelFont(font, axis);\
+}\
+\
+void Type##_setLabelOffsetA ( Type##_p p, float offset, const char* axis ) {\
+((TYPECASTMETHOD(Type, setLabelOffsetA, TH1))(p))->SetLabelOffset(offset, axis);\
+}\
+\
+void Type##_SetMaximum ( Type##_p p, double maximum ) {\
+((TYPECASTMETHOD(Type, SetMaximum, TH1))(p))->SetMaximum(maximum);\
+}\
+\
+void Type##_SetMinimum ( Type##_p p, double minimum ) {\
+((TYPECASTMETHOD(Type, SetMinimum, TH1))(p))->SetMinimum(minimum);\
+}\
+\
+void Type##_SetNormFactor ( Type##_p p, double factor ) {\
+((TYPECASTMETHOD(Type, SetNormFactor, TH1))(p))->SetNormFactor(factor);\
+}\
+\
+void Type##_SetStats ( Type##_p p, bool stats ) {\
+((TYPECASTMETHOD(Type, SetStats, TH1))(p))->SetStats(stats);\
+}\
+\
+void Type##_SetOption ( Type##_p p, const char* option ) {\
+((TYPECASTMETHOD(Type, SetOption, TH1))(p))->SetOption(option);\
+}\
+\
+void Type##_SetXTitle ( Type##_p p, const char* title ) {\
+((TYPECASTMETHOD(Type, SetXTitle, TH1))(p))->SetXTitle(title);\
+}\
+\
+void Type##_SetYTitle ( Type##_p p, const char* title ) {\
+((TYPECASTMETHOD(Type, SetYTitle, TH1))(p))->SetYTitle(title);\
+}\
+\
+void Type##_SetZTitle ( Type##_p p, const char* title ) {\
+((TYPECASTMETHOD(Type, SetZTitle, TH1))(p))->SetZTitle(title);\
+}\
+\
+TH1_p Type##_ShowBackground ( Type##_p p, int niter, const char* option ) {\
+return from_nonconst_to_nonconst<TH1_t, TH1>((TH1*)((TYPECASTMETHOD(Type, ShowBackground, TH1))(p))->ShowBackground(niter, option));\
+}\
+\
+int Type##_ShowPeaks ( Type##_p p, double sigma, const char* option, double threshold ) {\
+return ((TYPECASTMETHOD(Type, ShowPeaks, TH1))(p))->ShowPeaks(sigma, option, threshold);\
+}\
+\
+void Type##_Smooth ( Type##_p p, int ntimes, const char* option ) {\
+((TYPECASTMETHOD(Type, Smooth, TH1))(p))->Smooth(ntimes, option);\
+}\
+\
+void Type##_Sumw2 ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, Sumw2, TH1))(p))->Sumw2();\
+}
+
+
+#define TH1_DEF_NONVIRT(Type) \
+Type##_p Type##_tH1_GetAsymmetry ( Type##_p p, TH1_p h2, double c2, double dc2 ) {\
+return from_nonconst_to_nonconst<Type##_t, Type>((Type*)((TYPECASTMETHOD(Type, tH1_GetAsymmetry, TH1))(p))->GetAsymmetry(from_nonconst_to_nonconst<TH1, TH1_t>(h2), c2, dc2));\
+}\
+\
+int Type##_tH1_GetBufferLength ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tH1_GetBufferLength, TH1))(p))->GetBufferLength();\
+}\
+\
+int Type##_tH1_GetBufferSize ( Type##_p p ) {\
+return ((TYPECASTMETHOD(Type, tH1_GetBufferSize, TH1))(p))->GetBufferSize();\
+}\
+\
+int Type##_tH1_GetDefaultBufferSize (  ) {\
+return TH1::GetDefaultBufferSize();\
+}\
+\
+bool Type##_tH1_GetDefaultSumw2 (  ) {\
+return TH1::GetDefaultSumw2();\
+}\
+\
+TDirectory_p Type##_tH1_GetDirectory ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TDirectory_t, TDirectory>((TDirectory*)((TYPECASTMETHOD(Type, tH1_GetDirectory, TH1))(p))->GetDirectory());\
+}\
+\
+TAxis_p Type##_tH1_GetXaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tH1_GetXaxis, TH1))(p))->GetXaxis());\
+}\
+\
+TAxis_p Type##_tH1_GetYaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tH1_GetYaxis, TH1))(p))->GetYaxis());\
+}\
+\
+TAxis_p Type##_tH1_GetZaxis ( Type##_p p ) {\
+return from_nonconst_to_nonconst<TAxis_t, TAxis>((TAxis*)((TYPECASTMETHOD(Type, tH1_GetZaxis, TH1))(p))->GetZaxis());\
+}\
+\
+bool Type##_tH1_IsBinOverflow ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, tH1_IsBinOverflow, TH1))(p))->IsBinOverflow(bin);\
+}\
+\
+bool Type##_tH1_IsBinUnderflow ( Type##_p p, int bin ) {\
+return ((TYPECASTMETHOD(Type, tH1_IsBinUnderflow, TH1))(p))->IsBinUnderflow(bin);\
+}\
+\
+void Type##_tH1_SetDefaultBufferSize ( int buffersize ) {\
+TH1::SetDefaultBufferSize(buffersize);\
+}\
+\
+void Type##_tH1_SetDefaultSumw2 ( bool sumw2 ) {\
+TH1::SetDefaultSumw2(sumw2);\
+}\
+\
+void Type##_tH1_SmoothArray ( int NN, double* XX, int ntimes ) {\
+TH1::SmoothArray(NN, XX, ntimes);\
+}\
+\
+void Type##_tH1_StatOverflows ( bool flag ) {\
+TH1::StatOverflows(flag);\
+}\
+\
+void Type##_tH1_UseCurrentStyle ( Type##_p p ) {\
+((TYPECASTMETHOD(Type, tH1_UseCurrentStyle, TH1))(p))->UseCurrentStyle();\
+}
+
+
+#define TH1_DEF_ACCESSOR(Type) \
+
+
+
+TNAMED_DECL_VIRT(TH1)
+TATTLINE_DECL_VIRT(TH1)
+TATTFILL_DECL_VIRT(TH1)
+TATTMARKER_DECL_VIRT(TH1)
+TOBJECT_DECL_VIRT(TH1)
+DELETABLE_DECL_VIRT(TH1)
+TH1_DECL_VIRT(TH1)
+TH1_DECL_NONVIRT(TH1)
+TH1_DECL_ACCESSOR(TH1)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1C.cpp b/csrc/HROOTHistTH1C.cpp
--- a/csrc/HROOTHistTH1C.cpp
+++ b/csrc/HROOTHistTH1C.cpp
@@ -1,18 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayC.h"
+
 #include "TH1C.h"
-#include "HROOTHistTH1C.h"
 
+#include "HROOTHistTH1C.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TH1_DEF_VIRT(TH1C)
 TARRAYC_DEF_VIRT(TH1C)
@@ -23,8 +27,7 @@
 TOBJECT_DEF_VIRT(TH1C)
 DELETABLE_DEF_VIRT(TH1C)
 TARRAY_DEF_VIRT(TH1C)
-
 TH1C_DEF_VIRT(TH1C)
-
 TH1C_DEF_NONVIRT(TH1C)
+TH1C_DEF_ACCESSOR(TH1C)
 
diff --git a/csrc/HROOTHistTH1C.h b/csrc/HROOTHistTH1C.h
--- a/csrc/HROOTHistTH1C.h
+++ b/csrc/HROOTHistTH1C.h
@@ -1,56 +1,70 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH1C__
-#define __HROOT_HIST__TH1C__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayC.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH1C_DECL_VIRT 
+
 #define TH1C_DECL_VIRT(Type) \
 
 
-#undef TH1C_DECL_NONVIRT 
+
 #define TH1C_DECL_NONVIRT(Type) \
 
 
-#undef TH1C_DEF_VIRT
-#define TH1C_DEF_VIRT(Type)\
 
+#define TH1C_DECL_ACCESSOR(Type) \
 
-#undef TH1C_DEF_NONVIRT
-#define TH1C_DEF_NONVIRT(Type)\
 
 
-TH1_DECL_VIRT(TH1C);
-TARRAYC_DECL_VIRT(TH1C);
-TNAMED_DECL_VIRT(TH1C);
-TATTLINE_DECL_VIRT(TH1C);
-TATTFILL_DECL_VIRT(TH1C);
-TATTMARKER_DECL_VIRT(TH1C);
-TOBJECT_DECL_VIRT(TH1C);
-DELETABLE_DECL_VIRT(TH1C);
-TARRAY_DECL_VIRT(TH1C);
+#define TH1C_DEF_VIRT(Type) \
 
 
-TH1C_DECL_VIRT(TH1C);
 
+#define TH1C_DEF_NONVIRT(Type) \
 
-TH1C_DECL_NONVIRT(TH1C);
 
 
-#endif // __HROOT_HIST__TH1C__
+#define TH1C_DEF_ACCESSOR(Type) \
+
+
+
+TH1_DECL_VIRT(TH1C)
+TARRAYC_DECL_VIRT(TH1C)
+TNAMED_DECL_VIRT(TH1C)
+TATTLINE_DECL_VIRT(TH1C)
+TATTFILL_DECL_VIRT(TH1C)
+TATTMARKER_DECL_VIRT(TH1C)
+TOBJECT_DECL_VIRT(TH1C)
+DELETABLE_DECL_VIRT(TH1C)
+TARRAY_DECL_VIRT(TH1C)
+TH1C_DECL_VIRT(TH1C)
+TH1C_DECL_NONVIRT(TH1C)
+TH1C_DECL_ACCESSOR(TH1C)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1D.cpp b/csrc/HROOTHistTH1D.cpp
--- a/csrc/HROOTHistTH1D.cpp
+++ b/csrc/HROOTHistTH1D.cpp
@@ -1,18 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "TH1D.h"
-#include "HROOTHistTH1D.h"
 
+#include "HROOTHistTH1D.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TH1_DEF_VIRT(TH1D)
 TARRAYD_DEF_VIRT(TH1D)
@@ -23,8 +27,7 @@
 TOBJECT_DEF_VIRT(TH1D)
 DELETABLE_DEF_VIRT(TH1D)
 TARRAY_DEF_VIRT(TH1D)
-
 TH1D_DEF_VIRT(TH1D)
-
 TH1D_DEF_NONVIRT(TH1D)
+TH1D_DEF_ACCESSOR(TH1D)
 
diff --git a/csrc/HROOTHistTH1D.h b/csrc/HROOTHistTH1D.h
--- a/csrc/HROOTHistTH1D.h
+++ b/csrc/HROOTHistTH1D.h
@@ -1,60 +1,72 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH1D__
-#define __HROOT_HIST__TH1D__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH1D_DECL_VIRT 
+
 #define TH1D_DECL_VIRT(Type) \
 
 
-#undef TH1D_DECL_NONVIRT 
+
 #define TH1D_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTH1D ( const char* name, const char* title, int nbinsx, double xlow, double xup )
+Type##_p Type##_newTH1D ( const char* name, const char* title, int nbinsx, double xlow, double xup );
 
-#undef TH1D_DEF_VIRT
-#define TH1D_DEF_VIRT(Type)\
 
+#define TH1D_DECL_ACCESSOR(Type) \
 
-#undef TH1D_DEF_NONVIRT
-#define TH1D_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTH1D ( const char* name, const char* title, int nbinsx, double xlow, double xup )\
-{\
-Type * newp = new Type (name, title, nbinsx, xlow, xup); \
-return to_nonconst<Type ## _t, Type >(newp);\
-}
 
-TH1_DECL_VIRT(TH1D);
-TARRAYD_DECL_VIRT(TH1D);
-TNAMED_DECL_VIRT(TH1D);
-TATTLINE_DECL_VIRT(TH1D);
-TATTFILL_DECL_VIRT(TH1D);
-TATTMARKER_DECL_VIRT(TH1D);
-TOBJECT_DECL_VIRT(TH1D);
-DELETABLE_DECL_VIRT(TH1D);
-TARRAY_DECL_VIRT(TH1D);
 
+#define TH1D_DEF_VIRT(Type) \
 
-TH1D_DECL_VIRT(TH1D);
 
 
-TH1D_DECL_NONVIRT(TH1D);
+#define TH1D_DEF_NONVIRT(Type) \
+Type##_p Type##_newTH1D ( const char* name, const char* title, int nbinsx, double xlow, double xup ) {\
+Type* newp=new Type(name, title, nbinsx, xlow, xup);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
 
-#endif // __HROOT_HIST__TH1D__
+#define TH1D_DEF_ACCESSOR(Type) \
+
+
+
+TH1_DECL_VIRT(TH1D)
+TARRAYD_DECL_VIRT(TH1D)
+TNAMED_DECL_VIRT(TH1D)
+TATTLINE_DECL_VIRT(TH1D)
+TATTFILL_DECL_VIRT(TH1D)
+TATTMARKER_DECL_VIRT(TH1D)
+TOBJECT_DECL_VIRT(TH1D)
+DELETABLE_DECL_VIRT(TH1D)
+TARRAY_DECL_VIRT(TH1D)
+TH1D_DECL_VIRT(TH1D)
+TH1D_DECL_NONVIRT(TH1D)
+TH1D_DECL_ACCESSOR(TH1D)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1F.cpp b/csrc/HROOTHistTH1F.cpp
--- a/csrc/HROOTHistTH1F.cpp
+++ b/csrc/HROOTHistTH1F.cpp
@@ -1,18 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "TH1F.h"
-#include "HROOTHistTH1F.h"
 
+#include "HROOTHistTH1F.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TH1_DEF_VIRT(TH1F)
 TARRAYF_DEF_VIRT(TH1F)
@@ -23,8 +27,7 @@
 TOBJECT_DEF_VIRT(TH1F)
 DELETABLE_DEF_VIRT(TH1F)
 TARRAY_DEF_VIRT(TH1F)
-
 TH1F_DEF_VIRT(TH1F)
-
 TH1F_DEF_NONVIRT(TH1F)
+TH1F_DEF_ACCESSOR(TH1F)
 
diff --git a/csrc/HROOTHistTH1F.h b/csrc/HROOTHistTH1F.h
--- a/csrc/HROOTHistTH1F.h
+++ b/csrc/HROOTHistTH1F.h
@@ -1,60 +1,72 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH1F__
-#define __HROOT_HIST__TH1F__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH1F_DECL_VIRT 
+
 #define TH1F_DECL_VIRT(Type) \
 
 
-#undef TH1F_DECL_NONVIRT 
+
 #define TH1F_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTH1F ( const char* name, const char* title, int nbinsx, double xlow, double xup )
+Type##_p Type##_newTH1F ( const char* name, const char* title, int nbinsx, double xlow, double xup );
 
-#undef TH1F_DEF_VIRT
-#define TH1F_DEF_VIRT(Type)\
 
+#define TH1F_DECL_ACCESSOR(Type) \
 
-#undef TH1F_DEF_NONVIRT
-#define TH1F_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTH1F ( const char* name, const char* title, int nbinsx, double xlow, double xup )\
-{\
-Type * newp = new Type (name, title, nbinsx, xlow, xup); \
-return to_nonconst<Type ## _t, Type >(newp);\
-}
 
-TH1_DECL_VIRT(TH1F);
-TARRAYF_DECL_VIRT(TH1F);
-TNAMED_DECL_VIRT(TH1F);
-TATTLINE_DECL_VIRT(TH1F);
-TATTFILL_DECL_VIRT(TH1F);
-TATTMARKER_DECL_VIRT(TH1F);
-TOBJECT_DECL_VIRT(TH1F);
-DELETABLE_DECL_VIRT(TH1F);
-TARRAY_DECL_VIRT(TH1F);
 
+#define TH1F_DEF_VIRT(Type) \
 
-TH1F_DECL_VIRT(TH1F);
 
 
-TH1F_DECL_NONVIRT(TH1F);
+#define TH1F_DEF_NONVIRT(Type) \
+Type##_p Type##_newTH1F ( const char* name, const char* title, int nbinsx, double xlow, double xup ) {\
+Type* newp=new Type(name, title, nbinsx, xlow, xup);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
 
-#endif // __HROOT_HIST__TH1F__
+#define TH1F_DEF_ACCESSOR(Type) \
+
+
+
+TH1_DECL_VIRT(TH1F)
+TARRAYF_DECL_VIRT(TH1F)
+TNAMED_DECL_VIRT(TH1F)
+TATTLINE_DECL_VIRT(TH1F)
+TATTFILL_DECL_VIRT(TH1F)
+TATTMARKER_DECL_VIRT(TH1F)
+TOBJECT_DECL_VIRT(TH1F)
+DELETABLE_DECL_VIRT(TH1F)
+TARRAY_DECL_VIRT(TH1F)
+TH1F_DECL_VIRT(TH1F)
+TH1F_DECL_NONVIRT(TH1F)
+TH1F_DECL_ACCESSOR(TH1F)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1I.cpp b/csrc/HROOTHistTH1I.cpp
--- a/csrc/HROOTHistTH1I.cpp
+++ b/csrc/HROOTHistTH1I.cpp
@@ -1,18 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayI.h"
+
 #include "TH1I.h"
-#include "HROOTHistTH1I.h"
 
+#include "HROOTHistTH1I.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TH1_DEF_VIRT(TH1I)
 TARRAYI_DEF_VIRT(TH1I)
@@ -23,8 +27,7 @@
 TOBJECT_DEF_VIRT(TH1I)
 DELETABLE_DEF_VIRT(TH1I)
 TARRAY_DEF_VIRT(TH1I)
-
 TH1I_DEF_VIRT(TH1I)
-
 TH1I_DEF_NONVIRT(TH1I)
+TH1I_DEF_ACCESSOR(TH1I)
 
diff --git a/csrc/HROOTHistTH1I.h b/csrc/HROOTHistTH1I.h
--- a/csrc/HROOTHistTH1I.h
+++ b/csrc/HROOTHistTH1I.h
@@ -1,56 +1,70 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH1I__
-#define __HROOT_HIST__TH1I__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayI.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH1I_DECL_VIRT 
+
 #define TH1I_DECL_VIRT(Type) \
 
 
-#undef TH1I_DECL_NONVIRT 
+
 #define TH1I_DECL_NONVIRT(Type) \
 
 
-#undef TH1I_DEF_VIRT
-#define TH1I_DEF_VIRT(Type)\
 
+#define TH1I_DECL_ACCESSOR(Type) \
 
-#undef TH1I_DEF_NONVIRT
-#define TH1I_DEF_NONVIRT(Type)\
 
 
-TH1_DECL_VIRT(TH1I);
-TARRAYI_DECL_VIRT(TH1I);
-TNAMED_DECL_VIRT(TH1I);
-TATTLINE_DECL_VIRT(TH1I);
-TATTFILL_DECL_VIRT(TH1I);
-TATTMARKER_DECL_VIRT(TH1I);
-TOBJECT_DECL_VIRT(TH1I);
-DELETABLE_DECL_VIRT(TH1I);
-TARRAY_DECL_VIRT(TH1I);
+#define TH1I_DEF_VIRT(Type) \
 
 
-TH1I_DECL_VIRT(TH1I);
 
+#define TH1I_DEF_NONVIRT(Type) \
 
-TH1I_DECL_NONVIRT(TH1I);
 
 
-#endif // __HROOT_HIST__TH1I__
+#define TH1I_DEF_ACCESSOR(Type) \
+
+
+
+TH1_DECL_VIRT(TH1I)
+TARRAYI_DECL_VIRT(TH1I)
+TNAMED_DECL_VIRT(TH1I)
+TATTLINE_DECL_VIRT(TH1I)
+TATTFILL_DECL_VIRT(TH1I)
+TATTMARKER_DECL_VIRT(TH1I)
+TOBJECT_DECL_VIRT(TH1I)
+DELETABLE_DECL_VIRT(TH1I)
+TARRAY_DECL_VIRT(TH1I)
+TH1I_DECL_VIRT(TH1I)
+TH1I_DECL_NONVIRT(TH1I)
+TH1I_DECL_ACCESSOR(TH1I)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1K.cpp b/csrc/HROOTHistTH1K.cpp
--- a/csrc/HROOTHistTH1K.cpp
+++ b/csrc/HROOTHistTH1K.cpp
@@ -1,18 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "TH1K.h"
-#include "HROOTHistTH1K.h"
 
+#include "HROOTHistTH1K.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TH1_DEF_VIRT(TH1K)
 TARRAYF_DEF_VIRT(TH1K)
@@ -23,8 +27,7 @@
 TOBJECT_DEF_VIRT(TH1K)
 DELETABLE_DEF_VIRT(TH1K)
 TARRAY_DEF_VIRT(TH1K)
-
 TH1K_DEF_VIRT(TH1K)
-
 TH1K_DEF_NONVIRT(TH1K)
+TH1K_DEF_ACCESSOR(TH1K)
 
diff --git a/csrc/HROOTHistTH1K.h b/csrc/HROOTHistTH1K.h
--- a/csrc/HROOTHistTH1K.h
+++ b/csrc/HROOTHistTH1K.h
@@ -1,56 +1,70 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH1K__
-#define __HROOT_HIST__TH1K__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH1K_DECL_VIRT 
+
 #define TH1K_DECL_VIRT(Type) \
 
 
-#undef TH1K_DECL_NONVIRT 
+
 #define TH1K_DECL_NONVIRT(Type) \
 
 
-#undef TH1K_DEF_VIRT
-#define TH1K_DEF_VIRT(Type)\
 
+#define TH1K_DECL_ACCESSOR(Type) \
 
-#undef TH1K_DEF_NONVIRT
-#define TH1K_DEF_NONVIRT(Type)\
 
 
-TH1_DECL_VIRT(TH1K);
-TARRAYF_DECL_VIRT(TH1K);
-TNAMED_DECL_VIRT(TH1K);
-TATTLINE_DECL_VIRT(TH1K);
-TATTFILL_DECL_VIRT(TH1K);
-TATTMARKER_DECL_VIRT(TH1K);
-TOBJECT_DECL_VIRT(TH1K);
-DELETABLE_DECL_VIRT(TH1K);
-TARRAY_DECL_VIRT(TH1K);
+#define TH1K_DEF_VIRT(Type) \
 
 
-TH1K_DECL_VIRT(TH1K);
 
+#define TH1K_DEF_NONVIRT(Type) \
 
-TH1K_DECL_NONVIRT(TH1K);
 
 
-#endif // __HROOT_HIST__TH1K__
+#define TH1K_DEF_ACCESSOR(Type) \
+
+
+
+TH1_DECL_VIRT(TH1K)
+TARRAYF_DECL_VIRT(TH1K)
+TNAMED_DECL_VIRT(TH1K)
+TATTLINE_DECL_VIRT(TH1K)
+TATTFILL_DECL_VIRT(TH1K)
+TATTMARKER_DECL_VIRT(TH1K)
+TOBJECT_DECL_VIRT(TH1K)
+DELETABLE_DECL_VIRT(TH1K)
+TARRAY_DECL_VIRT(TH1K)
+TH1K_DECL_VIRT(TH1K)
+TH1K_DECL_NONVIRT(TH1K)
+TH1K_DECL_ACCESSOR(TH1K)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH1S.cpp b/csrc/HROOTHistTH1S.cpp
--- a/csrc/HROOTHistTH1S.cpp
+++ b/csrc/HROOTHistTH1S.cpp
@@ -1,18 +1,22 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayS.h"
+
 #include "TH1S.h"
-#include "HROOTHistTH1S.h"
 
+#include "HROOTHistTH1S.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TH1_DEF_VIRT(TH1S)
 TARRAYS_DEF_VIRT(TH1S)
@@ -23,8 +27,7 @@
 TOBJECT_DEF_VIRT(TH1S)
 DELETABLE_DEF_VIRT(TH1S)
 TARRAY_DEF_VIRT(TH1S)
-
 TH1S_DEF_VIRT(TH1S)
-
 TH1S_DEF_NONVIRT(TH1S)
+TH1S_DEF_ACCESSOR(TH1S)
 
diff --git a/csrc/HROOTHistTH1S.h b/csrc/HROOTHistTH1S.h
--- a/csrc/HROOTHistTH1S.h
+++ b/csrc/HROOTHistTH1S.h
@@ -1,56 +1,70 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH1S__
-#define __HROOT_HIST__TH1S__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTArrayS.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH1S_DECL_VIRT 
+
 #define TH1S_DECL_VIRT(Type) \
 
 
-#undef TH1S_DECL_NONVIRT 
+
 #define TH1S_DECL_NONVIRT(Type) \
 
 
-#undef TH1S_DEF_VIRT
-#define TH1S_DEF_VIRT(Type)\
 
+#define TH1S_DECL_ACCESSOR(Type) \
 
-#undef TH1S_DEF_NONVIRT
-#define TH1S_DEF_NONVIRT(Type)\
 
 
-TH1_DECL_VIRT(TH1S);
-TARRAYS_DECL_VIRT(TH1S);
-TNAMED_DECL_VIRT(TH1S);
-TATTLINE_DECL_VIRT(TH1S);
-TATTFILL_DECL_VIRT(TH1S);
-TATTMARKER_DECL_VIRT(TH1S);
-TOBJECT_DECL_VIRT(TH1S);
-DELETABLE_DECL_VIRT(TH1S);
-TARRAY_DECL_VIRT(TH1S);
+#define TH1S_DEF_VIRT(Type) \
 
 
-TH1S_DECL_VIRT(TH1S);
 
+#define TH1S_DEF_NONVIRT(Type) \
 
-TH1S_DECL_NONVIRT(TH1S);
 
 
-#endif // __HROOT_HIST__TH1S__
+#define TH1S_DEF_ACCESSOR(Type) \
+
+
+
+TH1_DECL_VIRT(TH1S)
+TARRAYS_DECL_VIRT(TH1S)
+TNAMED_DECL_VIRT(TH1S)
+TATTLINE_DECL_VIRT(TH1S)
+TATTFILL_DECL_VIRT(TH1S)
+TATTMARKER_DECL_VIRT(TH1S)
+TOBJECT_DECL_VIRT(TH1S)
+DELETABLE_DECL_VIRT(TH1S)
+TARRAY_DECL_VIRT(TH1S)
+TH1S_DECL_VIRT(TH1S)
+TH1S_DECL_NONVIRT(TH1S)
+TH1S_DECL_ACCESSOR(TH1S)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2.cpp b/csrc/HROOTHistTH2.cpp
--- a/csrc/HROOTHistTH2.cpp
+++ b/csrc/HROOTHistTH2.cpp
@@ -1,22 +1,29 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1D.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTHistTF1.h"
+
 #include "HROOTCoreTObjArray.h"
+
 #include "TH2.h"
-#include "HROOTHistTH2.h"
 
+#include "HROOTHistTH2.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
-#define IS_TH2_fill1_PROTECTED ()
 
+#define IS_TH2_fill1_PROTECTED ()
 TH1_DEF_VIRT(TH2)
 TNAMED_DEF_VIRT(TH2)
 TATTLINE_DEF_VIRT(TH2)
@@ -24,8 +31,7 @@
 TATTMARKER_DEF_VIRT(TH2)
 TOBJECT_DEF_VIRT(TH2)
 DELETABLE_DEF_VIRT(TH2)
-
 TH2_DEF_VIRT(TH2)
-
 TH2_DEF_NONVIRT(TH2)
+TH2_DEF_ACCESSOR(TH2)
 
diff --git a/csrc/HROOTHistTH2.h b/csrc/HROOTHistTH2.h
--- a/csrc/HROOTHistTH2.h
+++ b/csrc/HROOTHistTH2.h
@@ -1,138 +1,148 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2__
-#define __HROOT_HIST__TH2__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH2_DECL_VIRT 
+
 #define TH2_DECL_VIRT(Type) \
-int Type ## _fill2 ( Type ## _p p, double x, double y ); \
-int Type ## _fill2w ( Type ## _p p, double x, double y, double w ); \
-void Type ## _fillN2 ( Type ## _p p, int ntimes, double * x, double * y, double * w, int stride ); \
-void Type ## _fillRandom2 ( Type ## _p p, TH1_p h, int ntimes ); \
-int Type ## _findFirstBinAbove2 ( Type ## _p p, double threshold, int axis ); \
-int Type ## _findLastBinAbove2 ( Type ## _p p, double threshold, int axis ); \
-void Type ## _FitSlicesX ( Type ## _p p, TF1_p f1, int firstybin, int lastybin, int cut, const char* option, TObjArray_p arr ); \
-void Type ## _FitSlicesY ( Type ## _p p, TF1_p f1, int firstxbin, int lastxbin, int cut, const char* option, TObjArray_p arr ); \
-double Type ## _getCorrelationFactor2 ( Type ## _p p, int axis1, int axis2 ); \
-double Type ## _getCovariance2 ( Type ## _p p, int axis1, int axis2 ); \
-double Type ## _integral2 ( Type ## _p p, int binx1, int binx2, int biny1, int biny2, const char* option ); \
-TH2_p Type ## _rebinX2 ( Type ## _p p, int ngroup, const char* newname ); \
-TH2_p Type ## _rebinY2 ( Type ## _p p, int ngroup, const char* newname ); \
-TH2_p Type ## _Rebin2D ( Type ## _p p, int nxgroup, int nygroup, const char* newname ); \
-void Type ## _SetShowProjectionX ( Type ## _p p, int nbins ); \
-void Type ## _SetShowProjectionY ( Type ## _p p, int nbins )
+int Type##_fill2 ( Type##_p p, double x, double y );\
+int Type##_fill2w ( Type##_p p, double x, double y, double w );\
+void Type##_fillN2 ( Type##_p p, int ntimes, double* x, double* y, double* w, int stride );\
+void Type##_fillRandom2 ( Type##_p p, TH1_p h, int ntimes );\
+int Type##_findFirstBinAbove2 ( Type##_p p, double threshold, int axis );\
+int Type##_findLastBinAbove2 ( Type##_p p, double threshold, int axis );\
+void Type##_FitSlicesX ( Type##_p p, TF1_p f1, int firstybin, int lastybin, int cut, const char* option, TObjArray_p arr );\
+void Type##_FitSlicesY ( Type##_p p, TF1_p f1, int firstxbin, int lastxbin, int cut, const char* option, TObjArray_p arr );\
+double Type##_getCorrelationFactor2 ( Type##_p p, int axis1, int axis2 );\
+double Type##_getCovariance2 ( Type##_p p, int axis1, int axis2 );\
+double Type##_integral2 ( Type##_p p, int binx1, int binx2, int biny1, int biny2, const char* option );\
+TH2_p Type##_rebinX2 ( Type##_p p, int ngroup, const char* newname );\
+TH2_p Type##_rebinY2 ( Type##_p p, int ngroup, const char* newname );\
+TH2_p Type##_Rebin2D ( Type##_p p, int nxgroup, int nygroup, const char* newname );\
+void Type##_SetShowProjectionX ( Type##_p p, int nbins );\
+void Type##_SetShowProjectionY ( Type##_p p, int nbins );
 
-#undef TH2_DECL_NONVIRT 
+
 #define TH2_DECL_NONVIRT(Type) \
-TH1D_p Type ## _tH2ProjectionX ( Type ## _p p, const char* name, int firstybin, int lastybin, const char* option ); \
-TH1D_p Type ## _tH2ProjectionY ( Type ## _p p, const char* name, int firstxbin, int lastxbin, const char* option )
+TH1D_p Type##_tH2_ProjectionX ( Type##_p p, const char* name, int firstybin, int lastybin, const char* option );\
+TH1D_p Type##_tH2_ProjectionY ( Type##_p p, const char* name, int firstxbin, int lastxbin, const char* option );
 
-#undef TH2_DEF_VIRT
-#define TH2_DEF_VIRT(Type)\
-int Type ## _fill2 ( Type ## _p p, double x, double y )\
-{\
-return TYPECASTMETHOD(Type,fill2,TH2)(p)->Fill(x, y);\
+
+#define TH2_DECL_ACCESSOR(Type) \
+
+
+
+#define TH2_DEF_VIRT(Type) \
+int Type##_fill2 ( Type##_p p, double x, double y ) {\
+return ((TYPECASTMETHOD(Type, fill2, TH2))(p))->Fill(x, y);\
 }\
-int Type ## _fill2w ( Type ## _p p, double x, double y, double w )\
-{\
-return TYPECASTMETHOD(Type,fill2w,TH2)(p)->Fill(x, y, w);\
+\
+int Type##_fill2w ( Type##_p p, double x, double y, double w ) {\
+return ((TYPECASTMETHOD(Type, fill2w, TH2))(p))->Fill(x, y, w);\
 }\
-void Type ## _fillN2 ( Type ## _p p, int ntimes, double * x, double * y, double * w, int stride )\
-{\
-TYPECASTMETHOD(Type,fillN2,TH2)(p)->FillN(ntimes, x, y, w, stride);\
+\
+void Type##_fillN2 ( Type##_p p, int ntimes, double* x, double* y, double* w, int stride ) {\
+((TYPECASTMETHOD(Type, fillN2, TH2))(p))->FillN(ntimes, x, y, w, stride);\
 }\
-void Type ## _fillRandom2 ( Type ## _p p, TH1_p h, int ntimes )\
-{\
-TYPECASTMETHOD(Type,fillRandom2,TH2)(p)->FillRandom(to_nonconst<TH1,TH1_t>(h), ntimes);\
+\
+void Type##_fillRandom2 ( Type##_p p, TH1_p h, int ntimes ) {\
+((TYPECASTMETHOD(Type, fillRandom2, TH2))(p))->FillRandom(from_nonconst_to_nonconst<TH1, TH1_t>(h), ntimes);\
 }\
-int Type ## _findFirstBinAbove2 ( Type ## _p p, double threshold, int axis )\
-{\
-return TYPECASTMETHOD(Type,findFirstBinAbove2,TH2)(p)->FindFirstBinAbove(threshold, axis);\
+\
+int Type##_findFirstBinAbove2 ( Type##_p p, double threshold, int axis ) {\
+return ((TYPECASTMETHOD(Type, findFirstBinAbove2, TH2))(p))->FindFirstBinAbove(threshold, axis);\
 }\
-int Type ## _findLastBinAbove2 ( Type ## _p p, double threshold, int axis )\
-{\
-return TYPECASTMETHOD(Type,findLastBinAbove2,TH2)(p)->FindLastBinAbove(threshold, axis);\
+\
+int Type##_findLastBinAbove2 ( Type##_p p, double threshold, int axis ) {\
+return ((TYPECASTMETHOD(Type, findLastBinAbove2, TH2))(p))->FindLastBinAbove(threshold, axis);\
 }\
-void Type ## _FitSlicesX ( Type ## _p p, TF1_p f1, int firstybin, int lastybin, int cut, const char* option, TObjArray_p arr )\
-{\
-TYPECASTMETHOD(Type,FitSlicesX,TH2)(p)->FitSlicesX(to_nonconst<TF1,TF1_t>(f1), firstybin, lastybin, cut, option, to_nonconst<TObjArray,TObjArray_t>(arr));\
+\
+void Type##_FitSlicesX ( Type##_p p, TF1_p f1, int firstybin, int lastybin, int cut, const char* option, TObjArray_p arr ) {\
+((TYPECASTMETHOD(Type, FitSlicesX, TH2))(p))->FitSlicesX(from_nonconst_to_nonconst<TF1, TF1_t>(f1), firstybin, lastybin, cut, option, from_nonconst_to_nonconst<TObjArray, TObjArray_t>(arr));\
 }\
-void Type ## _FitSlicesY ( Type ## _p p, TF1_p f1, int firstxbin, int lastxbin, int cut, const char* option, TObjArray_p arr )\
-{\
-TYPECASTMETHOD(Type,FitSlicesY,TH2)(p)->FitSlicesY(to_nonconst<TF1,TF1_t>(f1), firstxbin, lastxbin, cut, option, to_nonconst<TObjArray,TObjArray_t>(arr));\
+\
+void Type##_FitSlicesY ( Type##_p p, TF1_p f1, int firstxbin, int lastxbin, int cut, const char* option, TObjArray_p arr ) {\
+((TYPECASTMETHOD(Type, FitSlicesY, TH2))(p))->FitSlicesY(from_nonconst_to_nonconst<TF1, TF1_t>(f1), firstxbin, lastxbin, cut, option, from_nonconst_to_nonconst<TObjArray, TObjArray_t>(arr));\
 }\
-double Type ## _getCorrelationFactor2 ( Type ## _p p, int axis1, int axis2 )\
-{\
-return TYPECASTMETHOD(Type,getCorrelationFactor2,TH2)(p)->GetCorrelationFactor(axis1, axis2);\
+\
+double Type##_getCorrelationFactor2 ( Type##_p p, int axis1, int axis2 ) {\
+return ((TYPECASTMETHOD(Type, getCorrelationFactor2, TH2))(p))->GetCorrelationFactor(axis1, axis2);\
 }\
-double Type ## _getCovariance2 ( Type ## _p p, int axis1, int axis2 )\
-{\
-return TYPECASTMETHOD(Type,getCovariance2,TH2)(p)->GetCovariance(axis1, axis2);\
+\
+double Type##_getCovariance2 ( Type##_p p, int axis1, int axis2 ) {\
+return ((TYPECASTMETHOD(Type, getCovariance2, TH2))(p))->GetCovariance(axis1, axis2);\
 }\
-double Type ## _integral2 ( Type ## _p p, int binx1, int binx2, int biny1, int biny2, const char* option )\
-{\
-return TYPECASTMETHOD(Type,integral2,TH2)(p)->Integral(binx1, binx2, biny1, biny2, option);\
+\
+double Type##_integral2 ( Type##_p p, int binx1, int binx2, int biny1, int biny2, const char* option ) {\
+return ((TYPECASTMETHOD(Type, integral2, TH2))(p))->Integral(binx1, binx2, biny1, biny2, option);\
 }\
-TH2_p Type ## _rebinX2 ( Type ## _p p, int ngroup, const char* newname )\
-{\
-return to_nonconst<TH2_t,TH2>((TH2*)TYPECASTMETHOD(Type,rebinX2,TH2)(p)->RebinX(ngroup, newname));\
+\
+TH2_p Type##_rebinX2 ( Type##_p p, int ngroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH2_t, TH2>((TH2*)((TYPECASTMETHOD(Type, rebinX2, TH2))(p))->RebinX(ngroup, newname));\
 }\
-TH2_p Type ## _rebinY2 ( Type ## _p p, int ngroup, const char* newname )\
-{\
-return to_nonconst<TH2_t,TH2>((TH2*)TYPECASTMETHOD(Type,rebinY2,TH2)(p)->RebinY(ngroup, newname));\
+\
+TH2_p Type##_rebinY2 ( Type##_p p, int ngroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH2_t, TH2>((TH2*)((TYPECASTMETHOD(Type, rebinY2, TH2))(p))->RebinY(ngroup, newname));\
 }\
-TH2_p Type ## _Rebin2D ( Type ## _p p, int nxgroup, int nygroup, const char* newname )\
-{\
-return to_nonconst<TH2_t,TH2>((TH2*)TYPECASTMETHOD(Type,Rebin2D,TH2)(p)->Rebin2D(nxgroup, nygroup, newname));\
+\
+TH2_p Type##_Rebin2D ( Type##_p p, int nxgroup, int nygroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH2_t, TH2>((TH2*)((TYPECASTMETHOD(Type, Rebin2D, TH2))(p))->Rebin2D(nxgroup, nygroup, newname));\
 }\
-void Type ## _SetShowProjectionX ( Type ## _p p, int nbins )\
-{\
-TYPECASTMETHOD(Type,SetShowProjectionX,TH2)(p)->SetShowProjectionX(nbins);\
+\
+void Type##_SetShowProjectionX ( Type##_p p, int nbins ) {\
+((TYPECASTMETHOD(Type, SetShowProjectionX, TH2))(p))->SetShowProjectionX(nbins);\
 }\
-void Type ## _SetShowProjectionY ( Type ## _p p, int nbins )\
-{\
-TYPECASTMETHOD(Type,SetShowProjectionY,TH2)(p)->SetShowProjectionY(nbins);\
+\
+void Type##_SetShowProjectionY ( Type##_p p, int nbins ) {\
+((TYPECASTMETHOD(Type, SetShowProjectionY, TH2))(p))->SetShowProjectionY(nbins);\
 }
 
-#undef TH2_DEF_NONVIRT
-#define TH2_DEF_NONVIRT(Type)\
-TH1D_p Type ## _tH2ProjectionX ( Type ## _p p, const char* name, int firstybin, int lastybin, const char* option )\
-{\
-return to_nonconst<TH1D_t,TH1D>((TH1D*)TYPECASTMETHOD(Type,tH2ProjectionX,TH2)(p)->ProjectionX(name, firstybin, lastybin, option));\
+
+#define TH2_DEF_NONVIRT(Type) \
+TH1D_p Type##_tH2_ProjectionX ( Type##_p p, const char* name, int firstybin, int lastybin, const char* option ) {\
+return from_nonconst_to_nonconst<TH1D_t, TH1D>((TH1D*)((TYPECASTMETHOD(Type, tH2_ProjectionX, TH2))(p))->ProjectionX(name, firstybin, lastybin, option));\
 }\
-TH1D_p Type ## _tH2ProjectionY ( Type ## _p p, const char* name, int firstxbin, int lastxbin, const char* option )\
-{\
-return to_nonconst<TH1D_t,TH1D>((TH1D*)TYPECASTMETHOD(Type,tH2ProjectionY,TH2)(p)->ProjectionY(name, firstxbin, lastxbin, option));\
+\
+TH1D_p Type##_tH2_ProjectionY ( Type##_p p, const char* name, int firstxbin, int lastxbin, const char* option ) {\
+return from_nonconst_to_nonconst<TH1D_t, TH1D>((TH1D*)((TYPECASTMETHOD(Type, tH2_ProjectionY, TH2))(p))->ProjectionY(name, firstxbin, lastxbin, option));\
 }
 
-TH1_DECL_VIRT(TH2);
-TNAMED_DECL_VIRT(TH2);
-TATTLINE_DECL_VIRT(TH2);
-TATTFILL_DECL_VIRT(TH2);
-TATTMARKER_DECL_VIRT(TH2);
-TOBJECT_DECL_VIRT(TH2);
-DELETABLE_DECL_VIRT(TH2);
 
+#define TH2_DEF_ACCESSOR(Type) \
 
-TH2_DECL_VIRT(TH2);
 
 
-TH2_DECL_NONVIRT(TH2);
-
-
-#endif // __HROOT_HIST__TH2__
+TH1_DECL_VIRT(TH2)
+TNAMED_DECL_VIRT(TH2)
+TATTLINE_DECL_VIRT(TH2)
+TATTFILL_DECL_VIRT(TH2)
+TATTMARKER_DECL_VIRT(TH2)
+TOBJECT_DECL_VIRT(TH2)
+DELETABLE_DECL_VIRT(TH2)
+TH2_DECL_VIRT(TH2)
+TH2_DECL_NONVIRT(TH2)
+TH2_DECL_ACCESSOR(TH2)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2C.cpp b/csrc/HROOTHistTH2C.cpp
--- a/csrc/HROOTHistTH2C.cpp
+++ b/csrc/HROOTHistTH2C.cpp
@@ -1,20 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayC.h"
+
 #include "TH2C.h"
-#include "HROOTHistTH2C.h"
 
+#include "HROOTHistTH2C.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
-#define IS_TH2C_fill1_PROTECTED ()
 
+#define IS_TH2C_fill1_PROTECTED ()
 TH2_DEF_VIRT(TH2C)
 TARRAYC_DEF_VIRT(TH2C)
 TH1_DEF_VIRT(TH2C)
@@ -25,8 +30,7 @@
 TOBJECT_DEF_VIRT(TH2C)
 DELETABLE_DEF_VIRT(TH2C)
 TARRAY_DEF_VIRT(TH2C)
-
 TH2C_DEF_VIRT(TH2C)
-
 TH2C_DEF_NONVIRT(TH2C)
+TH2C_DEF_ACCESSOR(TH2C)
 
diff --git a/csrc/HROOTHistTH2C.h b/csrc/HROOTHistTH2C.h
--- a/csrc/HROOTHistTH2C.h
+++ b/csrc/HROOTHistTH2C.h
@@ -1,58 +1,73 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2C__
-#define __HROOT_HIST__TH2C__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayC.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH2C_DECL_VIRT 
+
 #define TH2C_DECL_VIRT(Type) \
 
 
-#undef TH2C_DECL_NONVIRT 
+
 #define TH2C_DECL_NONVIRT(Type) \
 
 
-#undef TH2C_DEF_VIRT
-#define TH2C_DEF_VIRT(Type)\
 
+#define TH2C_DECL_ACCESSOR(Type) \
 
-#undef TH2C_DEF_NONVIRT
-#define TH2C_DEF_NONVIRT(Type)\
 
 
-TH2_DECL_VIRT(TH2C);
-TARRAYC_DECL_VIRT(TH2C);
-TH1_DECL_VIRT(TH2C);
-TNAMED_DECL_VIRT(TH2C);
-TATTLINE_DECL_VIRT(TH2C);
-TATTFILL_DECL_VIRT(TH2C);
-TATTMARKER_DECL_VIRT(TH2C);
-TOBJECT_DECL_VIRT(TH2C);
-DELETABLE_DECL_VIRT(TH2C);
-TARRAY_DECL_VIRT(TH2C);
+#define TH2C_DEF_VIRT(Type) \
 
 
-TH2C_DECL_VIRT(TH2C);
 
+#define TH2C_DEF_NONVIRT(Type) \
 
-TH2C_DECL_NONVIRT(TH2C);
 
 
-#endif // __HROOT_HIST__TH2C__
+#define TH2C_DEF_ACCESSOR(Type) \
+
+
+
+TH2_DECL_VIRT(TH2C)
+TARRAYC_DECL_VIRT(TH2C)
+TH1_DECL_VIRT(TH2C)
+TNAMED_DECL_VIRT(TH2C)
+TATTLINE_DECL_VIRT(TH2C)
+TATTFILL_DECL_VIRT(TH2C)
+TATTMARKER_DECL_VIRT(TH2C)
+TOBJECT_DECL_VIRT(TH2C)
+DELETABLE_DECL_VIRT(TH2C)
+TARRAY_DECL_VIRT(TH2C)
+TH2C_DECL_VIRT(TH2C)
+TH2C_DECL_NONVIRT(TH2C)
+TH2C_DECL_ACCESSOR(TH2C)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2D.cpp b/csrc/HROOTHistTH2D.cpp
--- a/csrc/HROOTHistTH2D.cpp
+++ b/csrc/HROOTHistTH2D.cpp
@@ -1,20 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "TH2D.h"
-#include "HROOTHistTH2D.h"
 
+#include "HROOTHistTH2D.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
-#define IS_TH2D_fill1_PROTECTED ()
 
+#define IS_TH2D_fill1_PROTECTED ()
 TH2_DEF_VIRT(TH2D)
 TARRAYD_DEF_VIRT(TH2D)
 TH1_DEF_VIRT(TH2D)
@@ -25,8 +30,7 @@
 TOBJECT_DEF_VIRT(TH2D)
 DELETABLE_DEF_VIRT(TH2D)
 TARRAY_DEF_VIRT(TH2D)
-
 TH2D_DEF_VIRT(TH2D)
-
 TH2D_DEF_NONVIRT(TH2D)
+TH2D_DEF_ACCESSOR(TH2D)
 
diff --git a/csrc/HROOTHistTH2D.h b/csrc/HROOTHistTH2D.h
--- a/csrc/HROOTHistTH2D.h
+++ b/csrc/HROOTHistTH2D.h
@@ -1,62 +1,75 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2D__
-#define __HROOT_HIST__TH2D__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH2D_DECL_VIRT 
+
 #define TH2D_DECL_VIRT(Type) \
 
 
-#undef TH2D_DECL_NONVIRT 
+
 #define TH2D_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTH2D ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup )
+Type##_p Type##_newTH2D ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup );
 
-#undef TH2D_DEF_VIRT
-#define TH2D_DEF_VIRT(Type)\
 
+#define TH2D_DECL_ACCESSOR(Type) \
 
-#undef TH2D_DEF_NONVIRT
-#define TH2D_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTH2D ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup )\
-{\
-Type * newp = new Type (name, title, nbinsx, xlow, xup, nbinsy, ylow, yup); \
-return to_nonconst<Type ## _t, Type >(newp);\
-}
 
-TH2_DECL_VIRT(TH2D);
-TARRAYD_DECL_VIRT(TH2D);
-TH1_DECL_VIRT(TH2D);
-TNAMED_DECL_VIRT(TH2D);
-TATTLINE_DECL_VIRT(TH2D);
-TATTFILL_DECL_VIRT(TH2D);
-TATTMARKER_DECL_VIRT(TH2D);
-TOBJECT_DECL_VIRT(TH2D);
-DELETABLE_DECL_VIRT(TH2D);
-TARRAY_DECL_VIRT(TH2D);
 
+#define TH2D_DEF_VIRT(Type) \
 
-TH2D_DECL_VIRT(TH2D);
 
 
-TH2D_DECL_NONVIRT(TH2D);
+#define TH2D_DEF_NONVIRT(Type) \
+Type##_p Type##_newTH2D ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup ) {\
+Type* newp=new Type(name, title, nbinsx, xlow, xup, nbinsy, ylow, yup);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
 
-#endif // __HROOT_HIST__TH2D__
+#define TH2D_DEF_ACCESSOR(Type) \
+
+
+
+TH2_DECL_VIRT(TH2D)
+TARRAYD_DECL_VIRT(TH2D)
+TH1_DECL_VIRT(TH2D)
+TNAMED_DECL_VIRT(TH2D)
+TATTLINE_DECL_VIRT(TH2D)
+TATTFILL_DECL_VIRT(TH2D)
+TATTMARKER_DECL_VIRT(TH2D)
+TOBJECT_DECL_VIRT(TH2D)
+DELETABLE_DECL_VIRT(TH2D)
+TARRAY_DECL_VIRT(TH2D)
+TH2D_DECL_VIRT(TH2D)
+TH2D_DECL_NONVIRT(TH2D)
+TH2D_DECL_ACCESSOR(TH2D)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2F.cpp b/csrc/HROOTHistTH2F.cpp
--- a/csrc/HROOTHistTH2F.cpp
+++ b/csrc/HROOTHistTH2F.cpp
@@ -1,20 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "TH2F.h"
-#include "HROOTHistTH2F.h"
 
+#include "HROOTHistTH2F.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
-#define IS_TH2F_fill1_PROTECTED ()
 
+#define IS_TH2F_fill1_PROTECTED ()
 TH2_DEF_VIRT(TH2F)
 TARRAYF_DEF_VIRT(TH2F)
 TH1_DEF_VIRT(TH2F)
@@ -25,8 +30,7 @@
 TOBJECT_DEF_VIRT(TH2F)
 DELETABLE_DEF_VIRT(TH2F)
 TARRAY_DEF_VIRT(TH2F)
-
 TH2F_DEF_VIRT(TH2F)
-
 TH2F_DEF_NONVIRT(TH2F)
+TH2F_DEF_ACCESSOR(TH2F)
 
diff --git a/csrc/HROOTHistTH2F.h b/csrc/HROOTHistTH2F.h
--- a/csrc/HROOTHistTH2F.h
+++ b/csrc/HROOTHistTH2F.h
@@ -1,62 +1,75 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2F__
-#define __HROOT_HIST__TH2F__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH2F_DECL_VIRT 
+
 #define TH2F_DECL_VIRT(Type) \
 
 
-#undef TH2F_DECL_NONVIRT 
+
 #define TH2F_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTH2F ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup )
+Type##_p Type##_newTH2F ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup );
 
-#undef TH2F_DEF_VIRT
-#define TH2F_DEF_VIRT(Type)\
 
+#define TH2F_DECL_ACCESSOR(Type) \
 
-#undef TH2F_DEF_NONVIRT
-#define TH2F_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTH2F ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup )\
-{\
-Type * newp = new Type (name, title, nbinsx, xlow, xup, nbinsy, ylow, yup); \
-return to_nonconst<Type ## _t, Type >(newp);\
-}
 
-TH2_DECL_VIRT(TH2F);
-TARRAYF_DECL_VIRT(TH2F);
-TH1_DECL_VIRT(TH2F);
-TNAMED_DECL_VIRT(TH2F);
-TATTLINE_DECL_VIRT(TH2F);
-TATTFILL_DECL_VIRT(TH2F);
-TATTMARKER_DECL_VIRT(TH2F);
-TOBJECT_DECL_VIRT(TH2F);
-DELETABLE_DECL_VIRT(TH2F);
-TARRAY_DECL_VIRT(TH2F);
 
+#define TH2F_DEF_VIRT(Type) \
 
-TH2F_DECL_VIRT(TH2F);
 
 
-TH2F_DECL_NONVIRT(TH2F);
+#define TH2F_DEF_NONVIRT(Type) \
+Type##_p Type##_newTH2F ( const char* name, const char* title, int nbinsx, double xlow, double xup, int nbinsy, double ylow, double yup ) {\
+Type* newp=new Type(name, title, nbinsx, xlow, xup, nbinsy, ylow, yup);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
 
-#endif // __HROOT_HIST__TH2F__
+#define TH2F_DEF_ACCESSOR(Type) \
+
+
+
+TH2_DECL_VIRT(TH2F)
+TARRAYF_DECL_VIRT(TH2F)
+TH1_DECL_VIRT(TH2F)
+TNAMED_DECL_VIRT(TH2F)
+TATTLINE_DECL_VIRT(TH2F)
+TATTFILL_DECL_VIRT(TH2F)
+TATTMARKER_DECL_VIRT(TH2F)
+TOBJECT_DECL_VIRT(TH2F)
+DELETABLE_DECL_VIRT(TH2F)
+TARRAY_DECL_VIRT(TH2F)
+TH2F_DECL_VIRT(TH2F)
+TH2F_DECL_NONVIRT(TH2F)
+TH2F_DECL_ACCESSOR(TH2F)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2I.cpp b/csrc/HROOTHistTH2I.cpp
--- a/csrc/HROOTHistTH2I.cpp
+++ b/csrc/HROOTHistTH2I.cpp
@@ -1,20 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayI.h"
+
 #include "TH2I.h"
-#include "HROOTHistTH2I.h"
 
+#include "HROOTHistTH2I.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
-#define IS_TH2I_fill1_PROTECTED ()
 
+#define IS_TH2I_fill1_PROTECTED ()
 TH2_DEF_VIRT(TH2I)
 TARRAYI_DEF_VIRT(TH2I)
 TH1_DEF_VIRT(TH2I)
@@ -25,8 +30,7 @@
 TOBJECT_DEF_VIRT(TH2I)
 DELETABLE_DEF_VIRT(TH2I)
 TARRAY_DEF_VIRT(TH2I)
-
 TH2I_DEF_VIRT(TH2I)
-
 TH2I_DEF_NONVIRT(TH2I)
+TH2I_DEF_ACCESSOR(TH2I)
 
diff --git a/csrc/HROOTHistTH2I.h b/csrc/HROOTHistTH2I.h
--- a/csrc/HROOTHistTH2I.h
+++ b/csrc/HROOTHistTH2I.h
@@ -1,58 +1,73 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2I__
-#define __HROOT_HIST__TH2I__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayI.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH2I_DECL_VIRT 
+
 #define TH2I_DECL_VIRT(Type) \
 
 
-#undef TH2I_DECL_NONVIRT 
+
 #define TH2I_DECL_NONVIRT(Type) \
 
 
-#undef TH2I_DEF_VIRT
-#define TH2I_DEF_VIRT(Type)\
 
+#define TH2I_DECL_ACCESSOR(Type) \
 
-#undef TH2I_DEF_NONVIRT
-#define TH2I_DEF_NONVIRT(Type)\
 
 
-TH2_DECL_VIRT(TH2I);
-TARRAYI_DECL_VIRT(TH2I);
-TH1_DECL_VIRT(TH2I);
-TNAMED_DECL_VIRT(TH2I);
-TATTLINE_DECL_VIRT(TH2I);
-TATTFILL_DECL_VIRT(TH2I);
-TATTMARKER_DECL_VIRT(TH2I);
-TOBJECT_DECL_VIRT(TH2I);
-DELETABLE_DECL_VIRT(TH2I);
-TARRAY_DECL_VIRT(TH2I);
+#define TH2I_DEF_VIRT(Type) \
 
 
-TH2I_DECL_VIRT(TH2I);
 
+#define TH2I_DEF_NONVIRT(Type) \
 
-TH2I_DECL_NONVIRT(TH2I);
 
 
-#endif // __HROOT_HIST__TH2I__
+#define TH2I_DEF_ACCESSOR(Type) \
+
+
+
+TH2_DECL_VIRT(TH2I)
+TARRAYI_DECL_VIRT(TH2I)
+TH1_DECL_VIRT(TH2I)
+TNAMED_DECL_VIRT(TH2I)
+TATTLINE_DECL_VIRT(TH2I)
+TATTFILL_DECL_VIRT(TH2I)
+TATTMARKER_DECL_VIRT(TH2I)
+TOBJECT_DECL_VIRT(TH2I)
+DELETABLE_DECL_VIRT(TH2I)
+TARRAY_DECL_VIRT(TH2I)
+TH2I_DECL_VIRT(TH2I)
+TH2I_DECL_NONVIRT(TH2I)
+TH2I_DECL_ACCESSOR(TH2I)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2Poly.cpp b/csrc/HROOTHistTH2Poly.cpp
--- a/csrc/HROOTHistTH2Poly.cpp
+++ b/csrc/HROOTHistTH2Poly.cpp
@@ -1,19 +1,47 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
+#include "HROOTCoreTObject.h"
+
 #include "HROOTHistTH2.h"
+
 #include "TH2Poly.h"
-#include "HROOTHistTH2Poly.h"
 
+#include "HROOTHistTH2Poly.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH2Poly_fill1_PROTECTED ()
 
+#define IS_TH2Poly_fillN1_PROTECTED ()
+
+#define IS_TH2Poly_GetBinContent2_PROTECTED ()
+
+#define IS_TH2Poly_GetBinContent3_PROTECTED ()
+
+#define IS_TH2Poly_GetBinError2_PROTECTED ()
+
+#define IS_TH2Poly_GetBinError3_PROTECTED ()
+
+#define IS_TH2Poly_integral1_PROTECTED ()
+
+#define IS_TH2Poly_integral2_PROTECTED ()
+
+#define IS_TH2Poly_setBinContent2_PROTECTED ()
+
+#define IS_TH2Poly_setBinContent3_PROTECTED ()
+
+#define IS_TH2Poly_setBinError2_PROTECTED ()
+
+#define IS_TH2Poly_setBinError3_PROTECTED ()
 TH2_DEF_VIRT(TH2Poly)
 TH1_DEF_VIRT(TH2Poly)
 TNAMED_DEF_VIRT(TH2Poly)
@@ -22,8 +50,7 @@
 TATTMARKER_DEF_VIRT(TH2Poly)
 TOBJECT_DEF_VIRT(TH2Poly)
 DELETABLE_DEF_VIRT(TH2Poly)
-
 TH2POLY_DEF_VIRT(TH2Poly)
-
 TH2POLY_DEF_NONVIRT(TH2Poly)
+TH2POLY_DEF_ACCESSOR(TH2Poly)
 
diff --git a/csrc/HROOTHistTH2Poly.h b/csrc/HROOTHistTH2Poly.h
--- a/csrc/HROOTHistTH2Poly.h
+++ b/csrc/HROOTHistTH2Poly.h
@@ -1,53 +1,76 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2Poly__
-#define __HROOT_HIST__TH2Poly__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
 
-#undef TH2POLY_DECL_VIRT 
+#include "STDDeletable.h"
+
+#include "HROOT-coreType.h"
+
+
 #define TH2POLY_DECL_VIRT(Type) \
+int Type##_AddBin ( Type##_p p, TObject_p poly );\
+int Type##_FillS ( Type##_p p, const char* name, double w );
 
 
-#undef TH2POLY_DECL_NONVIRT 
 #define TH2POLY_DECL_NONVIRT(Type) \
+Type##_p Type##_newTH2Poly ( const char* name, const char* title, double xlow, double xup, double ylow, double yup );
 
 
-#undef TH2POLY_DEF_VIRT
-#define TH2POLY_DEF_VIRT(Type)\
+#define TH2POLY_DECL_ACCESSOR(Type) \
 
 
-#undef TH2POLY_DEF_NONVIRT
-#define TH2POLY_DEF_NONVIRT(Type)\
 
+#define TH2POLY_DEF_VIRT(Type) \
+int Type##_AddBin ( Type##_p p, TObject_p poly ) {\
+return ((TYPECASTMETHOD(Type, AddBin, TH2Poly))(p))->AddBin(from_nonconst_to_nonconst<TObject, TObject_t>(poly));\
+}\
+\
+int Type##_FillS ( Type##_p p, const char* name, double w ) {\
+return ((TYPECASTMETHOD(Type, FillS, TH2Poly))(p))->Fill(name, w);\
+}
 
-TH2_DECL_VIRT(TH2Poly);
-TH1_DECL_VIRT(TH2Poly);
-TNAMED_DECL_VIRT(TH2Poly);
-TATTLINE_DECL_VIRT(TH2Poly);
-TATTFILL_DECL_VIRT(TH2Poly);
-TATTMARKER_DECL_VIRT(TH2Poly);
-TOBJECT_DECL_VIRT(TH2Poly);
-DELETABLE_DECL_VIRT(TH2Poly);
 
+#define TH2POLY_DEF_NONVIRT(Type) \
+Type##_p Type##_newTH2Poly ( const char* name, const char* title, double xlow, double xup, double ylow, double yup ) {\
+Type* newp=new Type(name, title, xlow, xup, ylow, yup);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
-TH2POLY_DECL_VIRT(TH2Poly);
 
+#define TH2POLY_DEF_ACCESSOR(Type) \
 
-TH2POLY_DECL_NONVIRT(TH2Poly);
 
 
-#endif // __HROOT_HIST__TH2Poly__
+TH2_DECL_VIRT(TH2Poly)
+TH1_DECL_VIRT(TH2Poly)
+TNAMED_DECL_VIRT(TH2Poly)
+TATTLINE_DECL_VIRT(TH2Poly)
+TATTFILL_DECL_VIRT(TH2Poly)
+TATTMARKER_DECL_VIRT(TH2Poly)
+TOBJECT_DECL_VIRT(TH2Poly)
+DELETABLE_DECL_VIRT(TH2Poly)
+TH2POLY_DECL_VIRT(TH2Poly)
+TH2POLY_DECL_NONVIRT(TH2Poly)
+TH2POLY_DECL_ACCESSOR(TH2Poly)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH2S.cpp b/csrc/HROOTHistTH2S.cpp
--- a/csrc/HROOTHistTH2S.cpp
+++ b/csrc/HROOTHistTH2S.cpp
@@ -1,20 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayS.h"
+
 #include "TH2S.h"
-#include "HROOTHistTH2S.h"
 
+#include "HROOTHistTH2S.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
-#define IS_TH2S_fill1_PROTECTED ()
 
+#define IS_TH2S_fill1_PROTECTED ()
 TH2_DEF_VIRT(TH2S)
 TARRAYS_DEF_VIRT(TH2S)
 TH1_DEF_VIRT(TH2S)
@@ -25,8 +30,7 @@
 TOBJECT_DEF_VIRT(TH2S)
 DELETABLE_DEF_VIRT(TH2S)
 TARRAY_DEF_VIRT(TH2S)
-
 TH2S_DEF_VIRT(TH2S)
-
 TH2S_DEF_NONVIRT(TH2S)
+TH2S_DEF_ACCESSOR(TH2S)
 
diff --git a/csrc/HROOTHistTH2S.h b/csrc/HROOTHistTH2S.h
--- a/csrc/HROOTHistTH2S.h
+++ b/csrc/HROOTHistTH2S.h
@@ -1,58 +1,73 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH2S__
-#define __HROOT_HIST__TH2S__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH2.h"
+
 #include "HROOTCoreTArrayS.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH2S_DECL_VIRT 
+
 #define TH2S_DECL_VIRT(Type) \
 
 
-#undef TH2S_DECL_NONVIRT 
+
 #define TH2S_DECL_NONVIRT(Type) \
 
 
-#undef TH2S_DEF_VIRT
-#define TH2S_DEF_VIRT(Type)\
 
+#define TH2S_DECL_ACCESSOR(Type) \
 
-#undef TH2S_DEF_NONVIRT
-#define TH2S_DEF_NONVIRT(Type)\
 
 
-TH2_DECL_VIRT(TH2S);
-TARRAYS_DECL_VIRT(TH2S);
-TH1_DECL_VIRT(TH2S);
-TNAMED_DECL_VIRT(TH2S);
-TATTLINE_DECL_VIRT(TH2S);
-TATTFILL_DECL_VIRT(TH2S);
-TATTMARKER_DECL_VIRT(TH2S);
-TOBJECT_DECL_VIRT(TH2S);
-DELETABLE_DECL_VIRT(TH2S);
-TARRAY_DECL_VIRT(TH2S);
+#define TH2S_DEF_VIRT(Type) \
 
 
-TH2S_DECL_VIRT(TH2S);
 
+#define TH2S_DEF_NONVIRT(Type) \
 
-TH2S_DECL_NONVIRT(TH2S);
 
 
-#endif // __HROOT_HIST__TH2S__
+#define TH2S_DEF_ACCESSOR(Type) \
+
+
+
+TH2_DECL_VIRT(TH2S)
+TARRAYS_DECL_VIRT(TH2S)
+TH1_DECL_VIRT(TH2S)
+TNAMED_DECL_VIRT(TH2S)
+TATTLINE_DECL_VIRT(TH2S)
+TATTFILL_DECL_VIRT(TH2S)
+TATTMARKER_DECL_VIRT(TH2S)
+TOBJECT_DECL_VIRT(TH2S)
+DELETABLE_DECL_VIRT(TH2S)
+TARRAY_DECL_VIRT(TH2S)
+TH2S_DECL_VIRT(TH2S)
+TH2S_DECL_NONVIRT(TH2S)
+TH2S_DECL_ACCESSOR(TH2S)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH3.cpp b/csrc/HROOTHistTH3.cpp
--- a/csrc/HROOTHistTH3.cpp
+++ b/csrc/HROOTHistTH3.cpp
@@ -1,23 +1,31 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH1D.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTHistTF1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "TH3.h"
-#include "HROOTHistTH3.h"
 
+#include "HROOTHistTH3.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH3_fill1_PROTECTED ()
-#define IS_TH3_fill1w_PROTECTED ()
 
+#define IS_TH3_fill1w_PROTECTED ()
 TH1_DEF_VIRT(TH3)
 TATT3D_DEF_VIRT(TH3)
 TNAMED_DEF_VIRT(TH3)
@@ -26,8 +34,7 @@
 TATTMARKER_DEF_VIRT(TH3)
 TOBJECT_DEF_VIRT(TH3)
 DELETABLE_DEF_VIRT(TH3)
-
 TH3_DEF_VIRT(TH3)
-
 TH3_DEF_NONVIRT(TH3)
+TH3_DEF_ACCESSOR(TH3)
 
diff --git a/csrc/HROOTHistTH3.h b/csrc/HROOTHistTH3.h
--- a/csrc/HROOTHistTH3.h
+++ b/csrc/HROOTHistTH3.h
@@ -1,115 +1,126 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH3__
-#define __HROOT_HIST__TH3__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH3_DECL_VIRT 
+
 #define TH3_DECL_VIRT(Type) \
-int Type ## _fill3 ( Type ## _p p, double x, double y, double z ); \
-int Type ## _fill3w ( Type ## _p p, double x, double y, double z, double w ); \
-void Type ## _FitSlicesZ ( Type ## _p p, TF1_p f1, int binminx, int binmaxx, int binminy, int binmaxy, int cut, const char* option ); \
-double Type ## _getCorrelationFactor3 ( Type ## _p p, int axis1, int axis2 ); \
-double Type ## _getCovariance3 ( Type ## _p p, int axis1, int axis2 ); \
-TH3_p Type ## _rebinX3 ( Type ## _p p, int ngroup, const char* newname ); \
-TH3_p Type ## _rebinY3 ( Type ## _p p, int ngroup, const char* newname ); \
-TH3_p Type ## _rebinZ3 ( Type ## _p p, int ngroup, const char* newname ); \
-TH3_p Type ## _Rebin3D ( Type ## _p p, int nxgroup, int nygroup, int nzgroup, const char* newname )
+int Type##_fill3 ( Type##_p p, double x, double y, double z );\
+int Type##_fill3w ( Type##_p p, double x, double y, double z, double w );\
+void Type##_FitSlicesZ ( Type##_p p, TF1_p f1, int binminx, int binmaxx, int binminy, int binmaxy, int cut, const char* option );\
+double Type##_getCorrelationFactor3 ( Type##_p p, int axis1, int axis2 );\
+double Type##_getCovariance3 ( Type##_p p, int axis1, int axis2 );\
+TH3_p Type##_rebinX3 ( Type##_p p, int ngroup, const char* newname );\
+TH3_p Type##_rebinY3 ( Type##_p p, int ngroup, const char* newname );\
+TH3_p Type##_rebinZ3 ( Type##_p p, int ngroup, const char* newname );\
+TH3_p Type##_Rebin3D ( Type##_p p, int nxgroup, int nygroup, int nzgroup, const char* newname );
 
-#undef TH3_DECL_NONVIRT 
+
 #define TH3_DECL_NONVIRT(Type) \
-TH1D_p Type ## _tH3ProjectionX ( Type ## _p p, const char* name, int firstybin, int lastybin, int firstzbin, int lastzbin, const char* option ); \
-TH1D_p Type ## _tH3ProjectionY ( Type ## _p p, const char* name, int firstxbin, int lastxbin, int firstzbin, int lastzbin, const char* option ); \
-TH1D_p Type ## _tH3ProjectionZ ( Type ## _p p, const char* name, int firstxbin, int lastxbin, int firstybin, int lastybin, const char* option ); \
-TH1_p Type ## _tH3Project3D ( Type ## _p p, const char* option )
+TH1D_p Type##_tH3_ProjectionX ( Type##_p p, const char* name, int firstybin, int lastybin, int firstzbin, int lastzbin, const char* option );\
+TH1D_p Type##_tH3_ProjectionY ( Type##_p p, const char* name, int firstxbin, int lastxbin, int firstzbin, int lastzbin, const char* option );\
+TH1D_p Type##_tH3_ProjectionZ ( Type##_p p, const char* name, int firstxbin, int lastxbin, int firstybin, int lastybin, const char* option );\
+TH1_p Type##_tH3_Project3D ( Type##_p p, const char* option );
 
-#undef TH3_DEF_VIRT
-#define TH3_DEF_VIRT(Type)\
-int Type ## _fill3 ( Type ## _p p, double x, double y, double z )\
-{\
-return TYPECASTMETHOD(Type,fill3,TH3)(p)->Fill(x, y, z);\
+
+#define TH3_DECL_ACCESSOR(Type) \
+
+
+
+#define TH3_DEF_VIRT(Type) \
+int Type##_fill3 ( Type##_p p, double x, double y, double z ) {\
+return ((TYPECASTMETHOD(Type, fill3, TH3))(p))->Fill(x, y, z);\
 }\
-int Type ## _fill3w ( Type ## _p p, double x, double y, double z, double w )\
-{\
-return TYPECASTMETHOD(Type,fill3w,TH3)(p)->Fill(x, y, z, w);\
+\
+int Type##_fill3w ( Type##_p p, double x, double y, double z, double w ) {\
+return ((TYPECASTMETHOD(Type, fill3w, TH3))(p))->Fill(x, y, z, w);\
 }\
-void Type ## _FitSlicesZ ( Type ## _p p, TF1_p f1, int binminx, int binmaxx, int binminy, int binmaxy, int cut, const char* option )\
-{\
-TYPECASTMETHOD(Type,FitSlicesZ,TH3)(p)->FitSlicesZ(to_nonconst<TF1,TF1_t>(f1), binminx, binmaxx, binminy, binmaxy, cut, option);\
+\
+void Type##_FitSlicesZ ( Type##_p p, TF1_p f1, int binminx, int binmaxx, int binminy, int binmaxy, int cut, const char* option ) {\
+((TYPECASTMETHOD(Type, FitSlicesZ, TH3))(p))->FitSlicesZ(from_nonconst_to_nonconst<TF1, TF1_t>(f1), binminx, binmaxx, binminy, binmaxy, cut, option);\
 }\
-double Type ## _getCorrelationFactor3 ( Type ## _p p, int axis1, int axis2 )\
-{\
-return TYPECASTMETHOD(Type,getCorrelationFactor3,TH3)(p)->GetCorrelationFactor(axis1, axis2);\
+\
+double Type##_getCorrelationFactor3 ( Type##_p p, int axis1, int axis2 ) {\
+return ((TYPECASTMETHOD(Type, getCorrelationFactor3, TH3))(p))->GetCorrelationFactor(axis1, axis2);\
 }\
-double Type ## _getCovariance3 ( Type ## _p p, int axis1, int axis2 )\
-{\
-return TYPECASTMETHOD(Type,getCovariance3,TH3)(p)->GetCovariance(axis1, axis2);\
+\
+double Type##_getCovariance3 ( Type##_p p, int axis1, int axis2 ) {\
+return ((TYPECASTMETHOD(Type, getCovariance3, TH3))(p))->GetCovariance(axis1, axis2);\
 }\
-TH3_p Type ## _rebinX3 ( Type ## _p p, int ngroup, const char* newname )\
-{\
-return to_nonconst<TH3_t,TH3>((TH3*)TYPECASTMETHOD(Type,rebinX3,TH3)(p)->RebinX(ngroup, newname));\
+\
+TH3_p Type##_rebinX3 ( Type##_p p, int ngroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH3_t, TH3>((TH3*)((TYPECASTMETHOD(Type, rebinX3, TH3))(p))->RebinX(ngroup, newname));\
 }\
-TH3_p Type ## _rebinY3 ( Type ## _p p, int ngroup, const char* newname )\
-{\
-return to_nonconst<TH3_t,TH3>((TH3*)TYPECASTMETHOD(Type,rebinY3,TH3)(p)->RebinY(ngroup, newname));\
+\
+TH3_p Type##_rebinY3 ( Type##_p p, int ngroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH3_t, TH3>((TH3*)((TYPECASTMETHOD(Type, rebinY3, TH3))(p))->RebinY(ngroup, newname));\
 }\
-TH3_p Type ## _rebinZ3 ( Type ## _p p, int ngroup, const char* newname )\
-{\
-return to_nonconst<TH3_t,TH3>((TH3*)TYPECASTMETHOD(Type,rebinZ3,TH3)(p)->RebinZ(ngroup, newname));\
+\
+TH3_p Type##_rebinZ3 ( Type##_p p, int ngroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH3_t, TH3>((TH3*)((TYPECASTMETHOD(Type, rebinZ3, TH3))(p))->RebinZ(ngroup, newname));\
 }\
-TH3_p Type ## _Rebin3D ( Type ## _p p, int nxgroup, int nygroup, int nzgroup, const char* newname )\
-{\
-return to_nonconst<TH3_t,TH3>((TH3*)TYPECASTMETHOD(Type,Rebin3D,TH3)(p)->Rebin3D(nxgroup, nygroup, nzgroup, newname));\
+\
+TH3_p Type##_Rebin3D ( Type##_p p, int nxgroup, int nygroup, int nzgroup, const char* newname ) {\
+return from_nonconst_to_nonconst<TH3_t, TH3>((TH3*)((TYPECASTMETHOD(Type, Rebin3D, TH3))(p))->Rebin3D(nxgroup, nygroup, nzgroup, newname));\
 }
 
-#undef TH3_DEF_NONVIRT
-#define TH3_DEF_NONVIRT(Type)\
-TH1D_p Type ## _tH3ProjectionX ( Type ## _p p, const char* name, int firstybin, int lastybin, int firstzbin, int lastzbin, const char* option )\
-{\
-return to_nonconst<TH1D_t,TH1D>((TH1D*)TYPECASTMETHOD(Type,tH3ProjectionX,TH3)(p)->ProjectionX(name, firstybin, lastybin, firstzbin, lastzbin, option));\
+
+#define TH3_DEF_NONVIRT(Type) \
+TH1D_p Type##_tH3_ProjectionX ( Type##_p p, const char* name, int firstybin, int lastybin, int firstzbin, int lastzbin, const char* option ) {\
+return from_nonconst_to_nonconst<TH1D_t, TH1D>((TH1D*)((TYPECASTMETHOD(Type, tH3_ProjectionX, TH3))(p))->ProjectionX(name, firstybin, lastybin, firstzbin, lastzbin, option));\
 }\
-TH1D_p Type ## _tH3ProjectionY ( Type ## _p p, const char* name, int firstxbin, int lastxbin, int firstzbin, int lastzbin, const char* option )\
-{\
-return to_nonconst<TH1D_t,TH1D>((TH1D*)TYPECASTMETHOD(Type,tH3ProjectionY,TH3)(p)->ProjectionY(name, firstxbin, lastxbin, firstzbin, lastzbin, option));\
+\
+TH1D_p Type##_tH3_ProjectionY ( Type##_p p, const char* name, int firstxbin, int lastxbin, int firstzbin, int lastzbin, const char* option ) {\
+return from_nonconst_to_nonconst<TH1D_t, TH1D>((TH1D*)((TYPECASTMETHOD(Type, tH3_ProjectionY, TH3))(p))->ProjectionY(name, firstxbin, lastxbin, firstzbin, lastzbin, option));\
 }\
-TH1D_p Type ## _tH3ProjectionZ ( Type ## _p p, const char* name, int firstxbin, int lastxbin, int firstybin, int lastybin, const char* option )\
-{\
-return to_nonconst<TH1D_t,TH1D>((TH1D*)TYPECASTMETHOD(Type,tH3ProjectionZ,TH3)(p)->ProjectionZ(name, firstxbin, lastxbin, firstybin, lastybin, option));\
+\
+TH1D_p Type##_tH3_ProjectionZ ( Type##_p p, const char* name, int firstxbin, int lastxbin, int firstybin, int lastybin, const char* option ) {\
+return from_nonconst_to_nonconst<TH1D_t, TH1D>((TH1D*)((TYPECASTMETHOD(Type, tH3_ProjectionZ, TH3))(p))->ProjectionZ(name, firstxbin, lastxbin, firstybin, lastybin, option));\
 }\
-TH1_p Type ## _tH3Project3D ( Type ## _p p, const char* option )\
-{\
-return to_nonconst<TH1_t,TH1>((TH1*)TYPECASTMETHOD(Type,tH3Project3D,TH3)(p)->Project3D(option));\
+\
+TH1_p Type##_tH3_Project3D ( Type##_p p, const char* option ) {\
+return from_nonconst_to_nonconst<TH1_t, TH1>((TH1*)((TYPECASTMETHOD(Type, tH3_Project3D, TH3))(p))->Project3D(option));\
 }
 
-TH1_DECL_VIRT(TH3);
-TATT3D_DECL_VIRT(TH3);
-TNAMED_DECL_VIRT(TH3);
-TATTLINE_DECL_VIRT(TH3);
-TATTFILL_DECL_VIRT(TH3);
-TATTMARKER_DECL_VIRT(TH3);
-TOBJECT_DECL_VIRT(TH3);
-DELETABLE_DECL_VIRT(TH3);
 
+#define TH3_DEF_ACCESSOR(Type) \
 
-TH3_DECL_VIRT(TH3);
 
 
-TH3_DECL_NONVIRT(TH3);
-
-
-#endif // __HROOT_HIST__TH3__
+TH1_DECL_VIRT(TH3)
+TATT3D_DECL_VIRT(TH3)
+TNAMED_DECL_VIRT(TH3)
+TATTLINE_DECL_VIRT(TH3)
+TATTFILL_DECL_VIRT(TH3)
+TATTMARKER_DECL_VIRT(TH3)
+TOBJECT_DECL_VIRT(TH3)
+DELETABLE_DECL_VIRT(TH3)
+TH3_DECL_VIRT(TH3)
+TH3_DECL_NONVIRT(TH3)
+TH3_DECL_ACCESSOR(TH3)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH3C.cpp b/csrc/HROOTHistTH3C.cpp
--- a/csrc/HROOTHistTH3C.cpp
+++ b/csrc/HROOTHistTH3C.cpp
@@ -1,21 +1,27 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayC.h"
+
 #include "TH3C.h"
-#include "HROOTHistTH3C.h"
 
+#include "HROOTHistTH3C.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH3C_fill1_PROTECTED ()
-#define IS_TH3C_fill1w_PROTECTED ()
 
+#define IS_TH3C_fill1w_PROTECTED ()
 TH3_DEF_VIRT(TH3C)
 TARRAYC_DEF_VIRT(TH3C)
 TH1_DEF_VIRT(TH3C)
@@ -27,8 +33,7 @@
 TOBJECT_DEF_VIRT(TH3C)
 DELETABLE_DEF_VIRT(TH3C)
 TARRAY_DEF_VIRT(TH3C)
-
 TH3C_DEF_VIRT(TH3C)
-
 TH3C_DEF_NONVIRT(TH3C)
+TH3C_DEF_ACCESSOR(TH3C)
 
diff --git a/csrc/HROOTHistTH3C.h b/csrc/HROOTHistTH3C.h
--- a/csrc/HROOTHistTH3C.h
+++ b/csrc/HROOTHistTH3C.h
@@ -1,60 +1,76 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH3C__
-#define __HROOT_HIST__TH3C__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayC.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH3C_DECL_VIRT 
+
 #define TH3C_DECL_VIRT(Type) \
 
 
-#undef TH3C_DECL_NONVIRT 
+
 #define TH3C_DECL_NONVIRT(Type) \
 
 
-#undef TH3C_DEF_VIRT
-#define TH3C_DEF_VIRT(Type)\
 
+#define TH3C_DECL_ACCESSOR(Type) \
 
-#undef TH3C_DEF_NONVIRT
-#define TH3C_DEF_NONVIRT(Type)\
 
 
-TH3_DECL_VIRT(TH3C);
-TARRAYC_DECL_VIRT(TH3C);
-TH1_DECL_VIRT(TH3C);
-TATT3D_DECL_VIRT(TH3C);
-TNAMED_DECL_VIRT(TH3C);
-TATTLINE_DECL_VIRT(TH3C);
-TATTFILL_DECL_VIRT(TH3C);
-TATTMARKER_DECL_VIRT(TH3C);
-TOBJECT_DECL_VIRT(TH3C);
-DELETABLE_DECL_VIRT(TH3C);
-TARRAY_DECL_VIRT(TH3C);
+#define TH3C_DEF_VIRT(Type) \
 
 
-TH3C_DECL_VIRT(TH3C);
 
+#define TH3C_DEF_NONVIRT(Type) \
 
-TH3C_DECL_NONVIRT(TH3C);
 
 
-#endif // __HROOT_HIST__TH3C__
+#define TH3C_DEF_ACCESSOR(Type) \
+
+
+
+TH3_DECL_VIRT(TH3C)
+TARRAYC_DECL_VIRT(TH3C)
+TH1_DECL_VIRT(TH3C)
+TATT3D_DECL_VIRT(TH3C)
+TNAMED_DECL_VIRT(TH3C)
+TATTLINE_DECL_VIRT(TH3C)
+TATTFILL_DECL_VIRT(TH3C)
+TATTMARKER_DECL_VIRT(TH3C)
+TOBJECT_DECL_VIRT(TH3C)
+DELETABLE_DECL_VIRT(TH3C)
+TARRAY_DECL_VIRT(TH3C)
+TH3C_DECL_VIRT(TH3C)
+TH3C_DECL_NONVIRT(TH3C)
+TH3C_DECL_ACCESSOR(TH3C)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH3D.cpp b/csrc/HROOTHistTH3D.cpp
--- a/csrc/HROOTHistTH3D.cpp
+++ b/csrc/HROOTHistTH3D.cpp
@@ -1,21 +1,27 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "TH3D.h"
-#include "HROOTHistTH3D.h"
 
+#include "HROOTHistTH3D.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH3D_fill1_PROTECTED ()
-#define IS_TH3D_fill1w_PROTECTED ()
 
+#define IS_TH3D_fill1w_PROTECTED ()
 TH3_DEF_VIRT(TH3D)
 TARRAYD_DEF_VIRT(TH3D)
 TH1_DEF_VIRT(TH3D)
@@ -27,8 +33,7 @@
 TOBJECT_DEF_VIRT(TH3D)
 DELETABLE_DEF_VIRT(TH3D)
 TARRAY_DEF_VIRT(TH3D)
-
 TH3D_DEF_VIRT(TH3D)
-
 TH3D_DEF_NONVIRT(TH3D)
+TH3D_DEF_ACCESSOR(TH3D)
 
diff --git a/csrc/HROOTHistTH3D.h b/csrc/HROOTHistTH3D.h
--- a/csrc/HROOTHistTH3D.h
+++ b/csrc/HROOTHistTH3D.h
@@ -1,60 +1,76 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH3D__
-#define __HROOT_HIST__TH3D__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayD.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH3D_DECL_VIRT 
+
 #define TH3D_DECL_VIRT(Type) \
 
 
-#undef TH3D_DECL_NONVIRT 
+
 #define TH3D_DECL_NONVIRT(Type) \
 
 
-#undef TH3D_DEF_VIRT
-#define TH3D_DEF_VIRT(Type)\
 
+#define TH3D_DECL_ACCESSOR(Type) \
 
-#undef TH3D_DEF_NONVIRT
-#define TH3D_DEF_NONVIRT(Type)\
 
 
-TH3_DECL_VIRT(TH3D);
-TARRAYD_DECL_VIRT(TH3D);
-TH1_DECL_VIRT(TH3D);
-TATT3D_DECL_VIRT(TH3D);
-TNAMED_DECL_VIRT(TH3D);
-TATTLINE_DECL_VIRT(TH3D);
-TATTFILL_DECL_VIRT(TH3D);
-TATTMARKER_DECL_VIRT(TH3D);
-TOBJECT_DECL_VIRT(TH3D);
-DELETABLE_DECL_VIRT(TH3D);
-TARRAY_DECL_VIRT(TH3D);
+#define TH3D_DEF_VIRT(Type) \
 
 
-TH3D_DECL_VIRT(TH3D);
 
+#define TH3D_DEF_NONVIRT(Type) \
 
-TH3D_DECL_NONVIRT(TH3D);
 
 
-#endif // __HROOT_HIST__TH3D__
+#define TH3D_DEF_ACCESSOR(Type) \
+
+
+
+TH3_DECL_VIRT(TH3D)
+TARRAYD_DECL_VIRT(TH3D)
+TH1_DECL_VIRT(TH3D)
+TATT3D_DECL_VIRT(TH3D)
+TNAMED_DECL_VIRT(TH3D)
+TATTLINE_DECL_VIRT(TH3D)
+TATTFILL_DECL_VIRT(TH3D)
+TATTMARKER_DECL_VIRT(TH3D)
+TOBJECT_DECL_VIRT(TH3D)
+DELETABLE_DECL_VIRT(TH3D)
+TARRAY_DECL_VIRT(TH3D)
+TH3D_DECL_VIRT(TH3D)
+TH3D_DECL_NONVIRT(TH3D)
+TH3D_DECL_ACCESSOR(TH3D)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH3F.cpp b/csrc/HROOTHistTH3F.cpp
--- a/csrc/HROOTHistTH3F.cpp
+++ b/csrc/HROOTHistTH3F.cpp
@@ -1,21 +1,27 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "TH3F.h"
-#include "HROOTHistTH3F.h"
 
+#include "HROOTHistTH3F.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH3F_fill1_PROTECTED ()
-#define IS_TH3F_fill1w_PROTECTED ()
 
+#define IS_TH3F_fill1w_PROTECTED ()
 TH3_DEF_VIRT(TH3F)
 TARRAYF_DEF_VIRT(TH3F)
 TH1_DEF_VIRT(TH3F)
@@ -27,8 +33,7 @@
 TOBJECT_DEF_VIRT(TH3F)
 DELETABLE_DEF_VIRT(TH3F)
 TARRAY_DEF_VIRT(TH3F)
-
 TH3F_DEF_VIRT(TH3F)
-
 TH3F_DEF_NONVIRT(TH3F)
+TH3F_DEF_ACCESSOR(TH3F)
 
diff --git a/csrc/HROOTHistTH3F.h b/csrc/HROOTHistTH3F.h
--- a/csrc/HROOTHistTH3F.h
+++ b/csrc/HROOTHistTH3F.h
@@ -1,60 +1,76 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH3F__
-#define __HROOT_HIST__TH3F__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayF.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH3F_DECL_VIRT 
+
 #define TH3F_DECL_VIRT(Type) \
 
 
-#undef TH3F_DECL_NONVIRT 
+
 #define TH3F_DECL_NONVIRT(Type) \
 
 
-#undef TH3F_DEF_VIRT
-#define TH3F_DEF_VIRT(Type)\
 
+#define TH3F_DECL_ACCESSOR(Type) \
 
-#undef TH3F_DEF_NONVIRT
-#define TH3F_DEF_NONVIRT(Type)\
 
 
-TH3_DECL_VIRT(TH3F);
-TARRAYF_DECL_VIRT(TH3F);
-TH1_DECL_VIRT(TH3F);
-TATT3D_DECL_VIRT(TH3F);
-TNAMED_DECL_VIRT(TH3F);
-TATTLINE_DECL_VIRT(TH3F);
-TATTFILL_DECL_VIRT(TH3F);
-TATTMARKER_DECL_VIRT(TH3F);
-TOBJECT_DECL_VIRT(TH3F);
-DELETABLE_DECL_VIRT(TH3F);
-TARRAY_DECL_VIRT(TH3F);
+#define TH3F_DEF_VIRT(Type) \
 
 
-TH3F_DECL_VIRT(TH3F);
 
+#define TH3F_DEF_NONVIRT(Type) \
 
-TH3F_DECL_NONVIRT(TH3F);
 
 
-#endif // __HROOT_HIST__TH3F__
+#define TH3F_DEF_ACCESSOR(Type) \
+
+
+
+TH3_DECL_VIRT(TH3F)
+TARRAYF_DECL_VIRT(TH3F)
+TH1_DECL_VIRT(TH3F)
+TATT3D_DECL_VIRT(TH3F)
+TNAMED_DECL_VIRT(TH3F)
+TATTLINE_DECL_VIRT(TH3F)
+TATTFILL_DECL_VIRT(TH3F)
+TATTMARKER_DECL_VIRT(TH3F)
+TOBJECT_DECL_VIRT(TH3F)
+DELETABLE_DECL_VIRT(TH3F)
+TARRAY_DECL_VIRT(TH3F)
+TH3F_DECL_VIRT(TH3F)
+TH3F_DECL_NONVIRT(TH3F)
+TH3F_DECL_ACCESSOR(TH3F)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH3I.cpp b/csrc/HROOTHistTH3I.cpp
--- a/csrc/HROOTHistTH3I.cpp
+++ b/csrc/HROOTHistTH3I.cpp
@@ -1,21 +1,27 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayI.h"
+
 #include "TH3I.h"
-#include "HROOTHistTH3I.h"
 
+#include "HROOTHistTH3I.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH3I_fill1_PROTECTED ()
-#define IS_TH3I_fill1w_PROTECTED ()
 
+#define IS_TH3I_fill1w_PROTECTED ()
 TH3_DEF_VIRT(TH3I)
 TARRAYI_DEF_VIRT(TH3I)
 TH1_DEF_VIRT(TH3I)
@@ -27,8 +33,7 @@
 TOBJECT_DEF_VIRT(TH3I)
 DELETABLE_DEF_VIRT(TH3I)
 TARRAY_DEF_VIRT(TH3I)
-
 TH3I_DEF_VIRT(TH3I)
-
 TH3I_DEF_NONVIRT(TH3I)
+TH3I_DEF_ACCESSOR(TH3I)
 
diff --git a/csrc/HROOTHistTH3I.h b/csrc/HROOTHistTH3I.h
--- a/csrc/HROOTHistTH3I.h
+++ b/csrc/HROOTHistTH3I.h
@@ -1,60 +1,76 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH3I__
-#define __HROOT_HIST__TH3I__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayI.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH3I_DECL_VIRT 
+
 #define TH3I_DECL_VIRT(Type) \
 
 
-#undef TH3I_DECL_NONVIRT 
+
 #define TH3I_DECL_NONVIRT(Type) \
 
 
-#undef TH3I_DEF_VIRT
-#define TH3I_DEF_VIRT(Type)\
 
+#define TH3I_DECL_ACCESSOR(Type) \
 
-#undef TH3I_DEF_NONVIRT
-#define TH3I_DEF_NONVIRT(Type)\
 
 
-TH3_DECL_VIRT(TH3I);
-TARRAYI_DECL_VIRT(TH3I);
-TH1_DECL_VIRT(TH3I);
-TATT3D_DECL_VIRT(TH3I);
-TNAMED_DECL_VIRT(TH3I);
-TATTLINE_DECL_VIRT(TH3I);
-TATTFILL_DECL_VIRT(TH3I);
-TATTMARKER_DECL_VIRT(TH3I);
-TOBJECT_DECL_VIRT(TH3I);
-DELETABLE_DECL_VIRT(TH3I);
-TARRAY_DECL_VIRT(TH3I);
+#define TH3I_DEF_VIRT(Type) \
 
 
-TH3I_DECL_VIRT(TH3I);
 
+#define TH3I_DEF_NONVIRT(Type) \
 
-TH3I_DECL_NONVIRT(TH3I);
 
 
-#endif // __HROOT_HIST__TH3I__
+#define TH3I_DEF_ACCESSOR(Type) \
+
+
+
+TH3_DECL_VIRT(TH3I)
+TARRAYI_DECL_VIRT(TH3I)
+TH1_DECL_VIRT(TH3I)
+TATT3D_DECL_VIRT(TH3I)
+TNAMED_DECL_VIRT(TH3I)
+TATTLINE_DECL_VIRT(TH3I)
+TATTFILL_DECL_VIRT(TH3I)
+TATTMARKER_DECL_VIRT(TH3I)
+TOBJECT_DECL_VIRT(TH3I)
+DELETABLE_DECL_VIRT(TH3I)
+TARRAY_DECL_VIRT(TH3I)
+TH3I_DECL_VIRT(TH3I)
+TH3I_DECL_NONVIRT(TH3I)
+TH3I_DECL_ACCESSOR(TH3I)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTH3S.cpp b/csrc/HROOTHistTH3S.cpp
--- a/csrc/HROOTHistTH3S.cpp
+++ b/csrc/HROOTHistTH3S.cpp
@@ -1,21 +1,27 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayS.h"
+
 #include "TH3S.h"
-#include "HROOTHistTH3S.h"
 
+#include "HROOTHistTH3S.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
+
 #define IS_TH3S_fill1_PROTECTED ()
-#define IS_TH3S_fill1w_PROTECTED ()
 
+#define IS_TH3S_fill1w_PROTECTED ()
 TH3_DEF_VIRT(TH3S)
 TARRAYS_DEF_VIRT(TH3S)
 TH1_DEF_VIRT(TH3S)
@@ -27,8 +33,7 @@
 TOBJECT_DEF_VIRT(TH3S)
 DELETABLE_DEF_VIRT(TH3S)
 TARRAY_DEF_VIRT(TH3S)
-
 TH3S_DEF_VIRT(TH3S)
-
 TH3S_DEF_NONVIRT(TH3S)
+TH3S_DEF_ACCESSOR(TH3S)
 
diff --git a/csrc/HROOTHistTH3S.h b/csrc/HROOTHistTH3S.h
--- a/csrc/HROOTHistTH3S.h
+++ b/csrc/HROOTHistTH3S.h
@@ -1,60 +1,76 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__TH3S__
-#define __HROOT_HIST__TH3S__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTHistTH3.h"
+
 #include "HROOTCoreTArrayS.h"
+
 #include "HROOTHistTH1.h"
+
 #include "HROOTCoreTAtt3D.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTAttLine.h"
+
 #include "HROOTCoreTAttFill.h"
+
 #include "HROOTCoreTAttMarker.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOTCoreTArray.h"
+
 #include "HROOT-coreType.h"
 
-#undef TH3S_DECL_VIRT 
+
 #define TH3S_DECL_VIRT(Type) \
 
 
-#undef TH3S_DECL_NONVIRT 
+
 #define TH3S_DECL_NONVIRT(Type) \
 
 
-#undef TH3S_DEF_VIRT
-#define TH3S_DEF_VIRT(Type)\
 
+#define TH3S_DECL_ACCESSOR(Type) \
 
-#undef TH3S_DEF_NONVIRT
-#define TH3S_DEF_NONVIRT(Type)\
 
 
-TH3_DECL_VIRT(TH3S);
-TARRAYS_DECL_VIRT(TH3S);
-TH1_DECL_VIRT(TH3S);
-TATT3D_DECL_VIRT(TH3S);
-TNAMED_DECL_VIRT(TH3S);
-TATTLINE_DECL_VIRT(TH3S);
-TATTFILL_DECL_VIRT(TH3S);
-TATTMARKER_DECL_VIRT(TH3S);
-TOBJECT_DECL_VIRT(TH3S);
-DELETABLE_DECL_VIRT(TH3S);
-TARRAY_DECL_VIRT(TH3S);
+#define TH3S_DEF_VIRT(Type) \
 
 
-TH3S_DECL_VIRT(TH3S);
 
+#define TH3S_DEF_NONVIRT(Type) \
 
-TH3S_DECL_NONVIRT(TH3S);
 
 
-#endif // __HROOT_HIST__TH3S__
+#define TH3S_DEF_ACCESSOR(Type) \
+
+
+
+TH3_DECL_VIRT(TH3S)
+TARRAYS_DECL_VIRT(TH3S)
+TH1_DECL_VIRT(TH3S)
+TATT3D_DECL_VIRT(TH3S)
+TNAMED_DECL_VIRT(TH3S)
+TATTLINE_DECL_VIRT(TH3S)
+TATTFILL_DECL_VIRT(TH3S)
+TATTMARKER_DECL_VIRT(TH3S)
+TOBJECT_DECL_VIRT(TH3S)
+DELETABLE_DECL_VIRT(TH3S)
+TARRAY_DECL_VIRT(TH3S)
+TH3S_DECL_VIRT(TH3S)
+TH3S_DECL_NONVIRT(TH3S)
+TH3S_DECL_ACCESSOR(TH3S)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTHStack.cpp b/csrc/HROOTHistTHStack.cpp
--- a/csrc/HROOTHistTHStack.cpp
+++ b/csrc/HROOTHistTHStack.cpp
@@ -1,23 +1,25 @@
-#include <MacroPatternMatch.h>
+
+#include "MacroPatternMatch.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "THStack.h"
-#include "HROOTHistTHStack.h"
 
+#include "HROOTHistTHStack.h"
 
+using namespace ROOT;
 
-#define CHECKPROTECT(x,y) IS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
 
 #define TYPECASTMETHOD(cname,mname,oname) \
-  IIF( CHECKPROTECT(cname,mname) ) ( \
-  (to_nonconst<oname,cname ## _t>), \
-  (to_nonconst<cname,cname ## _t>) )
-
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
 
 TNAMED_DEF_VIRT(THStack)
 TOBJECT_DEF_VIRT(THStack)
 DELETABLE_DEF_VIRT(THStack)
-
 THSTACK_DEF_VIRT(THStack)
-
 THSTACK_DEF_NONVIRT(THStack)
+THSTACK_DEF_ACCESSOR(THStack)
 
diff --git a/csrc/HROOTHistTHStack.h b/csrc/HROOTHistTHStack.h
--- a/csrc/HROOTHistTHStack.h
+++ b/csrc/HROOTHistTHStack.h
@@ -1,48 +1,54 @@
+
 #ifdef __cplusplus
-extern "C" { 
+extern "C" {
 #endif
 
-#ifndef __HROOT_HIST__THStack__
-#define __HROOT_HIST__THStack__
+#pragma once
 
+
 #include "HROOT-histType.h"
+
 #include "HROOTCoreTNamed.h"
+
 #include "HROOTCoreTObject.h"
-#include "HROOTCoreDeletable.h"
+
+#include "STDDeletable.h"
+
 #include "HROOT-coreType.h"
 
-#undef THSTACK_DECL_VIRT 
+
 #define THSTACK_DECL_VIRT(Type) \
 
 
-#undef THSTACK_DECL_NONVIRT 
+
 #define THSTACK_DECL_NONVIRT(Type) \
-Type ## _p Type ## _newTHStack ( const char* name, const char* title )
+Type##_p Type##_newTHStack ( const char* name, const char* title );
 
-#undef THSTACK_DEF_VIRT
-#define THSTACK_DEF_VIRT(Type)\
 
+#define THSTACK_DECL_ACCESSOR(Type) \
 
-#undef THSTACK_DEF_NONVIRT
-#define THSTACK_DEF_NONVIRT(Type)\
-Type ## _p Type ## _newTHStack ( const char* name, const char* title )\
-{\
-Type * newp = new Type (name, title); \
-return to_nonconst<Type ## _t, Type >(newp);\
-}
 
-TNAMED_DECL_VIRT(THStack);
-TOBJECT_DECL_VIRT(THStack);
-DELETABLE_DECL_VIRT(THStack);
 
+#define THSTACK_DEF_VIRT(Type) \
 
-THSTACK_DECL_VIRT(THStack);
 
 
-THSTACK_DECL_NONVIRT(THStack);
+#define THSTACK_DEF_NONVIRT(Type) \
+Type##_p Type##_newTHStack ( const char* name, const char* title ) {\
+Type* newp=new Type(name, title);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
 
 
-#endif // __HROOT_HIST__THStack__
+#define THSTACK_DEF_ACCESSOR(Type) \
+
+
+
+TNAMED_DECL_VIRT(THStack)
+TOBJECT_DECL_VIRT(THStack)
+DELETABLE_DECL_VIRT(THStack)
+THSTACK_DECL_VIRT(THStack)
+THSTACK_DECL_NONVIRT(THStack)
+THSTACK_DECL_ACCESSOR(THStack)
 
 #ifdef __cplusplus
 }
diff --git a/csrc/HROOTHistTMultiGraph.cpp b/csrc/HROOTHistTMultiGraph.cpp
new file mode 100644
--- /dev/null
+++ b/csrc/HROOTHistTMultiGraph.cpp
@@ -0,0 +1,27 @@
+
+#include "MacroPatternMatch.h"
+
+#include "HROOTHistTGraph.h"
+
+#include "HROOTCoreTNamed.h"
+
+#include "TMultiGraph.h"
+
+#include "HROOTHistTMultiGraph.h"
+
+using namespace ROOT;
+
+#define CHECKPROTECT(x,y) FXIS_PAREN(IS_ ## x ## _ ## y ## _PROTECTED)
+
+#define TYPECASTMETHOD(cname,mname,oname) \
+  FXIIF( CHECKPROTECT(cname,mname) ) ( \
+  (from_nonconst_to_nonconst<oname,cname ## _t>), \
+  (from_nonconst_to_nonconst<cname,cname ## _t>) )
+
+TNAMED_DEF_VIRT(TMultiGraph)
+TOBJECT_DEF_VIRT(TMultiGraph)
+DELETABLE_DEF_VIRT(TMultiGraph)
+TMULTIGRAPH_DEF_VIRT(TMultiGraph)
+TMULTIGRAPH_DEF_NONVIRT(TMultiGraph)
+TMULTIGRAPH_DEF_ACCESSOR(TMultiGraph)
+
diff --git a/csrc/HROOTHistTMultiGraph.h b/csrc/HROOTHistTMultiGraph.h
new file mode 100644
--- /dev/null
+++ b/csrc/HROOTHistTMultiGraph.h
@@ -0,0 +1,58 @@
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#pragma once
+
+
+#include "HROOT-histType.h"
+
+#include "HROOTCoreTNamed.h"
+
+#include "HROOTCoreTObject.h"
+
+#include "STDDeletable.h"
+
+#include "HROOT-coreType.h"
+
+
+#define TMULTIGRAPH_DECL_VIRT(Type) \
+void Type##_AddG ( Type##_p p, TGraph_p graph, const char* chopt );
+
+
+#define TMULTIGRAPH_DECL_NONVIRT(Type) \
+Type##_p Type##_newTMultiGraph ( const char* name, const char* title );
+
+
+#define TMULTIGRAPH_DECL_ACCESSOR(Type) \
+
+
+
+#define TMULTIGRAPH_DEF_VIRT(Type) \
+void Type##_AddG ( Type##_p p, TGraph_p graph, const char* chopt ) {\
+((TYPECASTMETHOD(Type, AddG, TMultiGraph))(p))->Add(from_nonconst_to_nonconst<TGraph, TGraph_t>(graph), chopt);\
+}
+
+
+#define TMULTIGRAPH_DEF_NONVIRT(Type) \
+Type##_p Type##_newTMultiGraph ( const char* name, const char* title ) {\
+Type* newp=new Type(name, title);return from_nonconst_to_nonconst<Type##_t, Type>(newp);\
+}
+
+
+#define TMULTIGRAPH_DEF_ACCESSOR(Type) \
+
+
+
+TNAMED_DECL_VIRT(TMultiGraph)
+TOBJECT_DECL_VIRT(TMultiGraph)
+DELETABLE_DECL_VIRT(TMultiGraph)
+TMULTIGRAPH_DECL_VIRT(TMultiGraph)
+TMULTIGRAPH_DECL_NONVIRT(TMultiGraph)
+TMULTIGRAPH_DECL_ACCESSOR(TMultiGraph)
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/src/HROOT/Hist.hs b/src/HROOT/Hist.hs
--- a/src/HROOT/Hist.hs
+++ b/src/HROOT/Hist.hs
@@ -1,40 +1,31 @@
-module HROOT.Hist (
-  module HROOT.Hist.TAxis
-, module HROOT.Hist.TF1
-, module HROOT.Hist.TFitResult
-, module HROOT.Hist.TFitResultPtr
-, module HROOT.Hist.TGraph
-, module HROOT.Hist.TGraphAsymmErrors
-, module HROOT.Hist.TGraphBentErrors
-, module HROOT.Hist.TGraphErrors
-, module HROOT.Hist.TH1
-, module HROOT.Hist.TH1C
-, module HROOT.Hist.TH1D
-, module HROOT.Hist.TH1F
-, module HROOT.Hist.TH1I
-, module HROOT.Hist.TH1K
-, module HROOT.Hist.TH1S
-, module HROOT.Hist.TH2
-, module HROOT.Hist.TH2C
-, module HROOT.Hist.TH2D
-, module HROOT.Hist.TH2F
-, module HROOT.Hist.TH2I
-, module HROOT.Hist.TH2Poly
-, module HROOT.Hist.TH2S
-, module HROOT.Hist.TH3
-, module HROOT.Hist.TH3C
-, module HROOT.Hist.TH3D
-, module HROOT.Hist.TH3F
-, module HROOT.Hist.TH3I
-, module HROOT.Hist.TH3S
-, module HROOT.Hist.THStack
-) where
-
+{-# LANGUAGE FlexibleContexts, FlexibleInstances,
+  ForeignFunctionInterface, InterruptibleFFI #-}
+module HROOT.Hist
+       (module HROOT.Hist.TAxis, module HROOT.Hist.TF1,
+        module HROOT.Hist.TFitResult, module HROOT.Hist.TFitResultPtr,
+        module HROOT.Hist.TGraph, module HROOT.Hist.TGraph2D,
+        module HROOT.Hist.TGraphAsymmErrors,
+        module HROOT.Hist.TGraphBentErrors, module HROOT.Hist.TGraphErrors,
+        module HROOT.Hist.TH1, module HROOT.Hist.TH1C,
+        module HROOT.Hist.TH1D, module HROOT.Hist.TH1F,
+        module HROOT.Hist.TH1I, module HROOT.Hist.TH1K,
+        module HROOT.Hist.TH1S, module HROOT.Hist.TH2,
+        module HROOT.Hist.TH2C, module HROOT.Hist.TH2D,
+        module HROOT.Hist.TH2F, module HROOT.Hist.TH2I,
+        module HROOT.Hist.TH2Poly, module HROOT.Hist.TH2S,
+        module HROOT.Hist.TH3, module HROOT.Hist.TH3C,
+        module HROOT.Hist.TH3D, module HROOT.Hist.TH3F,
+        module HROOT.Hist.TH3I, module HROOT.Hist.TH3S,
+        module HROOT.Hist.THStack, module HROOT.Hist.TMultiGraph,
+        module HROOT.Hist.Ordinary, module HROOT.Hist.Template,
+        module HROOT.Hist.TH)
+       where
 import HROOT.Hist.TAxis
 import HROOT.Hist.TF1
 import HROOT.Hist.TFitResult
 import HROOT.Hist.TFitResultPtr
 import HROOT.Hist.TGraph
+import HROOT.Hist.TGraph2D
 import HROOT.Hist.TGraphAsymmErrors
 import HROOT.Hist.TGraphBentErrors
 import HROOT.Hist.TGraphErrors
@@ -59,7 +50,7 @@
 import HROOT.Hist.TH3I
 import HROOT.Hist.TH3S
 import HROOT.Hist.THStack
-
-
-
-
+import HROOT.Hist.TMultiGraph
+import HROOT.Hist.Template
+import HROOT.Hist.TH
+import HROOT.Hist.Ordinary
diff --git a/src/HROOT/Hist/Ordinary.hs b/src/HROOT/Hist/Ordinary.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/Ordinary.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE FlexibleContexts, FlexibleInstances,
+  ForeignFunctionInterface, InterruptibleFFI #-}
+module HROOT.Hist.Ordinary () where
+import Foreign.C
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
diff --git a/src/HROOT/Hist/TAxis.hs b/src/HROOT/Hist/TAxis.hs
--- a/src/HROOT/Hist/TAxis.hs
+++ b/src/HROOT/Hist/TAxis.hs
@@ -1,6 +1,8 @@
 module HROOT.Hist.TAxis
        (TAxis(..), ITAxis(..), upcastTAxis, downcastTAxis, newTAxis,
-        tAxisGetCenterLabels, tAxisGetCenterTitle)
+        tAxis_GetCenterLabels, tAxis_GetCenterTitle, tAxis_GetFirst,
+        tAxis_GetLast, tAxis_GetNbins, tAxis_GetXbins, tAxis_GetXmax,
+        tAxis_GetXmin)
        where
 import HROOT.Hist.TAxis.RawType
 import HROOT.Hist.TAxis.Interface
diff --git a/src/HROOT/Hist/TAxis/Cast.hs b/src/HROOT/Hist/TAxis/Cast.hs
--- a/src/HROOT/Hist/TAxis/Cast.hs
+++ b/src/HROOT/Hist/TAxis/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TAxis.RawType
 import HROOT.Hist.TAxis.Interface
 
-instance (ITAxis a, FPtr a) => Castable a (Ptr RawTAxis) where
+instance (ITAxis a, FPtr a) => Castable (a) (Ptr RawTAxis) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TAxis (Ptr RawTAxis) where
+instance () => Castable (TAxis) (Ptr RawTAxis) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TAxis/FFI.hsc b/src/HROOT/Hist/TAxis/FFI.hsc
--- a/src/HROOT/Hist/TAxis/FFI.hsc
+++ b/src/HROOT/Hist/TAxis/FFI.hsc
@@ -1,144 +1,213 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TAxis.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TAxis.RawType
+import HROOT.Hist.TAxis.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
+import HROOT.Core.TArrayD.RawType
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetName"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_SetName"
                c_taxis_setname :: Ptr RawTAxis -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetNameTitle"
-               c_taxis_setnametitle :: Ptr RawTAxis -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetNameTitle" c_taxis_setnametitle ::
+               Ptr RawTAxis -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTitle"
-               c_taxis_settitle :: Ptr RawTAxis -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTitle" c_taxis_settitle ::
+               Ptr RawTAxis -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetNdivisions"
-               c_taxis_getndivisions :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetNdivisions" c_taxis_getndivisions ::
+               Ptr RawTAxis -> IO CInt
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetAxisColor"
-               c_taxis_getaxiscolor :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetAxisColor" c_taxis_getaxiscolor ::
+               Ptr RawTAxis -> IO CShort
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetLabelColor"
-               c_taxis_getlabelcolor :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetLabelColor" c_taxis_getlabelcolor ::
+               Ptr RawTAxis -> IO CShort
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetLabelFont"
-               c_taxis_getlabelfont :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetLabelFont" c_taxis_getlabelfont ::
+               Ptr RawTAxis -> IO CShort
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetLabelOffset"
-               c_taxis_getlabeloffset :: Ptr RawTAxis -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetLabelOffset" c_taxis_getlabeloffset ::
+               Ptr RawTAxis -> IO CFloat
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetLabelSize"
-               c_taxis_getlabelsize :: Ptr RawTAxis -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetLabelSize" c_taxis_getlabelsize ::
+               Ptr RawTAxis -> IO CFloat
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetTitleOffset"
-               c_taxis_gettitleoffset :: Ptr RawTAxis -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetTitleOffset" c_taxis_gettitleoffset ::
+               Ptr RawTAxis -> IO CFloat
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetTitleSize"
-               c_taxis_gettitlesize :: Ptr RawTAxis -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetTitleSize" c_taxis_gettitlesize ::
+               Ptr RawTAxis -> IO CFloat
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetTickLength"
-               c_taxis_getticklength :: Ptr RawTAxis -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetTickLength" c_taxis_getticklength ::
+               Ptr RawTAxis -> IO CFloat
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetTitleFont"
-               c_taxis_gettitlefont :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetTitleFont" c_taxis_gettitlefont ::
+               Ptr RawTAxis -> IO CShort
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetNdivisions"
-               c_taxis_setndivisions :: Ptr RawTAxis -> CInt -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetNdivisions" c_taxis_setndivisions ::
+               Ptr RawTAxis -> CInt -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetAxisColor"
-               c_taxis_setaxiscolor :: Ptr RawTAxis -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetAxisColor" c_taxis_setaxiscolor ::
+               Ptr RawTAxis -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetLabelColor"
-               c_taxis_setlabelcolor :: Ptr RawTAxis -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetLabelColor" c_taxis_setlabelcolor ::
+               Ptr RawTAxis -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetLabelFont"
-               c_taxis_setlabelfont :: Ptr RawTAxis -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetLabelFont" c_taxis_setlabelfont ::
+               Ptr RawTAxis -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetLabelOffset"
-               c_taxis_setlabeloffset :: Ptr RawTAxis -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetLabelOffset" c_taxis_setlabeloffset ::
+               Ptr RawTAxis -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetLabelSize"
-               c_taxis_setlabelsize :: Ptr RawTAxis -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetLabelSize" c_taxis_setlabelsize ::
+               Ptr RawTAxis -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTickLength"
-               c_taxis_setticklength :: Ptr RawTAxis -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTickLength" c_taxis_setticklength ::
+               Ptr RawTAxis -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTitleOffset"
-               c_taxis_settitleoffset :: Ptr RawTAxis -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTitleOffset" c_taxis_settitleoffset ::
+               Ptr RawTAxis -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTitleSize"
-               c_taxis_settitlesize :: Ptr RawTAxis -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTitleSize" c_taxis_settitlesize ::
+               Ptr RawTAxis -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTitleColor"
-               c_taxis_settitlecolor :: Ptr RawTAxis -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTitleColor" c_taxis_settitlecolor ::
+               Ptr RawTAxis -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTitleFont"
-               c_taxis_settitlefont :: Ptr RawTAxis -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTitleFont" c_taxis_settitlefont ::
+               Ptr RawTAxis -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_Draw"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_Clear"
+               c_taxis_clear :: Ptr RawTAxis -> CString -> IO ()
+
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_Draw"
                c_taxis_draw :: Ptr RawTAxis -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_FindObject"
-               c_taxis_findobject ::
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_FindObject" c_taxis_findobject ::
                Ptr RawTAxis -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetName"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_GetName"
                c_taxis_getname :: Ptr RawTAxis -> IO CString
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_IsA" c_taxis_isa
-               :: Ptr RawTAxis -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_IsA"
+               c_taxis_isa :: Ptr RawTAxis -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_Paint"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_Paint"
                c_taxis_paint :: Ptr RawTAxis -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_printObj"
-               c_taxis_printobj :: Ptr RawTAxis -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_printObj" c_taxis_printobj ::
+               Ptr RawTAxis -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SaveAs"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_SaveAs"
                c_taxis_saveas :: Ptr RawTAxis -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_Write"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_Write"
                c_taxis_write :: Ptr RawTAxis -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_delete"
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_Write_"
+               c_taxis_write_ :: Ptr RawTAxis -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTAxis.h TAxis_delete"
                c_taxis_delete :: Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_newTAxis"
-               c_taxis_newtaxis :: CInt -> CDouble -> CDouble -> IO (Ptr RawTAxis)
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_newTAxis" c_taxis_newtaxis ::
+               CInt -> CDouble -> CDouble -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_findBinTAxis"
-               c_taxis_findbintaxis :: Ptr RawTAxis -> CDouble -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_findBinTAxis" c_taxis_findbintaxis ::
+               Ptr RawTAxis -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_findFixBinTAxis"
-               c_taxis_findfixbintaxis :: Ptr RawTAxis -> CDouble -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_findFixBinTAxis" c_taxis_findfixbintaxis ::
+               Ptr RawTAxis -> CDouble -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTAxis.h TAxis_getBinCenterTAxis"
                c_taxis_getbincentertaxis :: Ptr RawTAxis -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetBinCenterLog"
-               c_taxis_getbincenterlog :: Ptr RawTAxis -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetBinCenterLog" c_taxis_getbincenterlog ::
+               Ptr RawTAxis -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_GetBinUpEdge"
-               c_taxis_getbinupedge :: Ptr RawTAxis -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_GetBinUpEdge" c_taxis_getbinupedge ::
+               Ptr RawTAxis -> CInt -> IO CDouble
 
-foreign import ccall safe
-               "HROOTHistTAxis.h TAxis_tAxisGetCenterLabels"
-               c_taxis_taxisgetcenterlabels :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetCenterLabels"
+               c_taxis_taxis_getcenterlabels :: Ptr RawTAxis -> IO CBool
 
-foreign import ccall safe
-               "HROOTHistTAxis.h TAxis_tAxisGetCenterTitle"
-               c_taxis_taxisgetcentertitle :: Ptr RawTAxis -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetCenterTitle"
+               c_taxis_taxis_getcentertitle :: Ptr RawTAxis -> IO CBool
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTimeDisplay"
-               c_taxis_settimedisplay :: Ptr RawTAxis -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetFirst" c_taxis_taxis_getfirst ::
+               Ptr RawTAxis -> IO CInt
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTimeFormat"
-               c_taxis_settimeformat :: Ptr RawTAxis -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetLast" c_taxis_taxis_getlast ::
+               Ptr RawTAxis -> IO CInt
 
-foreign import ccall safe "HROOTHistTAxis.h TAxis_SetTimeOffset"
-               c_taxis_settimeoffset ::
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetNbins" c_taxis_taxis_getnbins ::
+               Ptr RawTAxis -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetXbins" c_taxis_taxis_getxbins ::
+               Ptr RawTAxis -> IO (Ptr RawTArrayD)
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetXmax" c_taxis_taxis_getxmax ::
+               Ptr RawTAxis -> IO CDouble
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_tAxis_GetXmin" c_taxis_taxis_getxmin ::
+               Ptr RawTAxis -> IO CDouble
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetLimits" c_taxis_setlimits ::
+               Ptr RawTAxis -> CDouble -> CDouble -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTimeDisplay" c_taxis_settimedisplay ::
+               Ptr RawTAxis -> CInt -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTimeFormat" c_taxis_settimeformat ::
+               Ptr RawTAxis -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTAxis.h TAxis_SetTimeOffset" c_taxis_settimeoffset ::
                Ptr RawTAxis -> CDouble -> CString -> IO ()
diff --git a/src/HROOT/Hist/TAxis/Implementation.hs b/src/HROOT/Hist/TAxis/Implementation.hs
--- a/src/HROOT/Hist/TAxis/Implementation.hs
+++ b/src/HROOT/Hist/TAxis/Implementation.hs
@@ -1,20 +1,32 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TAxis.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TAxis.RawType
 import HROOT.Hist.TAxis.FFI
 import HROOT.Hist.TAxis.Interface
 import HROOT.Hist.TAxis.Cast
+import HROOT.Hist.TAxis.RawType
+import HROOT.Hist.TAxis.Cast
+import HROOT.Hist.TAxis.Interface
 import HROOT.Core.TClass.RawType
 import HROOT.Core.TClass.Cast
 import HROOT.Core.TClass.Interface
+import HROOT.Core.TArrayD.RawType
+import HROOT.Core.TArrayD.Cast
+import HROOT.Core.TArrayD.Interface
 import HROOT.Core.TNamed.RawType
 import HROOT.Core.TNamed.Cast
 import HROOT.Core.TNamed.Interface
@@ -24,26 +36,27 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITAxis TAxis where
+instance () => ITAxis (TAxis) where
         findBinTAxis = xform1 c_taxis_findbintaxis
         findFixBinTAxis = xform1 c_taxis_findfixbintaxis
         getBinCenterTAxis = xform1 c_taxis_getbincentertaxis
         getBinCenterLog = xform1 c_taxis_getbincenterlog
         getBinUpEdge = xform1 c_taxis_getbinupedge
+        setLimits = xform2 c_taxis_setlimits
         setTimeDisplay = xform1 c_taxis_settimedisplay
         setTimeFormat = xform1 c_taxis_settimeformat
         setTimeOffset = xform2 c_taxis_settimeoffset
 
-instance ITNamed TAxis where
+instance () => ITNamed (TAxis) where
         setName = xform1 c_taxis_setname
         setNameTitle = xform2 c_taxis_setnametitle
         setTitle = xform1 c_taxis_settitle
 
-instance ITAttAxis TAxis where
+instance () => ITAttAxis (TAxis) where
         getNdivisions = xform0 c_taxis_getndivisions
         getAxisColor = xform0 c_taxis_getaxiscolor
         getLabelColor = xform0 c_taxis_getlabelcolor
@@ -66,7 +79,8 @@
         setTitleColor = xform1 c_taxis_settitlecolor
         setTitleFont = xform1 c_taxis_settitlefont
 
-instance ITObject TAxis where
+instance () => ITObject (TAxis) where
+        clear = xform1 c_taxis_clear
         draw = xform1 c_taxis_draw
         findObject = xform1 c_taxis_findobject
         getName = xform0 c_taxis_getname
@@ -75,15 +89,34 @@
         printObj = xform1 c_taxis_printobj
         saveAs = xform2 c_taxis_saveas
         write = xform3 c_taxis_write
+        write_ = xform0 c_taxis_write_
 
-instance IDeletable TAxis where
+instance () => IDeletable (TAxis) where
         delete = xform0 c_taxis_delete
 
-newTAxis :: CInt -> CDouble -> CDouble -> IO TAxis
+newTAxis :: () => CInt -> CDouble -> CDouble -> IO TAxis
 newTAxis = xform2 c_taxis_newtaxis
 
-tAxisGetCenterLabels :: TAxis -> IO CInt
-tAxisGetCenterLabels = xform0 c_taxis_taxisgetcenterlabels
+tAxis_GetCenterLabels :: () => TAxis -> IO CBool
+tAxis_GetCenterLabels = xform0 c_taxis_taxis_getcenterlabels
 
-tAxisGetCenterTitle :: TAxis -> IO CInt
-tAxisGetCenterTitle = xform0 c_taxis_taxisgetcentertitle
+tAxis_GetCenterTitle :: () => TAxis -> IO CBool
+tAxis_GetCenterTitle = xform0 c_taxis_taxis_getcentertitle
+
+tAxis_GetFirst :: () => TAxis -> IO CInt
+tAxis_GetFirst = xform0 c_taxis_taxis_getfirst
+
+tAxis_GetLast :: () => TAxis -> IO CInt
+tAxis_GetLast = xform0 c_taxis_taxis_getlast
+
+tAxis_GetNbins :: () => TAxis -> IO CInt
+tAxis_GetNbins = xform0 c_taxis_taxis_getnbins
+
+tAxis_GetXbins :: () => TAxis -> IO TArrayD
+tAxis_GetXbins = xform0 c_taxis_taxis_getxbins
+
+tAxis_GetXmax :: () => TAxis -> IO CDouble
+tAxis_GetXmax = xform0 c_taxis_taxis_getxmax
+
+tAxis_GetXmin :: () => TAxis -> IO CDouble
+tAxis_GetXmin = xform0 c_taxis_taxis_getxmin
diff --git a/src/HROOT/Hist/TAxis/Interface.hs b/src/HROOT/Hist/TAxis/Interface.hs
--- a/src/HROOT/Hist/TAxis/Interface.hs
+++ b/src/HROOT/Hist/TAxis/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TAxis.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -12,21 +13,24 @@
 import HROOT.Core.TAttAxis.Interface
 
 class (ITNamed a, ITAttAxis a) => ITAxis a where
-        findBinTAxis :: a -> CDouble -> IO CInt
+        findBinTAxis :: () => a -> CDouble -> IO CInt
         
-        findFixBinTAxis :: a -> CDouble -> IO CInt
+        findFixBinTAxis :: () => a -> CDouble -> IO CInt
         
-        getBinCenterTAxis :: a -> CInt -> IO CDouble
+        getBinCenterTAxis :: () => a -> CInt -> IO CDouble
         
-        getBinCenterLog :: a -> CInt -> IO CDouble
+        getBinCenterLog :: () => a -> CInt -> IO CDouble
         
-        getBinUpEdge :: a -> CInt -> IO CDouble
+        getBinUpEdge :: () => a -> CInt -> IO CDouble
         
-        setTimeDisplay :: a -> CInt -> IO ()
+        setLimits :: () => a -> CDouble -> CDouble -> IO ()
         
-        setTimeFormat :: Castable c0 CString => a -> c0 -> IO ()
+        setTimeDisplay :: () => a -> CInt -> IO ()
         
-        setTimeOffset :: Castable c0 CString => a -> CDouble -> c0 -> IO ()
+        setTimeFormat :: (Castable c0 CString) => a -> c0 -> IO ()
+        
+        setTimeOffset ::
+                        (Castable c0 CString) => a -> CDouble -> c0 -> IO ()
 
 upcastTAxis :: forall a . (FPtr a, ITAxis a) => a -> TAxis
 upcastTAxis h
diff --git a/src/HROOT/Hist/TAxis/Interface.hs-boot b/src/HROOT/Hist/TAxis/Interface.hs-boot
deleted file mode 100644
--- a/src/HROOT/Hist/TAxis/Interface.hs-boot
+++ /dev/null
@@ -1,3 +0,0 @@
-module HROOT.Hist.TAxis.Interface where
-
-class ITAxis a
diff --git a/src/HROOT/Hist/TAxis/RawType.hs b/src/HROOT/Hist/TAxis/RawType.hs
--- a/src/HROOT/Hist/TAxis/RawType.hs
+++ b/src/HROOT/Hist/TAxis/RawType.hs
@@ -8,9 +8,9 @@
 data RawTAxis
 
 newtype TAxis = TAxis (Ptr RawTAxis)
-              deriving (Eq, Ord, Show)
+                  deriving (Eq, Ord, Show)
 
-instance FPtr TAxis where
+instance () => FPtr (TAxis) where
         type Raw TAxis = RawTAxis
         get_fptr (TAxis ptr) = ptr
         cast_fptr_to_obj = TAxis
diff --git a/src/HROOT/Hist/TF1.hs b/src/HROOT/Hist/TF1.hs
--- a/src/HROOT/Hist/TF1.hs
+++ b/src/HROOT/Hist/TF1.hs
@@ -1,10 +1,10 @@
 module HROOT.Hist.TF1
        (TF1(..), ITF1(..), upcastTF1, downcastTF1, newTF1,
-        tF1GetChisquare, tF1GetHistogram, tF1GetParent, tF1GetXaxis,
-        tF1GetYaxis, tF1GetZaxis, tF1DerivativeError,
-        tF1InitStandardFunctions, tF1GetCurrent, tF1AbsValue,
-        tF1RejectPoint, tF1RejectedPoint, tF1SetCurrent,
-        tF1CalcGaussLegendreSamplingPoints)
+        tF1_GetChisquare, tF1_GetHistogram, tF1_GetParent, tF1_GetXaxis,
+        tF1_GetYaxis, tF1_GetZaxis, tF1_DerivativeError,
+        tF1_InitStandardFunctions, tF1_GetCurrent, tF1_AbsValue,
+        tF1_RejectPoint, tF1_RejectedPoint, tF1_SetCurrent,
+        tF1_CalcGaussLegendreSamplingPoints)
        where
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TF1.Interface
diff --git a/src/HROOT/Hist/TF1/Cast.hs b/src/HROOT/Hist/TF1/Cast.hs
--- a/src/HROOT/Hist/TF1/Cast.hs
+++ b/src/HROOT/Hist/TF1/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TF1.Interface
 
-instance (ITF1 a, FPtr a) => Castable a (Ptr RawTF1) where
+instance (ITF1 a, FPtr a) => Castable (a) (Ptr RawTF1) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TF1 (Ptr RawTF1) where
+instance () => Castable (TF1) (Ptr RawTF1) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TF1/FFI.hsc b/src/HROOT/Hist/TF1/FFI.hsc
--- a/src/HROOT/Hist/TF1/FFI.hsc
+++ b/src/HROOT/Hist/TF1/FFI.hsc
@@ -1,298 +1,343 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TF1.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TF1.RawType
+import HROOT.Hist.TF1.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TAxis.RawType
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetLineColor"
-               c_tf1_getlinecolor :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetLineColor" c_tf1_getlinecolor ::
+               Ptr RawTF1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetLineStyle"
-               c_tf1_getlinestyle :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetLineStyle" c_tf1_getlinestyle ::
+               Ptr RawTF1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetLineWidth"
-               c_tf1_getlinewidth :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetLineWidth" c_tf1_getlinewidth ::
+               Ptr RawTF1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTF1.h TF1_ResetAttLine"
-               c_tf1_resetattline :: Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_ResetAttLine" c_tf1_resetattline ::
+               Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetLineAttributes"
-               c_tf1_setlineattributes :: Ptr RawTF1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetLineAttributes" c_tf1_setlineattributes ::
+               Ptr RawTF1 -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetLineColor"
-               c_tf1_setlinecolor :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetLineColor" c_tf1_setlinecolor ::
+               Ptr RawTF1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetLineStyle"
-               c_tf1_setlinestyle :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetLineStyle" c_tf1_setlinestyle ::
+               Ptr RawTF1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetLineWidth"
-               c_tf1_setlinewidth :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetLineWidth" c_tf1_setlinewidth ::
+               Ptr RawTF1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetFillColor"
-               c_tf1_setfillcolor :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetFillColor" c_tf1_setfillcolor ::
+               Ptr RawTF1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetFillStyle"
-               c_tf1_setfillstyle :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetFillStyle" c_tf1_setfillstyle ::
+               Ptr RawTF1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetMarkerColor"
-               c_tf1_getmarkercolor :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetMarkerColor" c_tf1_getmarkercolor ::
+               Ptr RawTF1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetMarkerStyle"
-               c_tf1_getmarkerstyle :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetMarkerStyle" c_tf1_getmarkerstyle ::
+               Ptr RawTF1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetMarkerSize"
-               c_tf1_getmarkersize :: Ptr RawTF1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetMarkerSize" c_tf1_getmarkersize ::
+               Ptr RawTF1 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTF1.h TF1_ResetAttMarker"
-               c_tf1_resetattmarker :: Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_ResetAttMarker" c_tf1_resetattmarker ::
+               Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetMarkerAttributes"
-               c_tf1_setmarkerattributes :: Ptr RawTF1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetMarkerAttributes" c_tf1_setmarkerattributes
+               :: Ptr RawTF1 -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetMarkerColor"
-               c_tf1_setmarkercolor :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetMarkerColor" c_tf1_setmarkercolor ::
+               Ptr RawTF1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetMarkerStyle"
-               c_tf1_setmarkerstyle :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetMarkerStyle" c_tf1_setmarkerstyle ::
+               Ptr RawTF1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetMarkerSize"
-               c_tf1_setmarkersize :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetMarkerSize" c_tf1_setmarkersize ::
+               Ptr RawTF1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_delete" c_tf1_delete
-               :: Ptr RawTF1 -> IO ()
+foreign import ccall interruptible "HROOTHistTF1.h TF1_delete"
+               c_tf1_delete :: Ptr RawTF1 -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_newTF1" c_tf1_newtf1
-               :: CString -> CString -> CDouble -> CDouble -> IO (Ptr RawTF1)
+foreign import ccall interruptible "HROOTHistTF1.h TF1_newTF1"
+               c_tf1_newtf1 ::
+               CString -> CString -> CDouble -> CDouble -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_Derivative"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_Derivative"
                c_tf1_derivative ::
-               Ptr RawTF1 -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+               Ptr RawTF1 -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_Derivative2"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_Derivative2"
                c_tf1_derivative2 ::
-               Ptr RawTF1 -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+               Ptr RawTF1 -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_Derivative3"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_Derivative3"
                c_tf1_derivative3 ::
-               Ptr RawTF1 -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+               Ptr RawTF1 -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1DerivativeError"
-               c_tf1_tf1derivativeerror :: IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_DerivativeError" c_tf1_tf1_derivativeerror
+               :: IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_drawCopyTF1"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_drawCopyTF1"
                c_tf1_drawcopytf1 :: Ptr RawTF1 -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_DrawDerivative"
-               c_tf1_drawderivative ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_DrawDerivative" c_tf1_drawderivative ::
                Ptr RawTF1 -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_DrawIntegral"
-               c_tf1_drawintegral :: Ptr RawTF1 -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_DrawIntegral" c_tf1_drawintegral ::
+               Ptr RawTF1 -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_FixParameter"
-               c_tf1_fixparameter :: Ptr RawTF1 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_FixParameter" c_tf1_fixparameter ::
+               Ptr RawTF1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetChisquare"
-               c_tf1_tf1getchisquare :: Ptr RawTF1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetChisquare" c_tf1_tf1_getchisquare ::
+               Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetHistogram"
-               c_tf1_tf1gethistogram :: Ptr RawTF1 -> IO (Ptr RawTH1)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetHistogram" c_tf1_tf1_gethistogram ::
+               Ptr RawTF1 -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_getMaximumTF1"
-               c_tf1_getmaximumtf1 ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_getMaximumTF1" c_tf1_getmaximumtf1 ::
                Ptr RawTF1 ->
-                 CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                 CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_getMinimumTF1"
-               c_tf1_getminimumtf1 ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_getMinimumTF1" c_tf1_getminimumtf1 ::
                Ptr RawTF1 ->
-                 CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                 CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetMaximumX"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetMaximumX"
                c_tf1_getmaximumx ::
                Ptr RawTF1 ->
-                 CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                 CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetMinimumX"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetMinimumX"
                c_tf1_getminimumx ::
                Ptr RawTF1 ->
-                 CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                 CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetNDF" c_tf1_getndf
-               :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetNDF"
+               c_tf1_getndf :: Ptr RawTF1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetNpx" c_tf1_getnpx
-               :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetNpx"
+               c_tf1_getnpx :: Ptr RawTF1 -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTF1.h TF1_GetNumberFreeParameters"
                c_tf1_getnumberfreeparameters :: Ptr RawTF1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetNumberFitPoints"
-               c_tf1_getnumberfitpoints :: Ptr RawTF1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_GetNumberFitPoints" c_tf1_getnumberfitpoints ::
+               Ptr RawTF1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetParent"
-               c_tf1_tf1getparent :: Ptr RawTF1 -> IO (Ptr RawTObject)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetParent" c_tf1_tf1_getparent ::
+               Ptr RawTF1 -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetParError"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetParError"
                c_tf1_getparerror :: Ptr RawTF1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetProb"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetProb"
                c_tf1_getprob :: Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_getQuantilesTF1"
-               c_tf1_getquantilestf1 ::
-               Ptr RawTF1 -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_getQuantilesTF1" c_tf1_getquantilestf1 ::
+               Ptr RawTF1 -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTF1.h TF1_getRandomTF1"
-               c_tf1_getrandomtf1 ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_getRandomTF1" c_tf1_getrandomtf1 ::
                Ptr RawTF1 -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetSave"
-               c_tf1_getsave :: Ptr RawTF1 -> (Ptr CDouble) -> IO CDouble
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetSave"
+               c_tf1_getsave :: Ptr RawTF1 -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetX" c_tf1_getx ::
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetX"
+               c_tf1_getx ::
                Ptr RawTF1 ->
                  CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetXmin"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetXmin"
                c_tf1_getxmin :: Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GetXmax"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GetXmax"
                c_tf1_getxmax :: Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetXaxis"
-               c_tf1_tf1getxaxis :: Ptr RawTF1 -> IO (Ptr RawTAxis)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetXaxis" c_tf1_tf1_getxaxis ::
+               Ptr RawTF1 -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetYaxis"
-               c_tf1_tf1getyaxis :: Ptr RawTF1 -> IO (Ptr RawTAxis)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetYaxis" c_tf1_tf1_getyaxis ::
+               Ptr RawTF1 -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetZaxis"
-               c_tf1_tf1getzaxis :: Ptr RawTF1 -> IO (Ptr RawTAxis)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetZaxis" c_tf1_tf1_getzaxis ::
+               Ptr RawTF1 -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_GradientPar"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_GradientPar"
                c_tf1_gradientpar ::
-               Ptr RawTF1 -> CInt -> (Ptr CDouble) -> CDouble -> IO CDouble
+               Ptr RawTF1 -> CInt -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_InitArgs"
-               c_tf1_initargs ::
-               Ptr RawTF1 -> (Ptr CDouble) -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTF1.h TF1_InitArgs"
+               c_tf1_initargs :: Ptr RawTF1 -> Ptr CDouble -> Ptr CDouble -> IO ()
 
-foreign import ccall safe
-               "HROOTHistTF1.h TF1_tF1InitStandardFunctions"
-               c_tf1_tf1initstandardfunctions :: IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_InitStandardFunctions"
+               c_tf1_tf1_initstandardfunctions :: IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_IntegralTF1"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_IntegralTF1"
                c_tf1_integraltf1 ::
                Ptr RawTF1 -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_IntegralError"
-               c_tf1_integralerror ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_IntegralError" c_tf1_integralerror ::
                Ptr RawTF1 ->
                  CDouble ->
-                   CDouble -> (Ptr CDouble) -> (Ptr CDouble) -> CDouble -> IO CDouble
+                   CDouble -> Ptr CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_IntegralFast"
-               c_tf1_integralfast ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_IntegralFast" c_tf1_integralfast ::
                Ptr RawTF1 ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     (Ptr CDouble) ->
-                       CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                   Ptr CDouble ->
+                     Ptr CDouble ->
+                       CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_IsInside"
-               c_tf1_isinside :: Ptr RawTF1 -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible "HROOTHistTF1.h TF1_IsInside"
+               c_tf1_isinside :: Ptr RawTF1 -> Ptr CDouble -> IO CBool
 
-foreign import ccall safe "HROOTHistTF1.h TF1_ReleaseParameter"
-               c_tf1_releaseparameter :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_ReleaseParameter" c_tf1_releaseparameter ::
+               Ptr RawTF1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetChisquare"
-               c_tf1_setchisquare :: Ptr RawTF1 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetChisquare" c_tf1_setchisquare ::
+               Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_setMaximumTF1"
-               c_tf1_setmaximumtf1 :: Ptr RawTF1 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_setMaximumTF1" c_tf1_setmaximumtf1 ::
+               Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_setMinimumTF1"
-               c_tf1_setminimumtf1 :: Ptr RawTF1 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_setMinimumTF1" c_tf1_setminimumtf1 ::
+               Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetNDF" c_tf1_setndf
-               :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTF1.h TF1_SetNDF"
+               c_tf1_setndf :: Ptr RawTF1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetNumberFitPoints"
-               c_tf1_setnumberfitpoints :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetNumberFitPoints" c_tf1_setnumberfitpoints ::
+               Ptr RawTF1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetNpx" c_tf1_setnpx
-               :: Ptr RawTF1 -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTF1.h TF1_SetNpx"
+               c_tf1_setnpx :: Ptr RawTF1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetParError"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_SetParError"
                c_tf1_setparerror :: Ptr RawTF1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetParErrors"
-               c_tf1_setparerrors :: Ptr RawTF1 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetParErrors" c_tf1_setparerrors ::
+               Ptr RawTF1 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetParLimits"
-               c_tf1_setparlimits ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetParLimits" c_tf1_setparlimits ::
                Ptr RawTF1 -> CInt -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetParent"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_SetParent"
                c_tf1_setparent :: Ptr RawTF1 -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_setRange1"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_setRange1"
                c_tf1_setrange1 :: Ptr RawTF1 -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_setRange2"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_setRange2"
                c_tf1_setrange2 ::
                Ptr RawTF1 -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_setRange3"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_setRange3"
                c_tf1_setrange3 ::
                Ptr RawTF1 ->
                  CDouble ->
                    CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_SetSavedPoint"
-               c_tf1_setsavedpoint :: Ptr RawTF1 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_SetSavedPoint" c_tf1_setsavedpoint ::
+               Ptr RawTF1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1GetCurrent"
-               c_tf1_tf1getcurrent :: IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_GetCurrent" c_tf1_tf1_getcurrent ::
+               IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1AbsValue"
-               c_tf1_tf1absvalue :: CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_AbsValue" c_tf1_tf1_absvalue ::
+               CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1RejectPoint"
-               c_tf1_tf1rejectpoint :: CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_RejectPoint" c_tf1_tf1_rejectpoint ::
+               CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1RejectedPoint"
-               c_tf1_tf1rejectedpoint :: IO CInt
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_RejectedPoint" c_tf1_tf1_rejectedpoint ::
+               IO CBool
 
-foreign import ccall safe "HROOTHistTF1.h TF1_tF1SetCurrent"
-               c_tf1_tf1setcurrent :: Ptr RawTF1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_SetCurrent" c_tf1_tf1_setcurrent ::
+               Ptr RawTF1 -> IO ()
 
-foreign import ccall safe "HROOTHistTF1.h TF1_Moment" c_tf1_moment
-               ::
+foreign import ccall interruptible "HROOTHistTF1.h TF1_Moment"
+               c_tf1_moment ::
                Ptr RawTF1 ->
                  CDouble ->
-                   CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                   CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_CentralMoment"
-               c_tf1_centralmoment ::
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_CentralMoment" c_tf1_centralmoment ::
                Ptr RawTF1 ->
                  CDouble ->
-                   CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                   CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_Mean" c_tf1_mean ::
+foreign import ccall interruptible "HROOTHistTF1.h TF1_Mean"
+               c_tf1_mean ::
                Ptr RawTF1 ->
-                 CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                 CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTF1.h TF1_Variance"
+foreign import ccall interruptible "HROOTHistTF1.h TF1_Variance"
                c_tf1_variance ::
                Ptr RawTF1 ->
-                 CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                 CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe
-               "HROOTHistTF1.h TF1_tF1CalcGaussLegendreSamplingPoints"
-               c_tf1_tf1calcgausslegendresamplingpoints ::
-               CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTF1.h TF1_tF1_CalcGaussLegendreSamplingPoints"
+               c_tf1_tf1_calcgausslegendresamplingpoints ::
+               CInt -> Ptr CDouble -> Ptr CDouble -> CDouble -> IO ()
diff --git a/src/HROOT/Hist/TF1/Implementation.hs b/src/HROOT/Hist/TF1/Implementation.hs
--- a/src/HROOT/Hist/TF1/Implementation.hs
+++ b/src/HROOT/Hist/TF1/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TF1.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TF1.FFI
 import HROOT.Hist.TF1.Interface
 import HROOT.Hist.TF1.Cast
+import HROOT.Hist.TF1.RawType
+import HROOT.Hist.TF1.Cast
+import HROOT.Hist.TF1.Interface
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
@@ -30,11 +39,11 @@
 import HROOT.Core.TAttMarker.RawType
 import HROOT.Core.TAttMarker.Cast
 import HROOT.Core.TAttMarker.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITF1 TF1 where
+instance () => ITF1 (TF1) where
         derivative = xform3 c_tf1_derivative
         derivative2 = xform3 c_tf1_derivative2
         derivative3 = xform3 c_tf1_derivative3
@@ -84,7 +93,7 @@
         mean = xform4 c_tf1_mean
         variance = xform4 c_tf1_variance
 
-instance ITAttLine TF1 where
+instance () => ITAttLine (TF1) where
         getLineColor = xform0 c_tf1_getlinecolor
         getLineStyle = xform0 c_tf1_getlinestyle
         getLineWidth = xform0 c_tf1_getlinewidth
@@ -94,11 +103,11 @@
         setLineStyle = xform1 c_tf1_setlinestyle
         setLineWidth = xform1 c_tf1_setlinewidth
 
-instance ITAttFill TF1 where
+instance () => ITAttFill (TF1) where
         setFillColor = xform1 c_tf1_setfillcolor
         setFillStyle = xform1 c_tf1_setfillstyle
 
-instance ITAttMarker TF1 where
+instance () => ITAttMarker (TF1) where
         getMarkerColor = xform0 c_tf1_getmarkercolor
         getMarkerStyle = xform0 c_tf1_getmarkerstyle
         getMarkerSize = xform0 c_tf1_getmarkersize
@@ -108,7 +117,7 @@
         setMarkerStyle = xform1 c_tf1_setmarkerstyle
         setMarkerSize = xform1 c_tf1_setmarkersize
 
-instance IDeletable TF1 where
+instance () => IDeletable (TF1) where
         delete = xform0 c_tf1_delete
 
 newTF1 ::
@@ -116,46 +125,47 @@
          c0 -> c1 -> CDouble -> CDouble -> IO TF1
 newTF1 = xform3 c_tf1_newtf1
 
-tF1GetChisquare :: TF1 -> IO CDouble
-tF1GetChisquare = xform0 c_tf1_tf1getchisquare
+tF1_GetChisquare :: () => TF1 -> IO CDouble
+tF1_GetChisquare = xform0 c_tf1_tf1_getchisquare
 
-tF1GetHistogram :: TF1 -> IO TH1
-tF1GetHistogram = xform0 c_tf1_tf1gethistogram
+tF1_GetHistogram :: () => TF1 -> IO TH1
+tF1_GetHistogram = xform0 c_tf1_tf1_gethistogram
 
-tF1GetParent :: TF1 -> IO TObject
-tF1GetParent = xform0 c_tf1_tf1getparent
+tF1_GetParent :: () => TF1 -> IO TObject
+tF1_GetParent = xform0 c_tf1_tf1_getparent
 
-tF1GetXaxis :: TF1 -> IO TAxis
-tF1GetXaxis = xform0 c_tf1_tf1getxaxis
+tF1_GetXaxis :: () => TF1 -> IO TAxis
+tF1_GetXaxis = xform0 c_tf1_tf1_getxaxis
 
-tF1GetYaxis :: TF1 -> IO TAxis
-tF1GetYaxis = xform0 c_tf1_tf1getyaxis
+tF1_GetYaxis :: () => TF1 -> IO TAxis
+tF1_GetYaxis = xform0 c_tf1_tf1_getyaxis
 
-tF1GetZaxis :: TF1 -> IO TAxis
-tF1GetZaxis = xform0 c_tf1_tf1getzaxis
+tF1_GetZaxis :: () => TF1 -> IO TAxis
+tF1_GetZaxis = xform0 c_tf1_tf1_getzaxis
 
-tF1DerivativeError :: IO CDouble
-tF1DerivativeError = xformnull c_tf1_tf1derivativeerror
+tF1_DerivativeError :: () => IO CDouble
+tF1_DerivativeError = xformnull c_tf1_tf1_derivativeerror
 
-tF1InitStandardFunctions :: IO ()
-tF1InitStandardFunctions = xformnull c_tf1_tf1initstandardfunctions
+tF1_InitStandardFunctions :: () => IO ()
+tF1_InitStandardFunctions
+  = xformnull c_tf1_tf1_initstandardfunctions
 
-tF1GetCurrent :: IO TF1
-tF1GetCurrent = xformnull c_tf1_tf1getcurrent
+tF1_GetCurrent :: () => IO TF1
+tF1_GetCurrent = xformnull c_tf1_tf1_getcurrent
 
-tF1AbsValue :: CInt -> IO ()
-tF1AbsValue = xform0 c_tf1_tf1absvalue
+tF1_AbsValue :: () => CBool -> IO ()
+tF1_AbsValue = xform0 c_tf1_tf1_absvalue
 
-tF1RejectPoint :: CInt -> IO ()
-tF1RejectPoint = xform0 c_tf1_tf1rejectpoint
+tF1_RejectPoint :: () => CBool -> IO ()
+tF1_RejectPoint = xform0 c_tf1_tf1_rejectpoint
 
-tF1RejectedPoint :: IO CInt
-tF1RejectedPoint = xformnull c_tf1_tf1rejectedpoint
+tF1_RejectedPoint :: () => IO CBool
+tF1_RejectedPoint = xformnull c_tf1_tf1_rejectedpoint
 
-tF1SetCurrent :: (ITF1 c0, FPtr c0) => c0 -> IO ()
-tF1SetCurrent = xform0 c_tf1_tf1setcurrent
+tF1_SetCurrent :: (ITF1 c0, FPtr c0) => c0 -> IO ()
+tF1_SetCurrent = xform0 c_tf1_tf1_setcurrent
 
-tF1CalcGaussLegendreSamplingPoints ::
-                                     CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CDouble -> IO ()
-tF1CalcGaussLegendreSamplingPoints
-  = xform3 c_tf1_tf1calcgausslegendresamplingpoints
+tF1_CalcGaussLegendreSamplingPoints ::
+                                      () => CInt -> Ptr CDouble -> Ptr CDouble -> CDouble -> IO ()
+tF1_CalcGaussLegendreSamplingPoints
+  = xform3 c_tf1_tf1_calcgausslegendresamplingpoints
diff --git a/src/HROOT/Hist/TF1/Interface.hs b/src/HROOT/Hist/TF1/Interface.hs
--- a/src/HROOT/Hist/TF1/Interface.hs
+++ b/src/HROOT/Hist/TF1/Interface.hs
@@ -4,13 +4,12 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TF1.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TF1.RawType
 import HROOT.Core.TObject.RawType
-import HROOT.Hist.TH1.RawType
-import HROOT.Hist.TAxis.RawType
 import HROOT.Core.TAttLine.Interface
 import HROOT.Core.TAttFill.Interface
 import HROOT.Core.TAttMarker.Interface
@@ -18,128 +17,147 @@
 
 class (ITAttLine a, ITAttFill a, ITAttMarker a) => ITF1 a where
         derivative ::
-                     a -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                     () => a -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
         derivative2 ::
-                      a -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                      () => a -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
         derivative3 ::
-                      a -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                      () => a -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
-        drawCopyTF1 :: Castable c0 CString => a -> c0 -> IO a
+        drawCopyTF1 :: (Castable c0 CString) => a -> c0 -> IO a
         
-        drawDerivative :: Castable c0 CString => a -> c0 -> IO TObject
+        drawDerivative :: (Castable c0 CString) => a -> c0 -> IO TObject
         
-        drawIntegral :: Castable c0 CString => a -> c0 -> IO TObject
+        drawIntegral :: (Castable c0 CString) => a -> c0 -> IO TObject
         
-        fixParameter :: a -> CInt -> CDouble -> IO ()
+        fixParameter :: () => a -> CInt -> CDouble -> IO ()
         
         getMaximumTF1 ::
-                        a -> CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                        () =>
+                        a ->
+                          CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
         
         getMinimumTF1 ::
-                        a -> CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                        () =>
+                        a ->
+                          CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
         
         getMaximumX ::
-                      a -> CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                      () =>
+                      a ->
+                        CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
         
         getMinimumX ::
-                      a -> CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
+                      () =>
+                      a ->
+                        CDouble -> CDouble -> CDouble -> CDouble -> CBool -> IO CDouble
         
-        getNDF :: a -> IO CInt
+        getNDF :: () => a -> IO CInt
         
-        getNpx :: a -> IO CInt
+        getNpx :: () => a -> IO CInt
         
-        getNumberFreeParameters :: a -> IO CInt
+        getNumberFreeParameters :: () => a -> IO CInt
         
-        getNumberFitPoints :: a -> IO CInt
+        getNumberFitPoints :: () => a -> IO CInt
         
-        getParError :: a -> CInt -> IO CDouble
+        getParError :: () => a -> CInt -> IO CDouble
         
-        getProb :: a -> IO CDouble
+        getProb :: () => a -> IO CDouble
         
         getQuantilesTF1 ::
-                          a -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+                          () => a -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
         
-        getRandomTF1 :: a -> CDouble -> CDouble -> IO CDouble
+        getRandomTF1 :: () => a -> CDouble -> CDouble -> IO CDouble
         
-        getSave :: a -> (Ptr CDouble) -> IO CDouble
+        getSave :: () => a -> Ptr CDouble -> IO CDouble
         
         getX ::
+               () =>
                a -> CDouble -> CDouble -> CDouble -> CDouble -> CInt -> IO CDouble
         
-        getXmin :: a -> IO CDouble
+        getXmin :: () => a -> IO CDouble
         
-        getXmax :: a -> IO CDouble
+        getXmax :: () => a -> IO CDouble
         
-        gradientPar :: a -> CInt -> (Ptr CDouble) -> CDouble -> IO CDouble
+        gradientPar ::
+                      () => a -> CInt -> Ptr CDouble -> CDouble -> IO CDouble
         
-        initArgs :: a -> (Ptr CDouble) -> (Ptr CDouble) -> IO ()
+        initArgs :: () => a -> Ptr CDouble -> Ptr CDouble -> IO ()
         
-        integralTF1 :: a -> CDouble -> CDouble -> CDouble -> IO CDouble
+        integralTF1 ::
+                      () => a -> CDouble -> CDouble -> CDouble -> IO CDouble
         
         integralError ::
+                        () =>
                         a ->
                           CDouble ->
-                            CDouble -> (Ptr CDouble) -> (Ptr CDouble) -> CDouble -> IO CDouble
+                            CDouble -> Ptr CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
         integralFast ::
+                       () =>
                        a ->
                          CInt ->
-                           (Ptr CDouble) ->
-                             (Ptr CDouble) ->
-                               CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                           Ptr CDouble ->
+                             Ptr CDouble ->
+                               CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
-        isInside :: a -> (Ptr CDouble) -> IO CInt
+        isInside :: () => a -> Ptr CDouble -> IO CBool
         
-        releaseParameter :: a -> CInt -> IO ()
+        releaseParameter :: () => a -> CInt -> IO ()
         
-        setChisquare :: a -> CDouble -> IO ()
+        setChisquare :: () => a -> CDouble -> IO ()
         
-        setMaximumTF1 :: a -> CDouble -> IO ()
+        setMaximumTF1 :: () => a -> CDouble -> IO ()
         
-        setMinimumTF1 :: a -> CDouble -> IO ()
+        setMinimumTF1 :: () => a -> CDouble -> IO ()
         
-        setNDF :: a -> CInt -> IO ()
+        setNDF :: () => a -> CInt -> IO ()
         
-        setNumberFitPoints :: a -> CInt -> IO ()
+        setNumberFitPoints :: () => a -> CInt -> IO ()
         
-        setNpx :: a -> CInt -> IO ()
+        setNpx :: () => a -> CInt -> IO ()
         
-        setParError :: a -> CInt -> CDouble -> IO ()
+        setParError :: () => a -> CInt -> CDouble -> IO ()
         
-        setParErrors :: a -> (Ptr CDouble) -> IO ()
+        setParErrors :: () => a -> Ptr CDouble -> IO ()
         
-        setParLimits :: a -> CInt -> CDouble -> CDouble -> IO ()
+        setParLimits :: () => a -> CInt -> CDouble -> CDouble -> IO ()
         
         setParent :: (ITObject c0, FPtr c0) => a -> c0 -> IO ()
         
-        setRange1 :: a -> CDouble -> CDouble -> IO ()
+        setRange1 :: () => a -> CDouble -> CDouble -> IO ()
         
-        setRange2 :: a -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
+        setRange2 ::
+                    () => a -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
         
         setRange3 ::
+                    () =>
                     a ->
                       CDouble ->
                         CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
         
-        setSavedPoint :: a -> CInt -> CDouble -> IO ()
+        setSavedPoint :: () => a -> CInt -> CDouble -> IO ()
         
         moment ::
+                 () =>
                  a ->
                    CDouble ->
-                     CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                     CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
         centralMoment ::
+                        () =>
                         a ->
                           CDouble ->
-                            CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                            CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
         mean ::
-               a -> CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+               () =>
+               a -> CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
         
         variance ::
-                   a -> CDouble -> CDouble -> (Ptr CDouble) -> CDouble -> IO CDouble
+                   () =>
+                   a -> CDouble -> CDouble -> Ptr CDouble -> CDouble -> IO CDouble
 
 upcastTF1 :: forall a . (FPtr a, ITF1 a) => a -> TF1
 upcastTF1 h
diff --git a/src/HROOT/Hist/TF1/Interface.hs-boot b/src/HROOT/Hist/TF1/Interface.hs-boot
deleted file mode 100644
--- a/src/HROOT/Hist/TF1/Interface.hs-boot
+++ /dev/null
@@ -1,3 +0,0 @@
-module HROOT.Hist.TF1.Interface where
-
-class ITF1 a
diff --git a/src/HROOT/Hist/TF1/RawType.hs b/src/HROOT/Hist/TF1/RawType.hs
--- a/src/HROOT/Hist/TF1/RawType.hs
+++ b/src/HROOT/Hist/TF1/RawType.hs
@@ -8,9 +8,9 @@
 data RawTF1
 
 newtype TF1 = TF1 (Ptr RawTF1)
-            deriving (Eq, Ord, Show)
+                deriving (Eq, Ord, Show)
 
-instance FPtr TF1 where
+instance () => FPtr (TF1) where
         type Raw TF1 = RawTF1
         get_fptr (TF1 ptr) = ptr
         cast_fptr_to_obj = TF1
diff --git a/src/HROOT/Hist/TFitResult/Cast.hs b/src/HROOT/Hist/TFitResult/Cast.hs
--- a/src/HROOT/Hist/TFitResult/Cast.hs
+++ b/src/HROOT/Hist/TFitResult/Cast.hs
@@ -8,11 +8,12 @@
 import HROOT.Hist.TFitResult.RawType
 import HROOT.Hist.TFitResult.Interface
 
-instance (ITFitResult a, FPtr a) => Castable a (Ptr RawTFitResult)
+instance (ITFitResult a, FPtr a) =>
+         Castable (a) (Ptr RawTFitResult)
          where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TFitResult (Ptr RawTFitResult) where
+instance () => Castable (TFitResult) (Ptr RawTFitResult) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TFitResult/FFI.hsc b/src/HROOT/Hist/TFitResult/FFI.hsc
--- a/src/HROOT/Hist/TFitResult/FFI.hsc
+++ b/src/HROOT/Hist/TFitResult/FFI.hsc
@@ -1,53 +1,68 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TFitResult.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TFitResult.RawType
+import HROOT.Hist.TFitResult.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTFitResult.h TFitResult_SetName" c_tfitresult_setname ::
                Ptr RawTFitResult -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTFitResult.h TFitResult_SetNameTitle"
                c_tfitresult_setnametitle ::
                Ptr RawTFitResult -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTFitResult.h TFitResult_SetTitle" c_tfitresult_settitle
                :: Ptr RawTFitResult -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTFitResult.h TFitResult_Draw"
-               c_tfitresult_draw :: Ptr RawTFitResult -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_Clear" c_tfitresult_clear ::
+               Ptr RawTFitResult -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_Draw" c_tfitresult_draw ::
+               Ptr RawTFitResult -> CString -> IO ()
+
+foreign import ccall interruptible
                "HROOTHistTFitResult.h TFitResult_FindObject"
                c_tfitresult_findobject ::
                Ptr RawTFitResult -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTFitResult.h TFitResult_GetName" c_tfitresult_getname ::
                Ptr RawTFitResult -> IO CString
 
-foreign import ccall safe "HROOTHistTFitResult.h TFitResult_IsA"
-               c_tfitresult_isa :: Ptr RawTFitResult -> IO (Ptr RawTClass)
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_IsA" c_tfitresult_isa ::
+               Ptr RawTFitResult -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTFitResult.h TFitResult_Paint"
-               c_tfitresult_paint :: Ptr RawTFitResult -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_Paint" c_tfitresult_paint ::
+               Ptr RawTFitResult -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTFitResult.h TFitResult_printObj" c_tfitresult_printobj
                :: Ptr RawTFitResult -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTFitResult.h TFitResult_SaveAs"
-               c_tfitresult_saveas ::
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_SaveAs" c_tfitresult_saveas ::
                Ptr RawTFitResult -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTFitResult.h TFitResult_Write"
-               c_tfitresult_write ::
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_Write" c_tfitresult_write ::
                Ptr RawTFitResult -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTFitResult.h TFitResult_delete"
-               c_tfitresult_delete :: Ptr RawTFitResult -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_Write_" c_tfitresult_write_ ::
+               Ptr RawTFitResult -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTFitResult.h TFitResult_delete" c_tfitresult_delete ::
+               Ptr RawTFitResult -> IO ()
diff --git a/src/HROOT/Hist/TFitResult/Implementation.hs b/src/HROOT/Hist/TFitResult/Implementation.hs
--- a/src/HROOT/Hist/TFitResult/Implementation.hs
+++ b/src/HROOT/Hist/TFitResult/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TFitResult.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TFitResult.RawType
 import HROOT.Hist.TFitResult.FFI
 import HROOT.Hist.TFitResult.Interface
 import HROOT.Hist.TFitResult.Cast
+import HROOT.Hist.TFitResult.RawType
+import HROOT.Hist.TFitResult.Cast
+import HROOT.Hist.TFitResult.Interface
 import HROOT.Core.TClass.RawType
 import HROOT.Core.TClass.Cast
 import HROOT.Core.TClass.Interface
@@ -21,18 +30,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITFitResult TFitResult
+instance () => ITFitResult (TFitResult) where
 
-instance ITNamed TFitResult where
+instance () => ITNamed (TFitResult) where
         setName = xform1 c_tfitresult_setname
         setNameTitle = xform2 c_tfitresult_setnametitle
         setTitle = xform1 c_tfitresult_settitle
 
-instance ITObject TFitResult where
+instance () => ITObject (TFitResult) where
+        clear = xform1 c_tfitresult_clear
         draw = xform1 c_tfitresult_draw
         findObject = xform1 c_tfitresult_findobject
         getName = xform0 c_tfitresult_getname
@@ -41,6 +51,7 @@
         printObj = xform1 c_tfitresult_printobj
         saveAs = xform2 c_tfitresult_saveas
         write = xform3 c_tfitresult_write
+        write_ = xform0 c_tfitresult_write_
 
-instance IDeletable TFitResult where
+instance () => IDeletable (TFitResult) where
         delete = xform0 c_tfitresult_delete
diff --git a/src/HROOT/Hist/TFitResult/Interface.hs b/src/HROOT/Hist/TFitResult/Interface.hs
--- a/src/HROOT/Hist/TFitResult/Interface.hs
+++ b/src/HROOT/Hist/TFitResult/Interface.hs
@@ -4,13 +4,14 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TFitResult.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TFitResult.RawType
 import HROOT.Core.TNamed.Interface
 
-class ITNamed a => ITFitResult a
+class (ITNamed a) => ITFitResult a where
 
 upcastTFitResult ::
                  forall a . (FPtr a, ITFitResult a) => a -> TFitResult
diff --git a/src/HROOT/Hist/TFitResult/RawType.hs b/src/HROOT/Hist/TFitResult/RawType.hs
--- a/src/HROOT/Hist/TFitResult/RawType.hs
+++ b/src/HROOT/Hist/TFitResult/RawType.hs
@@ -8,9 +8,9 @@
 data RawTFitResult
 
 newtype TFitResult = TFitResult (Ptr RawTFitResult)
-                   deriving (Eq, Ord, Show)
+                       deriving (Eq, Ord, Show)
 
-instance FPtr TFitResult where
+instance () => FPtr (TFitResult) where
         type Raw TFitResult = RawTFitResult
         get_fptr (TFitResult ptr) = ptr
         cast_fptr_to_obj = TFitResult
diff --git a/src/HROOT/Hist/TFitResultPtr.hs b/src/HROOT/Hist/TFitResultPtr.hs
--- a/src/HROOT/Hist/TFitResultPtr.hs
+++ b/src/HROOT/Hist/TFitResultPtr.hs
@@ -1,6 +1,6 @@
 module HROOT.Hist.TFitResultPtr
        (TFitResultPtr(..), ITFitResultPtr, upcastTFitResultPtr,
-        downcastTFitResultPtr, tFitResultPtrGet)
+        downcastTFitResultPtr, tFitResultPtr_Get)
        where
 import HROOT.Hist.TFitResultPtr.RawType
 import HROOT.Hist.TFitResultPtr.Interface
diff --git a/src/HROOT/Hist/TFitResultPtr/Cast.hs b/src/HROOT/Hist/TFitResultPtr/Cast.hs
--- a/src/HROOT/Hist/TFitResultPtr/Cast.hs
+++ b/src/HROOT/Hist/TFitResultPtr/Cast.hs
@@ -8,11 +8,13 @@
 import HROOT.Hist.TFitResultPtr.RawType
 import HROOT.Hist.TFitResultPtr.Interface
 
-instance (ITFitResultPtr a, FPtr a) => Castable a
-         (Ptr RawTFitResultPtr) where
+instance (ITFitResultPtr a, FPtr a) =>
+         Castable (a) (Ptr RawTFitResultPtr)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TFitResultPtr (Ptr RawTFitResultPtr) where
+instance () => Castable (TFitResultPtr) (Ptr RawTFitResultPtr)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TFitResultPtr/FFI.hsc b/src/HROOT/Hist/TFitResultPtr/FFI.hsc
--- a/src/HROOT/Hist/TFitResultPtr/FFI.hsc
+++ b/src/HROOT/Hist/TFitResultPtr/FFI.hsc
@@ -1,11 +1,14 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TFitResultPtr.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TFitResultPtr.RawType
+import HROOT.Hist.TFitResultPtr.RawType
 import HROOT.Hist.TFitResult.RawType
 
-foreign import ccall safe
-               "HROOTHistTFitResultPtr.h TFitResultPtr_tFitResultPtrGet"
-               c_tfitresultptr_tfitresultptrget ::
+foreign import ccall interruptible
+               "HROOTHistTFitResultPtr.h TFitResultPtr_tFitResultPtr_Get"
+               c_tfitresultptr_tfitresultptr_get ::
                Ptr RawTFitResultPtr -> IO (Ptr RawTFitResult)
diff --git a/src/HROOT/Hist/TFitResultPtr/Implementation.hs b/src/HROOT/Hist/TFitResultPtr/Implementation.hs
--- a/src/HROOT/Hist/TFitResultPtr/Implementation.hs
+++ b/src/HROOT/Hist/TFitResultPtr/Implementation.hs
@@ -1,22 +1,31 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TFitResultPtr.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TFitResultPtr.RawType
 import HROOT.Hist.TFitResultPtr.FFI
 import HROOT.Hist.TFitResultPtr.Interface
 import HROOT.Hist.TFitResultPtr.Cast
+import HROOT.Hist.TFitResultPtr.RawType
+import HROOT.Hist.TFitResultPtr.Cast
+import HROOT.Hist.TFitResultPtr.Interface
 import HROOT.Hist.TFitResult.RawType
 import HROOT.Hist.TFitResult.Cast
 import HROOT.Hist.TFitResult.Interface
 
-instance ITFitResultPtr TFitResultPtr
+instance () => ITFitResultPtr (TFitResultPtr) where
 
-tFitResultPtrGet :: TFitResultPtr -> IO TFitResult
-tFitResultPtrGet = xform0 c_tfitresultptr_tfitresultptrget
+tFitResultPtr_Get :: () => TFitResultPtr -> IO TFitResult
+tFitResultPtr_Get = xform0 c_tfitresultptr_tfitresultptr_get
diff --git a/src/HROOT/Hist/TFitResultPtr/Interface.hs b/src/HROOT/Hist/TFitResultPtr/Interface.hs
--- a/src/HROOT/Hist/TFitResultPtr/Interface.hs
+++ b/src/HROOT/Hist/TFitResultPtr/Interface.hs
@@ -4,13 +4,13 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TFitResultPtr.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TFitResultPtr.RawType
-import HROOT.Hist.TFitResult.RawType
 
-class ITFitResultPtr a
+class () => ITFitResultPtr a where
 
 upcastTFitResultPtr ::
                     forall a . (FPtr a, ITFitResultPtr a) => a -> TFitResultPtr
diff --git a/src/HROOT/Hist/TFitResultPtr/RawType.hs b/src/HROOT/Hist/TFitResultPtr/RawType.hs
--- a/src/HROOT/Hist/TFitResultPtr/RawType.hs
+++ b/src/HROOT/Hist/TFitResultPtr/RawType.hs
@@ -8,9 +8,9 @@
 data RawTFitResultPtr
 
 newtype TFitResultPtr = TFitResultPtr (Ptr RawTFitResultPtr)
-                      deriving (Eq, Ord, Show)
+                          deriving (Eq, Ord, Show)
 
-instance FPtr TFitResultPtr where
+instance () => FPtr (TFitResultPtr) where
         type Raw TFitResultPtr = RawTFitResultPtr
         get_fptr (TFitResultPtr ptr) = ptr
         cast_fptr_to_obj = TFitResultPtr
diff --git a/src/HROOT/Hist/TGraph.hs b/src/HROOT/Hist/TGraph.hs
--- a/src/HROOT/Hist/TGraph.hs
+++ b/src/HROOT/Hist/TGraph.hs
@@ -1,9 +1,9 @@
 module HROOT.Hist.TGraph
        (TGraph(..), ITGraph(..), upcastTGraph, downcastTGraph, newTGraph,
-        tGraphGetEditable, tGraphGetFunction, tGraphGetHistogram,
-        tGraphGetMaxSize, tGraphGetN, tGraphGetMaximum, tGraphGetMinimum,
-        tGraphGetXaxis, tGraphGetYaxis, tGraphPaintGraph,
-        tGraphPaintGrapHist)
+        tGraph_GetEditable, tGraph_GetFunction, tGraph_GetHistogram,
+        tGraph_GetMaxSize, tGraph_GetN, tGraph_GetMaximum,
+        tGraph_GetMinimum, tGraph_GetXaxis, tGraph_GetYaxis,
+        tGraph_PaintGraph, tGraph_PaintGrapHist)
        where
 import HROOT.Hist.TGraph.RawType
 import HROOT.Hist.TGraph.Interface
diff --git a/src/HROOT/Hist/TGraph/Cast.hs b/src/HROOT/Hist/TGraph/Cast.hs
--- a/src/HROOT/Hist/TGraph/Cast.hs
+++ b/src/HROOT/Hist/TGraph/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TGraph.RawType
 import HROOT.Hist.TGraph.Interface
 
-instance (ITGraph a, FPtr a) => Castable a (Ptr RawTGraph) where
+instance (ITGraph a, FPtr a) => Castable (a) (Ptr RawTGraph) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TGraph (Ptr RawTGraph) where
+instance () => Castable (TGraph) (Ptr RawTGraph) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TGraph/FFI.hsc b/src/HROOT/Hist/TGraph/FFI.hsc
--- a/src/HROOT/Hist/TGraph/FFI.hsc
+++ b/src/HROOT/Hist/TGraph/FFI.hsc
@@ -1,264 +1,318 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TGraph.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TGraph.RawType
+import HROOT.Hist.TGraph.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TAxis.RawType
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetName"
-               c_tgraph_setname :: Ptr RawTGraph -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetName" c_tgraph_setname ::
+               Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetNameTitle"
-               c_tgraph_setnametitle ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetNameTitle" c_tgraph_setnametitle ::
                Ptr RawTGraph -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetTitle"
-               c_tgraph_settitle :: Ptr RawTGraph -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetTitle" c_tgraph_settitle ::
+               Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetLineColor"
-               c_tgraph_getlinecolor :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetLineColor" c_tgraph_getlinecolor ::
+               Ptr RawTGraph -> IO CShort
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetLineStyle"
-               c_tgraph_getlinestyle :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetLineStyle" c_tgraph_getlinestyle ::
+               Ptr RawTGraph -> IO CShort
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetLineWidth"
-               c_tgraph_getlinewidth :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetLineWidth" c_tgraph_getlinewidth ::
+               Ptr RawTGraph -> IO CShort
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_ResetAttLine"
-               c_tgraph_resetattline :: Ptr RawTGraph -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_ResetAttLine" c_tgraph_resetattline ::
+               Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_SetLineAttributes"
                c_tgraph_setlineattributes :: Ptr RawTGraph -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetLineColor"
-               c_tgraph_setlinecolor :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetLineColor" c_tgraph_setlinecolor ::
+               Ptr RawTGraph -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetLineStyle"
-               c_tgraph_setlinestyle :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetLineStyle" c_tgraph_setlinestyle ::
+               Ptr RawTGraph -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetLineWidth"
-               c_tgraph_setlinewidth :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetLineWidth" c_tgraph_setlinewidth ::
+               Ptr RawTGraph -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetFillColor"
-               c_tgraph_setfillcolor :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetFillColor" c_tgraph_setfillcolor ::
+               Ptr RawTGraph -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetFillStyle"
-               c_tgraph_setfillstyle :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetFillStyle" c_tgraph_setfillstyle ::
+               Ptr RawTGraph -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetMarkerColor"
-               c_tgraph_getmarkercolor :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetMarkerColor" c_tgraph_getmarkercolor
+               :: Ptr RawTGraph -> IO CShort
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetMarkerStyle"
-               c_tgraph_getmarkerstyle :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetMarkerStyle" c_tgraph_getmarkerstyle
+               :: Ptr RawTGraph -> IO CShort
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetMarkerSize"
-               c_tgraph_getmarkersize :: Ptr RawTGraph -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetMarkerSize" c_tgraph_getmarkersize ::
+               Ptr RawTGraph -> IO CFloat
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_ResetAttMarker"
-               c_tgraph_resetattmarker :: Ptr RawTGraph -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_ResetAttMarker" c_tgraph_resetattmarker
+               :: Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_SetMarkerAttributes"
                c_tgraph_setmarkerattributes :: Ptr RawTGraph -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetMarkerColor"
-               c_tgraph_setmarkercolor :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetMarkerColor" c_tgraph_setmarkercolor
+               :: Ptr RawTGraph -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetMarkerStyle"
-               c_tgraph_setmarkerstyle :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetMarkerStyle" c_tgraph_setmarkerstyle
+               :: Ptr RawTGraph -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetMarkerSize"
-               c_tgraph_setmarkersize :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetMarkerSize" c_tgraph_setmarkersize ::
+               Ptr RawTGraph -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Draw"
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_Clear"
+               c_tgraph_clear :: Ptr RawTGraph -> CString -> IO ()
+
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_Draw"
                c_tgraph_draw :: Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_FindObject"
-               c_tgraph_findobject ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_FindObject" c_tgraph_findobject ::
                Ptr RawTGraph -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetName"
-               c_tgraph_getname :: Ptr RawTGraph -> IO CString
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetName" c_tgraph_getname ::
+               Ptr RawTGraph -> IO CString
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_IsA"
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_IsA"
                c_tgraph_isa :: Ptr RawTGraph -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Paint"
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_Paint"
                c_tgraph_paint :: Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_printObj"
-               c_tgraph_printobj :: Ptr RawTGraph -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_printObj" c_tgraph_printobj ::
+               Ptr RawTGraph -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SaveAs"
-               c_tgraph_saveas :: Ptr RawTGraph -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SaveAs" c_tgraph_saveas ::
+               Ptr RawTGraph -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Write"
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_Write"
                c_tgraph_write ::
                Ptr RawTGraph -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_delete"
-               c_tgraph_delete :: Ptr RawTGraph -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_Write_" c_tgraph_write_ ::
+               Ptr RawTGraph -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_newTGraph"
-               c_tgraph_newtgraph ::
-               CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO (Ptr RawTGraph)
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_delete" c_tgraph_delete ::
+               Ptr RawTGraph -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Apply"
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_newTGraph" c_tgraph_newtgraph ::
+               CInt -> Ptr CDouble -> Ptr CDouble -> IO (Ptr RawTGraph)
+
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_Apply"
                c_tgraph_apply :: Ptr RawTGraph -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Chisquare"
-               c_tgraph_chisquare :: Ptr RawTGraph -> Ptr RawTF1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_Chisquare" c_tgraph_chisquare ::
+               Ptr RawTGraph -> Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_DrawGraph"
-               c_tgraph_drawgraph ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_DrawGraph" c_tgraph_drawgraph ::
                Ptr RawTGraph ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CString -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_drawPanelTGraph" c_tgraph_drawpaneltgraph
                :: Ptr RawTGraph -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Expand"
-               c_tgraph_expand :: Ptr RawTGraph -> CInt -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_Expand" c_tgraph_expand ::
+               Ptr RawTGraph -> CInt -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_FitPanelTGraph"
-               c_tgraph_fitpaneltgraph :: Ptr RawTGraph -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_FitPanelTGraph" c_tgraph_fitpaneltgraph
+               :: Ptr RawTGraph -> IO ()
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphGetEditable"
-               c_tgraph_tgraphgeteditable :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetEditable"
+               c_tgraph_tgraph_geteditable :: Ptr RawTGraph -> IO CBool
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphGetFunction"
-               c_tgraph_tgraphgetfunction ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetFunction"
+               c_tgraph_tgraph_getfunction ::
                Ptr RawTGraph -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphGetHistogram"
-               c_tgraph_tgraphgethistogram :: Ptr RawTGraph -> IO (Ptr RawTH1F)
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetHistogram"
+               c_tgraph_tgraph_gethistogram :: Ptr RawTGraph -> IO (Ptr RawTH1F)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_getCorrelationFactorTGraph"
                c_tgraph_getcorrelationfactortgraph :: Ptr RawTGraph -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_getCovarianceTGraph"
                c_tgraph_getcovariancetgraph :: Ptr RawTGraph -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_getMeanTGraph"
-               c_tgraph_getmeantgraph :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_getMeanTGraph" c_tgraph_getmeantgraph ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_getRMSTGraph"
-               c_tgraph_getrmstgraph :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_getRMSTGraph" c_tgraph_getrmstgraph ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphGetMaxSize"
-               c_tgraph_tgraphgetmaxsize :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetMaxSize"
+               c_tgraph_tgraph_getmaxsize :: Ptr RawTGraph -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_tGraphGetN"
-               c_tgraph_tgraphgetn :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetN" c_tgraph_tgraph_getn ::
+               Ptr RawTGraph -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetErrorX"
-               c_tgraph_geterrorx :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetErrorX" c_tgraph_geterrorx ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetErrorY"
-               c_tgraph_geterrory :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetErrorY" c_tgraph_geterrory ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetErrorXhigh"
-               c_tgraph_geterrorxhigh :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetErrorXhigh" c_tgraph_geterrorxhigh ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetErrorXlow"
-               c_tgraph_geterrorxlow :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetErrorXlow" c_tgraph_geterrorxlow ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetErrorYhigh"
-               c_tgraph_geterroryhigh :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetErrorYhigh" c_tgraph_geterroryhigh ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_GetErrorYlow"
-               c_tgraph_geterrorylow :: Ptr RawTGraph -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_GetErrorYlow" c_tgraph_geterrorylow ::
+               Ptr RawTGraph -> CInt -> IO CDouble
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphGetMaximum"
-               c_tgraph_tgraphgetmaximum :: Ptr RawTGraph -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetMaximum"
+               c_tgraph_tgraph_getmaximum :: Ptr RawTGraph -> IO CDouble
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphGetMinimum"
-               c_tgraph_tgraphgetminimum :: Ptr RawTGraph -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetMinimum"
+               c_tgraph_tgraph_getminimum :: Ptr RawTGraph -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_tGraphGetXaxis"
-               c_tgraph_tgraphgetxaxis :: Ptr RawTGraph -> IO (Ptr RawTAxis)
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetXaxis" c_tgraph_tgraph_getxaxis
+               :: Ptr RawTGraph -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_tGraphGetYaxis"
-               c_tgraph_tgraphgetyaxis :: Ptr RawTGraph -> IO (Ptr RawTAxis)
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_GetYaxis" c_tgraph_tgraph_getyaxis
+               :: Ptr RawTGraph -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_InitExpo"
-               c_tgraph_initexpo :: Ptr RawTGraph -> CDouble -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_InitExpo" c_tgraph_initexpo ::
+               Ptr RawTGraph -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_InitGaus"
-               c_tgraph_initgaus :: Ptr RawTGraph -> CDouble -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_InitGaus" c_tgraph_initgaus ::
+               Ptr RawTGraph -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_InitPolynom"
-               c_tgraph_initpolynom ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_InitPolynom" c_tgraph_initpolynom ::
                Ptr RawTGraph -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_InsertPoint"
-               c_tgraph_insertpoint :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_InsertPoint" c_tgraph_insertpoint ::
+               Ptr RawTGraph -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_integralTGraph"
-               c_tgraph_integraltgraph ::
-               Ptr RawTGraph -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_integralTGraph" c_tgraph_integraltgraph
+               :: Ptr RawTGraph -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_IsEditable"
-               c_tgraph_iseditable :: Ptr RawTGraph -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_IsEditable" c_tgraph_iseditable ::
+               Ptr RawTGraph -> IO CBool
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_isInsideTGraph"
-               c_tgraph_isinsidetgraph ::
-               Ptr RawTGraph -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_isInsideTGraph" c_tgraph_isinsidetgraph
+               :: Ptr RawTGraph -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_LeastSquareFit"
-               c_tgraph_leastsquarefit ::
-               Ptr RawTGraph ->
-                 CInt -> (Ptr CDouble) -> CDouble -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_LeastSquareFit" c_tgraph_leastsquarefit
+               ::
+               Ptr RawTGraph -> CInt -> Ptr CDouble -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphPaintGraph"
-               c_tgraph_tgraphpaintgraph ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_PaintGraph"
+               c_tgraph_tgraph_paintgraph ::
                Ptr RawTGraph ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CString -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CString -> IO ()
 
-foreign import ccall safe
-               "HROOTHistTGraph.h TGraph_tGraphPaintGrapHist"
-               c_tgraph_tgraphpaintgraphist ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_tGraph_PaintGrapHist"
+               c_tgraph_tgraph_paintgraphist ::
                Ptr RawTGraph ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CString -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_PaintStats"
-               c_tgraph_paintstats :: Ptr RawTGraph -> Ptr RawTF1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_PaintStats" c_tgraph_paintstats ::
+               Ptr RawTGraph -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_RemovePoint"
-               c_tgraph_removepoint :: Ptr RawTGraph -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_RemovePoint" c_tgraph_removepoint ::
+               Ptr RawTGraph -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetEditable"
-               c_tgraph_seteditable :: Ptr RawTGraph -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetEditable" c_tgraph_seteditable ::
+               Ptr RawTGraph -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetHistogram"
-               c_tgraph_sethistogram :: Ptr RawTGraph -> Ptr RawTH1F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetHistogram" c_tgraph_sethistogram ::
+               Ptr RawTGraph -> Ptr RawTH1F -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_setMaximumTGraph"
                c_tgraph_setmaximumtgraph :: Ptr RawTGraph -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraph.h TGraph_setMinimumTGraph"
                c_tgraph_setminimumtgraph :: Ptr RawTGraph -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_Set"
+foreign import ccall interruptible "HROOTHistTGraph.h TGraph_Set"
                c_tgraph_set :: Ptr RawTGraph -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTGraph.h TGraph_SetPoint"
-               c_tgraph_setpoint ::
+foreign import ccall interruptible
+               "HROOTHistTGraph.h TGraph_SetPoint" c_tgraph_setpoint ::
                Ptr RawTGraph -> CInt -> CDouble -> CDouble -> IO ()
diff --git a/src/HROOT/Hist/TGraph/Implementation.hs b/src/HROOT/Hist/TGraph/Implementation.hs
--- a/src/HROOT/Hist/TGraph/Implementation.hs
+++ b/src/HROOT/Hist/TGraph/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TGraph.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TGraph.RawType
 import HROOT.Hist.TGraph.FFI
 import HROOT.Hist.TGraph.Interface
 import HROOT.Hist.TGraph.Cast
+import HROOT.Hist.TGraph.RawType
+import HROOT.Hist.TGraph.Cast
+import HROOT.Hist.TGraph.Interface
 import HROOT.Core.TClass.RawType
 import HROOT.Core.TClass.Cast
 import HROOT.Core.TClass.Interface
@@ -39,11 +48,11 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITGraph TGraph where
+instance () => ITGraph (TGraph) where
         apply = xform1 c_tgraph_apply
         chisquare = xform1 c_tgraph_chisquare
         drawGraph = xform4 c_tgraph_drawgraph
@@ -78,12 +87,12 @@
         set = xform1 c_tgraph_set
         setPoint = xform3 c_tgraph_setpoint
 
-instance ITNamed TGraph where
+instance () => ITNamed (TGraph) where
         setName = xform1 c_tgraph_setname
         setNameTitle = xform2 c_tgraph_setnametitle
         setTitle = xform1 c_tgraph_settitle
 
-instance ITAttLine TGraph where
+instance () => ITAttLine (TGraph) where
         getLineColor = xform0 c_tgraph_getlinecolor
         getLineStyle = xform0 c_tgraph_getlinestyle
         getLineWidth = xform0 c_tgraph_getlinewidth
@@ -93,11 +102,11 @@
         setLineStyle = xform1 c_tgraph_setlinestyle
         setLineWidth = xform1 c_tgraph_setlinewidth
 
-instance ITAttFill TGraph where
+instance () => ITAttFill (TGraph) where
         setFillColor = xform1 c_tgraph_setfillcolor
         setFillStyle = xform1 c_tgraph_setfillstyle
 
-instance ITAttMarker TGraph where
+instance () => ITAttMarker (TGraph) where
         getMarkerColor = xform0 c_tgraph_getmarkercolor
         getMarkerStyle = xform0 c_tgraph_getmarkerstyle
         getMarkerSize = xform0 c_tgraph_getmarkersize
@@ -107,7 +116,8 @@
         setMarkerStyle = xform1 c_tgraph_setmarkerstyle
         setMarkerSize = xform1 c_tgraph_setmarkersize
 
-instance ITObject TGraph where
+instance () => ITObject (TGraph) where
+        clear = xform1 c_tgraph_clear
         draw = xform1 c_tgraph_draw
         findObject = xform1 c_tgraph_findobject
         getName = xform0 c_tgraph_getname
@@ -116,46 +126,48 @@
         printObj = xform1 c_tgraph_printobj
         saveAs = xform2 c_tgraph_saveas
         write = xform3 c_tgraph_write
+        write_ = xform0 c_tgraph_write_
 
-instance IDeletable TGraph where
+instance () => IDeletable (TGraph) where
         delete = xform0 c_tgraph_delete
 
-newTGraph :: CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO TGraph
+newTGraph :: () => CInt -> Ptr CDouble -> Ptr CDouble -> IO TGraph
 newTGraph = xform2 c_tgraph_newtgraph
 
-tGraphGetEditable :: TGraph -> IO CInt
-tGraphGetEditable = xform0 c_tgraph_tgraphgeteditable
+tGraph_GetEditable :: () => TGraph -> IO CBool
+tGraph_GetEditable = xform0 c_tgraph_tgraph_geteditable
 
-tGraphGetFunction :: Castable c0 CString => TGraph -> c0 -> IO TF1
-tGraphGetFunction = xform1 c_tgraph_tgraphgetfunction
+tGraph_GetFunction ::
+                     (Castable c0 CString) => TGraph -> c0 -> IO TF1
+tGraph_GetFunction = xform1 c_tgraph_tgraph_getfunction
 
-tGraphGetHistogram :: TGraph -> IO TH1F
-tGraphGetHistogram = xform0 c_tgraph_tgraphgethistogram
+tGraph_GetHistogram :: () => TGraph -> IO TH1F
+tGraph_GetHistogram = xform0 c_tgraph_tgraph_gethistogram
 
-tGraphGetMaxSize :: TGraph -> IO CInt
-tGraphGetMaxSize = xform0 c_tgraph_tgraphgetmaxsize
+tGraph_GetMaxSize :: () => TGraph -> IO CInt
+tGraph_GetMaxSize = xform0 c_tgraph_tgraph_getmaxsize
 
-tGraphGetN :: TGraph -> IO CInt
-tGraphGetN = xform0 c_tgraph_tgraphgetn
+tGraph_GetN :: () => TGraph -> IO CInt
+tGraph_GetN = xform0 c_tgraph_tgraph_getn
 
-tGraphGetMaximum :: TGraph -> IO CDouble
-tGraphGetMaximum = xform0 c_tgraph_tgraphgetmaximum
+tGraph_GetMaximum :: () => TGraph -> IO CDouble
+tGraph_GetMaximum = xform0 c_tgraph_tgraph_getmaximum
 
-tGraphGetMinimum :: TGraph -> IO CDouble
-tGraphGetMinimum = xform0 c_tgraph_tgraphgetminimum
+tGraph_GetMinimum :: () => TGraph -> IO CDouble
+tGraph_GetMinimum = xform0 c_tgraph_tgraph_getminimum
 
-tGraphGetXaxis :: TGraph -> IO TAxis
-tGraphGetXaxis = xform0 c_tgraph_tgraphgetxaxis
+tGraph_GetXaxis :: () => TGraph -> IO TAxis
+tGraph_GetXaxis = xform0 c_tgraph_tgraph_getxaxis
 
-tGraphGetYaxis :: TGraph -> IO TAxis
-tGraphGetYaxis = xform0 c_tgraph_tgraphgetyaxis
+tGraph_GetYaxis :: () => TGraph -> IO TAxis
+tGraph_GetYaxis = xform0 c_tgraph_tgraph_getyaxis
 
-tGraphPaintGraph ::
-                   Castable c0 CString =>
-                   TGraph -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> c0 -> IO ()
-tGraphPaintGraph = xform4 c_tgraph_tgraphpaintgraph
+tGraph_PaintGraph ::
+                    (Castable c0 CString) =>
+                    TGraph -> CInt -> Ptr CDouble -> Ptr CDouble -> c0 -> IO ()
+tGraph_PaintGraph = xform4 c_tgraph_tgraph_paintgraph
 
-tGraphPaintGrapHist ::
-                      Castable c0 CString =>
-                      TGraph -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> c0 -> IO ()
-tGraphPaintGrapHist = xform4 c_tgraph_tgraphpaintgraphist
+tGraph_PaintGrapHist ::
+                       (Castable c0 CString) =>
+                       TGraph -> CInt -> Ptr CDouble -> Ptr CDouble -> c0 -> IO ()
+tGraph_PaintGrapHist = xform4 c_tgraph_tgraph_paintgraphist
diff --git a/src/HROOT/Hist/TGraph/Interface.hs b/src/HROOT/Hist/TGraph/Interface.hs
--- a/src/HROOT/Hist/TGraph/Interface.hs
+++ b/src/HROOT/Hist/TGraph/Interface.hs
@@ -4,19 +4,17 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TGraph.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TGraph.RawType
-import HROOT.Hist.TF1.RawType
-import HROOT.Hist.TH1F.RawType
-import HROOT.Hist.TAxis.RawType
 import HROOT.Core.TNamed.Interface
 import HROOT.Core.TAttLine.Interface
 import HROOT.Core.TAttFill.Interface
 import HROOT.Core.TAttMarker.Interface
-import {-# SOURCE #-} HROOT.Hist.TF1.Interface
-import {-# SOURCE #-} HROOT.Hist.TH1F.Interface
+import HROOT.Hist.TF1.Interface
+import HROOT.Hist.TH1F.Interface
 
 class (ITNamed a, ITAttLine a, ITAttFill a, ITAttMarker a) =>
       ITGraph a where
@@ -25,67 +23,67 @@
         chisquare :: (ITF1 c0, FPtr c0) => a -> c0 -> IO CDouble
         
         drawGraph ::
-                    Castable c0 CString =>
-                    a -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> c0 -> IO ()
+                    (Castable c0 CString) =>
+                    a -> CInt -> Ptr CDouble -> Ptr CDouble -> c0 -> IO ()
         
-        drawPanelTGraph :: a -> IO ()
+        drawPanelTGraph :: () => a -> IO ()
         
-        expand :: a -> CInt -> CInt -> IO ()
+        expand :: () => a -> CInt -> CInt -> IO ()
         
-        fitPanelTGraph :: a -> IO ()
+        fitPanelTGraph :: () => a -> IO ()
         
-        getCorrelationFactorTGraph :: a -> IO CDouble
+        getCorrelationFactorTGraph :: () => a -> IO CDouble
         
-        getCovarianceTGraph :: a -> IO CDouble
+        getCovarianceTGraph :: () => a -> IO CDouble
         
-        getMeanTGraph :: a -> CInt -> IO CDouble
+        getMeanTGraph :: () => a -> CInt -> IO CDouble
         
-        getRMSTGraph :: a -> CInt -> IO CDouble
+        getRMSTGraph :: () => a -> CInt -> IO CDouble
         
-        getErrorX :: a -> CInt -> IO CDouble
+        getErrorX :: () => a -> CInt -> IO CDouble
         
-        getErrorY :: a -> CInt -> IO CDouble
+        getErrorY :: () => a -> CInt -> IO CDouble
         
-        getErrorXhigh :: a -> CInt -> IO CDouble
+        getErrorXhigh :: () => a -> CInt -> IO CDouble
         
-        getErrorXlow :: a -> CInt -> IO CDouble
+        getErrorXlow :: () => a -> CInt -> IO CDouble
         
-        getErrorYhigh :: a -> CInt -> IO CDouble
+        getErrorYhigh :: () => a -> CInt -> IO CDouble
         
-        getErrorYlow :: a -> CInt -> IO CDouble
+        getErrorYlow :: () => a -> CInt -> IO CDouble
         
-        initExpo :: a -> CDouble -> CDouble -> IO ()
+        initExpo :: () => a -> CDouble -> CDouble -> IO ()
         
-        initGaus :: a -> CDouble -> CDouble -> IO ()
+        initGaus :: () => a -> CDouble -> CDouble -> IO ()
         
-        initPolynom :: a -> CDouble -> CDouble -> IO ()
+        initPolynom :: () => a -> CDouble -> CDouble -> IO ()
         
-        insertPoint :: a -> IO CInt
+        insertPoint :: () => a -> IO CInt
         
-        integralTGraph :: a -> CInt -> CInt -> IO CDouble
+        integralTGraph :: () => a -> CInt -> CInt -> IO CDouble
         
-        isEditable :: a -> IO CInt
+        isEditable :: () => a -> IO CBool
         
-        isInsideTGraph :: a -> CDouble -> CDouble -> IO CInt
+        isInsideTGraph :: () => a -> CDouble -> CDouble -> IO CInt
         
         leastSquareFit ::
-                         a -> CInt -> (Ptr CDouble) -> CDouble -> CDouble -> IO ()
+                         () => a -> CInt -> Ptr CDouble -> CDouble -> CDouble -> IO ()
         
         paintStats :: (ITF1 c0, FPtr c0) => a -> c0 -> IO ()
         
-        removePoint :: a -> CInt -> IO CInt
+        removePoint :: () => a -> CInt -> IO CInt
         
-        setEditable :: a -> CInt -> IO ()
+        setEditable :: () => a -> CBool -> IO ()
         
         setHistogram :: (ITH1F c0, FPtr c0) => a -> c0 -> IO ()
         
-        setMaximumTGraph :: a -> CDouble -> IO ()
+        setMaximumTGraph :: () => a -> CDouble -> IO ()
         
-        setMinimumTGraph :: a -> CDouble -> IO ()
+        setMinimumTGraph :: () => a -> CDouble -> IO ()
         
-        set :: a -> CInt -> IO ()
+        set :: () => a -> CInt -> IO ()
         
-        setPoint :: a -> CInt -> CDouble -> CDouble -> IO ()
+        setPoint :: () => a -> CInt -> CDouble -> CDouble -> IO ()
 
 upcastTGraph :: forall a . (FPtr a, ITGraph a) => a -> TGraph
 upcastTGraph h
diff --git a/src/HROOT/Hist/TGraph/RawType.hs b/src/HROOT/Hist/TGraph/RawType.hs
--- a/src/HROOT/Hist/TGraph/RawType.hs
+++ b/src/HROOT/Hist/TGraph/RawType.hs
@@ -8,9 +8,9 @@
 data RawTGraph
 
 newtype TGraph = TGraph (Ptr RawTGraph)
-               deriving (Eq, Ord, Show)
+                   deriving (Eq, Ord, Show)
 
-instance FPtr TGraph where
+instance () => FPtr (TGraph) where
         type Raw TGraph = RawTGraph
         get_fptr (TGraph ptr) = ptr
         cast_fptr_to_obj = TGraph
diff --git a/src/HROOT/Hist/TGraph2D.hs b/src/HROOT/Hist/TGraph2D.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TGraph2D.hs
@@ -0,0 +1,8 @@
+module HROOT.Hist.TGraph2D
+       (TGraph2D(..), ITGraph2D(..), upcastTGraph2D, downcastTGraph2D,
+        newTGraph2D_, newTGraph2D, tGraph2D_GetXaxis, tGraph2D_GetYaxis,
+        tGraph2D_GetZaxis, tGraph2D_SetMaximum, tGraph2D_SetMinimum)
+       where
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Hist.TGraph2D.Interface
+import HROOT.Hist.TGraph2D.Implementation
diff --git a/src/HROOT/Hist/TGraph2D/Cast.hs b/src/HROOT/Hist/TGraph2D/Cast.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TGraph2D/Cast.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE FlexibleInstances, FlexibleContexts, TypeFamilies,
+  MultiParamTypeClasses, OverlappingInstances, IncoherentInstances
+  #-}
+module HROOT.Hist.TGraph2D.Cast where
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
+import System.IO.Unsafe
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Hist.TGraph2D.Interface
+
+instance (ITGraph2D a, FPtr a) => Castable (a) (Ptr RawTGraph2D)
+         where
+        cast x f = f (castPtr (get_fptr x))
+        uncast x f = f (cast_fptr_to_obj (castPtr x))
+
+instance () => Castable (TGraph2D) (Ptr RawTGraph2D) where
+        cast x f = f (castPtr (get_fptr x))
+        uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TGraph2D/FFI.hsc b/src/HROOT/Hist/TGraph2D/FFI.hsc
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TGraph2D/FFI.hsc
@@ -0,0 +1,183 @@
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
+module HROOT.Hist.TGraph2D.FFI where
+import Data.Word
+import Data.Int
+import Foreign.C
+import Foreign.Ptr
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Core.TObject.RawType
+import HROOT.Core.TClass.RawType
+import HROOT.Hist.TAxis.RawType
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetName" c_tgraph2d_setname ::
+               Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetNameTitle" c_tgraph2d_setnametitle
+               :: Ptr RawTGraph2D -> CString -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetTitle" c_tgraph2d_settitle ::
+               Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetLineColor" c_tgraph2d_getlinecolor
+               :: Ptr RawTGraph2D -> IO CShort
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetLineStyle" c_tgraph2d_getlinestyle
+               :: Ptr RawTGraph2D -> IO CShort
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetLineWidth" c_tgraph2d_getlinewidth
+               :: Ptr RawTGraph2D -> IO CShort
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_ResetAttLine" c_tgraph2d_resetattline
+               :: Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetLineAttributes"
+               c_tgraph2d_setlineattributes :: Ptr RawTGraph2D -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetLineColor" c_tgraph2d_setlinecolor
+               :: Ptr RawTGraph2D -> CShort -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetLineStyle" c_tgraph2d_setlinestyle
+               :: Ptr RawTGraph2D -> CShort -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetLineWidth" c_tgraph2d_setlinewidth
+               :: Ptr RawTGraph2D -> CShort -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetFillColor" c_tgraph2d_setfillcolor
+               :: Ptr RawTGraph2D -> CInt -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetFillStyle" c_tgraph2d_setfillstyle
+               :: Ptr RawTGraph2D -> CInt -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetMarkerColor"
+               c_tgraph2d_getmarkercolor :: Ptr RawTGraph2D -> IO CShort
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetMarkerStyle"
+               c_tgraph2d_getmarkerstyle :: Ptr RawTGraph2D -> IO CShort
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetMarkerSize"
+               c_tgraph2d_getmarkersize :: Ptr RawTGraph2D -> IO CFloat
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_ResetAttMarker"
+               c_tgraph2d_resetattmarker :: Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetMarkerAttributes"
+               c_tgraph2d_setmarkerattributes :: Ptr RawTGraph2D -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetMarkerColor"
+               c_tgraph2d_setmarkercolor :: Ptr RawTGraph2D -> CShort -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetMarkerStyle"
+               c_tgraph2d_setmarkerstyle :: Ptr RawTGraph2D -> CShort -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetMarkerSize"
+               c_tgraph2d_setmarkersize :: Ptr RawTGraph2D -> CShort -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_Clear" c_tgraph2d_clear ::
+               Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_Draw" c_tgraph2d_draw ::
+               Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_FindObject" c_tgraph2d_findobject ::
+               Ptr RawTGraph2D -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_GetName" c_tgraph2d_getname ::
+               Ptr RawTGraph2D -> IO CString
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_IsA" c_tgraph2d_isa ::
+               Ptr RawTGraph2D -> IO (Ptr RawTClass)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_Paint" c_tgraph2d_paint ::
+               Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_printObj" c_tgraph2d_printobj ::
+               Ptr RawTGraph2D -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SaveAs" c_tgraph2d_saveas ::
+               Ptr RawTGraph2D -> CString -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_Write" c_tgraph2d_write ::
+               Ptr RawTGraph2D -> CString -> CInt -> CInt -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_Write_" c_tgraph2d_write_ ::
+               Ptr RawTGraph2D -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_delete" c_tgraph2d_delete ::
+               Ptr RawTGraph2D -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_newTGraph2D_" c_tgraph2d_newtgraph2d_
+               :: IO (Ptr RawTGraph2D)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_newTGraph2D" c_tgraph2d_newtgraph2d
+               ::
+               CInt ->
+                 Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO (Ptr RawTGraph2D)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_tGraph2D_GetXaxis"
+               c_tgraph2d_tgraph2d_getxaxis ::
+               Ptr RawTGraph2D -> IO (Ptr RawTAxis)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_tGraph2D_GetYaxis"
+               c_tgraph2d_tgraph2d_getyaxis ::
+               Ptr RawTGraph2D -> IO (Ptr RawTAxis)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_tGraph2D_GetZaxis"
+               c_tgraph2d_tgraph2d_getzaxis ::
+               Ptr RawTGraph2D -> IO (Ptr RawTAxis)
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetN" c_tgraph2d_setn ::
+               Ptr RawTGraph2D -> CInt -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_tGraph2D_SetMaximum"
+               c_tgraph2d_tgraph2d_setmaximum ::
+               Ptr RawTGraph2D -> CDouble -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_tGraph2D_SetMinimum"
+               c_tgraph2d_tgraph2d_setminimum ::
+               Ptr RawTGraph2D -> CDouble -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTGraph2D.h TGraph2D_SetPointXYZ" c_tgraph2d_setpointxyz
+               ::
+               Ptr RawTGraph2D -> CInt -> CDouble -> CDouble -> CDouble -> IO ()
diff --git a/src/HROOT/Hist/TGraph2D/Implementation.hs b/src/HROOT/Hist/TGraph2D/Implementation.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TGraph2D/Implementation.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
+  ForeignFunctionInterface, IncoherentInstances,
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
+module HROOT.Hist.TGraph2D.Implementation where
+import Data.Monoid
+import Data.Word
+import Data.Int
+import Foreign.C
+import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
+import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Hist.TGraph2D.FFI
+import HROOT.Hist.TGraph2D.Interface
+import HROOT.Hist.TGraph2D.Cast
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Hist.TGraph2D.Cast
+import HROOT.Hist.TGraph2D.Interface
+import HROOT.Core.TClass.RawType
+import HROOT.Core.TClass.Cast
+import HROOT.Core.TClass.Interface
+import HROOT.Hist.TAxis.RawType
+import HROOT.Hist.TAxis.Cast
+import HROOT.Hist.TAxis.Interface
+import HROOT.Core.TNamed.RawType
+import HROOT.Core.TNamed.Cast
+import HROOT.Core.TNamed.Interface
+import HROOT.Core.TAttLine.RawType
+import HROOT.Core.TAttLine.Cast
+import HROOT.Core.TAttLine.Interface
+import HROOT.Core.TAttFill.RawType
+import HROOT.Core.TAttFill.Cast
+import HROOT.Core.TAttFill.Interface
+import HROOT.Core.TAttMarker.RawType
+import HROOT.Core.TAttMarker.Cast
+import HROOT.Core.TAttMarker.Interface
+import HROOT.Core.TObject.RawType
+import HROOT.Core.TObject.Cast
+import HROOT.Core.TObject.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
+
+instance () => ITGraph2D (TGraph2D) where
+        setN = xform1 c_tgraph2d_setn
+        setPointXYZ = xform4 c_tgraph2d_setpointxyz
+
+instance () => ITNamed (TGraph2D) where
+        setName = xform1 c_tgraph2d_setname
+        setNameTitle = xform2 c_tgraph2d_setnametitle
+        setTitle = xform1 c_tgraph2d_settitle
+
+instance () => ITAttLine (TGraph2D) where
+        getLineColor = xform0 c_tgraph2d_getlinecolor
+        getLineStyle = xform0 c_tgraph2d_getlinestyle
+        getLineWidth = xform0 c_tgraph2d_getlinewidth
+        resetAttLine = xform1 c_tgraph2d_resetattline
+        setLineAttributes = xform0 c_tgraph2d_setlineattributes
+        setLineColor = xform1 c_tgraph2d_setlinecolor
+        setLineStyle = xform1 c_tgraph2d_setlinestyle
+        setLineWidth = xform1 c_tgraph2d_setlinewidth
+
+instance () => ITAttFill (TGraph2D) where
+        setFillColor = xform1 c_tgraph2d_setfillcolor
+        setFillStyle = xform1 c_tgraph2d_setfillstyle
+
+instance () => ITAttMarker (TGraph2D) where
+        getMarkerColor = xform0 c_tgraph2d_getmarkercolor
+        getMarkerStyle = xform0 c_tgraph2d_getmarkerstyle
+        getMarkerSize = xform0 c_tgraph2d_getmarkersize
+        resetAttMarker = xform1 c_tgraph2d_resetattmarker
+        setMarkerAttributes = xform0 c_tgraph2d_setmarkerattributes
+        setMarkerColor = xform1 c_tgraph2d_setmarkercolor
+        setMarkerStyle = xform1 c_tgraph2d_setmarkerstyle
+        setMarkerSize = xform1 c_tgraph2d_setmarkersize
+
+instance () => ITObject (TGraph2D) where
+        clear = xform1 c_tgraph2d_clear
+        draw = xform1 c_tgraph2d_draw
+        findObject = xform1 c_tgraph2d_findobject
+        getName = xform0 c_tgraph2d_getname
+        isA = xform0 c_tgraph2d_isa
+        paint = xform1 c_tgraph2d_paint
+        printObj = xform1 c_tgraph2d_printobj
+        saveAs = xform2 c_tgraph2d_saveas
+        write = xform3 c_tgraph2d_write
+        write_ = xform0 c_tgraph2d_write_
+
+instance () => IDeletable (TGraph2D) where
+        delete = xform0 c_tgraph2d_delete
+
+newTGraph2D_ :: () => IO TGraph2D
+newTGraph2D_ = xformnull c_tgraph2d_newtgraph2d_
+
+newTGraph2D ::
+              () =>
+              CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO TGraph2D
+newTGraph2D = xform3 c_tgraph2d_newtgraph2d
+
+tGraph2D_GetXaxis :: () => TGraph2D -> IO TAxis
+tGraph2D_GetXaxis = xform0 c_tgraph2d_tgraph2d_getxaxis
+
+tGraph2D_GetYaxis :: () => TGraph2D -> IO TAxis
+tGraph2D_GetYaxis = xform0 c_tgraph2d_tgraph2d_getyaxis
+
+tGraph2D_GetZaxis :: () => TGraph2D -> IO TAxis
+tGraph2D_GetZaxis = xform0 c_tgraph2d_tgraph2d_getzaxis
+
+tGraph2D_SetMaximum :: () => TGraph2D -> CDouble -> IO ()
+tGraph2D_SetMaximum = xform1 c_tgraph2d_tgraph2d_setmaximum
+
+tGraph2D_SetMinimum :: () => TGraph2D -> CDouble -> IO ()
+tGraph2D_SetMinimum = xform1 c_tgraph2d_tgraph2d_setminimum
diff --git a/src/HROOT/Hist/TGraph2D/Interface.hs b/src/HROOT/Hist/TGraph2D/Interface.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TGraph2D/Interface.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE EmptyDataDecls, ExistentialQuantification,
+  FlexibleContexts, FlexibleInstances, ForeignFunctionInterface,
+  MultiParamTypeClasses, ScopedTypeVariables, TypeFamilies,
+  TypeSynonymInstances #-}
+module HROOT.Hist.TGraph2D.Interface where
+import Data.Word
+import Data.Int
+import Foreign.C
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
+import HROOT.Hist.TGraph2D.RawType
+import HROOT.Core.TNamed.Interface
+import HROOT.Core.TAttLine.Interface
+import HROOT.Core.TAttFill.Interface
+import HROOT.Core.TAttMarker.Interface
+
+class (ITNamed a, ITAttLine a, ITAttFill a, ITAttMarker a) =>
+      ITGraph2D a where
+        setN :: () => a -> CInt -> IO ()
+        
+        setPointXYZ ::
+                      () => a -> CInt -> CDouble -> CDouble -> CDouble -> IO ()
+
+upcastTGraph2D :: forall a . (FPtr a, ITGraph2D a) => a -> TGraph2D
+upcastTGraph2D h
+  = let fh = get_fptr h
+        fh2 :: Ptr RawTGraph2D = castPtr fh
+      in cast_fptr_to_obj fh2
+
+downcastTGraph2D ::
+                 forall a . (FPtr a, ITGraph2D a) => TGraph2D -> a
+downcastTGraph2D h
+  = let fh = get_fptr h
+        fh2 = castPtr fh
+      in cast_fptr_to_obj fh2
diff --git a/src/HROOT/Hist/TGraph2D/RawType.hs b/src/HROOT/Hist/TGraph2D/RawType.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TGraph2D/RawType.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE ForeignFunctionInterface, TypeFamilies,
+  MultiParamTypeClasses, FlexibleInstances, TypeSynonymInstances,
+  EmptyDataDecls, ExistentialQuantification, ScopedTypeVariables #-}
+module HROOT.Hist.TGraph2D.RawType where
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
+
+data RawTGraph2D
+
+newtype TGraph2D = TGraph2D (Ptr RawTGraph2D)
+                     deriving (Eq, Ord, Show)
+
+instance () => FPtr (TGraph2D) where
+        type Raw TGraph2D = RawTGraph2D
+        get_fptr (TGraph2D ptr) = ptr
+        cast_fptr_to_obj = TGraph2D
diff --git a/src/HROOT/Hist/TGraphAsymmErrors.hs b/src/HROOT/Hist/TGraphAsymmErrors.hs
--- a/src/HROOT/Hist/TGraphAsymmErrors.hs
+++ b/src/HROOT/Hist/TGraphAsymmErrors.hs
@@ -1,5 +1,5 @@
 module HROOT.Hist.TGraphAsymmErrors
-       (TGraphAsymmErrors(..), ITGraphAsymmErrors,
+       (TGraphAsymmErrors(..), ITGraphAsymmErrors(..),
         upcastTGraphAsymmErrors, downcastTGraphAsymmErrors,
         newTGraphAsymmErrors)
        where
diff --git a/src/HROOT/Hist/TGraphAsymmErrors/Cast.hs b/src/HROOT/Hist/TGraphAsymmErrors/Cast.hs
--- a/src/HROOT/Hist/TGraphAsymmErrors/Cast.hs
+++ b/src/HROOT/Hist/TGraphAsymmErrors/Cast.hs
@@ -8,12 +8,14 @@
 import HROOT.Hist.TGraphAsymmErrors.RawType
 import HROOT.Hist.TGraphAsymmErrors.Interface
 
-instance (ITGraphAsymmErrors a, FPtr a) => Castable a
-         (Ptr RawTGraphAsymmErrors) where
+instance (ITGraphAsymmErrors a, FPtr a) =>
+         Castable (a) (Ptr RawTGraphAsymmErrors)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TGraphAsymmErrors (Ptr RawTGraphAsymmErrors)
+instance () =>
+         Castable (TGraphAsymmErrors) (Ptr RawTGraphAsymmErrors)
          where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TGraphAsymmErrors/FFI.hsc b/src/HROOT/Hist/TGraphAsymmErrors/FFI.hsc
--- a/src/HROOT/Hist/TGraphAsymmErrors/FFI.hsc
+++ b/src/HROOT/Hist/TGraphAsymmErrors/FFI.hsc
@@ -1,331 +1,349 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TGraphAsymmErrors.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TGraphAsymmErrors.RawType
+import HROOT.Hist.TGraphAsymmErrors.RawType
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TAxis.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Apply"
                c_tgraphasymmerrors_apply ::
                Ptr RawTGraphAsymmErrors -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Chisquare"
                c_tgraphasymmerrors_chisquare ::
                Ptr RawTGraphAsymmErrors -> Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_DrawGraph"
                c_tgraphasymmerrors_drawgraph ::
                Ptr RawTGraphAsymmErrors ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CString -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_drawPanelTGraph"
                c_tgraphasymmerrors_drawpaneltgraph ::
                Ptr RawTGraphAsymmErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Expand"
                c_tgraphasymmerrors_expand ::
                Ptr RawTGraphAsymmErrors -> CInt -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_FitPanelTGraph"
                c_tgraphasymmerrors_fitpaneltgraph ::
                Ptr RawTGraphAsymmErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_getCorrelationFactorTGraph"
                c_tgraphasymmerrors_getcorrelationfactortgraph ::
                Ptr RawTGraphAsymmErrors -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_getCovarianceTGraph"
                c_tgraphasymmerrors_getcovariancetgraph ::
                Ptr RawTGraphAsymmErrors -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_getMeanTGraph"
                c_tgraphasymmerrors_getmeantgraph ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_getRMSTGraph"
                c_tgraphasymmerrors_getrmstgraph ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetErrorX"
                c_tgraphasymmerrors_geterrorx ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetErrorY"
                c_tgraphasymmerrors_geterrory ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetErrorXhigh"
                c_tgraphasymmerrors_geterrorxhigh ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetErrorXlow"
                c_tgraphasymmerrors_geterrorxlow ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetErrorYhigh"
                c_tgraphasymmerrors_geterroryhigh ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetErrorYlow"
                c_tgraphasymmerrors_geterrorylow ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_InitExpo"
                c_tgraphasymmerrors_initexpo ::
                Ptr RawTGraphAsymmErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_InitGaus"
                c_tgraphasymmerrors_initgaus ::
                Ptr RawTGraphAsymmErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_InitPolynom"
                c_tgraphasymmerrors_initpolynom ::
                Ptr RawTGraphAsymmErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_InsertPoint"
                c_tgraphasymmerrors_insertpoint ::
                Ptr RawTGraphAsymmErrors -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_integralTGraph"
                c_tgraphasymmerrors_integraltgraph ::
                Ptr RawTGraphAsymmErrors -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_IsEditable"
                c_tgraphasymmerrors_iseditable ::
-               Ptr RawTGraphAsymmErrors -> IO CInt
+               Ptr RawTGraphAsymmErrors -> IO CBool
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_isInsideTGraph"
                c_tgraphasymmerrors_isinsidetgraph ::
                Ptr RawTGraphAsymmErrors -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_LeastSquareFit"
                c_tgraphasymmerrors_leastsquarefit ::
                Ptr RawTGraphAsymmErrors ->
-                 CInt -> (Ptr CDouble) -> CDouble -> CDouble -> IO ()
+                 CInt -> Ptr CDouble -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_PaintStats"
                c_tgraphasymmerrors_paintstats ::
                Ptr RawTGraphAsymmErrors -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_RemovePoint"
                c_tgraphasymmerrors_removepoint ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetEditable"
                c_tgraphasymmerrors_seteditable ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CBool -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetHistogram"
                c_tgraphasymmerrors_sethistogram ::
                Ptr RawTGraphAsymmErrors -> Ptr RawTH1F -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_setMaximumTGraph"
                c_tgraphasymmerrors_setmaximumtgraph ::
                Ptr RawTGraphAsymmErrors -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_setMinimumTGraph"
                c_tgraphasymmerrors_setminimumtgraph ::
                Ptr RawTGraphAsymmErrors -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Set"
                c_tgraphasymmerrors_set ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetPoint"
                c_tgraphasymmerrors_setpoint ::
                Ptr RawTGraphAsymmErrors -> CInt -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetName"
                c_tgraphasymmerrors_setname ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetNameTitle"
                c_tgraphasymmerrors_setnametitle ::
                Ptr RawTGraphAsymmErrors -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetTitle"
                c_tgraphasymmerrors_settitle ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetLineColor"
                c_tgraphasymmerrors_getlinecolor ::
-               Ptr RawTGraphAsymmErrors -> IO CInt
+               Ptr RawTGraphAsymmErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetLineStyle"
                c_tgraphasymmerrors_getlinestyle ::
-               Ptr RawTGraphAsymmErrors -> IO CInt
+               Ptr RawTGraphAsymmErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetLineWidth"
                c_tgraphasymmerrors_getlinewidth ::
-               Ptr RawTGraphAsymmErrors -> IO CInt
+               Ptr RawTGraphAsymmErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_ResetAttLine"
                c_tgraphasymmerrors_resetattline ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetLineAttributes"
                c_tgraphasymmerrors_setlineattributes ::
                Ptr RawTGraphAsymmErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetLineColor"
                c_tgraphasymmerrors_setlinecolor ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetLineStyle"
                c_tgraphasymmerrors_setlinestyle ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetLineWidth"
                c_tgraphasymmerrors_setlinewidth ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetFillColor"
                c_tgraphasymmerrors_setfillcolor ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetFillStyle"
                c_tgraphasymmerrors_setfillstyle ::
                Ptr RawTGraphAsymmErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetMarkerColor"
                c_tgraphasymmerrors_getmarkercolor ::
-               Ptr RawTGraphAsymmErrors -> IO CInt
+               Ptr RawTGraphAsymmErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetMarkerStyle"
                c_tgraphasymmerrors_getmarkerstyle ::
-               Ptr RawTGraphAsymmErrors -> IO CInt
+               Ptr RawTGraphAsymmErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetMarkerSize"
                c_tgraphasymmerrors_getmarkersize ::
-               Ptr RawTGraphAsymmErrors -> IO CDouble
+               Ptr RawTGraphAsymmErrors -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_ResetAttMarker"
                c_tgraphasymmerrors_resetattmarker ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetMarkerAttributes"
                c_tgraphasymmerrors_setmarkerattributes ::
                Ptr RawTGraphAsymmErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetMarkerColor"
                c_tgraphasymmerrors_setmarkercolor ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetMarkerStyle"
                c_tgraphasymmerrors_setmarkerstyle ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetMarkerSize"
                c_tgraphasymmerrors_setmarkersize ::
-               Ptr RawTGraphAsymmErrors -> CInt -> IO ()
+               Ptr RawTGraphAsymmErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Clear"
+               c_tgraphasymmerrors_clear ::
+               Ptr RawTGraphAsymmErrors -> CString -> IO ()
+
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Draw"
                c_tgraphasymmerrors_draw ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_FindObject"
                c_tgraphasymmerrors_findobject ::
                Ptr RawTGraphAsymmErrors -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_GetName"
                c_tgraphasymmerrors_getname ::
                Ptr RawTGraphAsymmErrors -> IO CString
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_IsA"
                c_tgraphasymmerrors_isa ::
                Ptr RawTGraphAsymmErrors -> IO (Ptr RawTClass)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Paint"
                c_tgraphasymmerrors_paint ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_printObj"
                c_tgraphasymmerrors_printobj ::
                Ptr RawTGraphAsymmErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SaveAs"
                c_tgraphasymmerrors_saveas ::
                Ptr RawTGraphAsymmErrors -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Write"
                c_tgraphasymmerrors_write ::
                Ptr RawTGraphAsymmErrors -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_Write_"
+               c_tgraphasymmerrors_write_ :: Ptr RawTGraphAsymmErrors -> IO CInt
+
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_delete"
                c_tgraphasymmerrors_delete :: Ptr RawTGraphAsymmErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_newTGraphAsymmErrors"
                c_tgraphasymmerrors_newtgraphasymmerrors ::
                CInt ->
-                 (Ptr CDouble) ->
-                   (Ptr CDouble) ->
-                     (Ptr CDouble) ->
-                       (Ptr CDouble) ->
-                         (Ptr CDouble) -> (Ptr CDouble) -> IO (Ptr RawTGraphAsymmErrors)
+                 Ptr CDouble ->
+                   Ptr CDouble ->
+                     Ptr CDouble ->
+                       Ptr CDouble ->
+                         Ptr CDouble -> Ptr CDouble -> IO (Ptr RawTGraphAsymmErrors)
+
+foreign import ccall interruptible
+               "HROOTHistTGraphAsymmErrors.h TGraphAsymmErrors_SetPointErrorA"
+               c_tgraphasymmerrors_setpointerrora ::
+               Ptr RawTGraphAsymmErrors ->
+                 CInt -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
diff --git a/src/HROOT/Hist/TGraphAsymmErrors/Implementation.hs b/src/HROOT/Hist/TGraphAsymmErrors/Implementation.hs
--- a/src/HROOT/Hist/TGraphAsymmErrors/Implementation.hs
+++ b/src/HROOT/Hist/TGraphAsymmErrors/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TGraphAsymmErrors.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TGraphAsymmErrors.RawType
 import HROOT.Hist.TGraphAsymmErrors.FFI
 import HROOT.Hist.TGraphAsymmErrors.Interface
 import HROOT.Hist.TGraphAsymmErrors.Cast
+import HROOT.Hist.TGraphAsymmErrors.RawType
+import HROOT.Hist.TGraphAsymmErrors.Cast
+import HROOT.Hist.TGraphAsymmErrors.Interface
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TF1.Cast
 import HROOT.Hist.TF1.Interface
@@ -42,13 +51,14 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITGraphAsymmErrors TGraphAsymmErrors
+instance () => ITGraphAsymmErrors (TGraphAsymmErrors) where
+        setPointErrorA = xform5 c_tgraphasymmerrors_setpointerrora
 
-instance ITGraph TGraphAsymmErrors where
+instance () => ITGraph (TGraphAsymmErrors) where
         apply = xform1 c_tgraphasymmerrors_apply
         chisquare = xform1 c_tgraphasymmerrors_chisquare
         drawGraph = xform4 c_tgraphasymmerrors_drawgraph
@@ -84,12 +94,12 @@
         set = xform1 c_tgraphasymmerrors_set
         setPoint = xform3 c_tgraphasymmerrors_setpoint
 
-instance ITNamed TGraphAsymmErrors where
+instance () => ITNamed (TGraphAsymmErrors) where
         setName = xform1 c_tgraphasymmerrors_setname
         setNameTitle = xform2 c_tgraphasymmerrors_setnametitle
         setTitle = xform1 c_tgraphasymmerrors_settitle
 
-instance ITAttLine TGraphAsymmErrors where
+instance () => ITAttLine (TGraphAsymmErrors) where
         getLineColor = xform0 c_tgraphasymmerrors_getlinecolor
         getLineStyle = xform0 c_tgraphasymmerrors_getlinestyle
         getLineWidth = xform0 c_tgraphasymmerrors_getlinewidth
@@ -99,11 +109,11 @@
         setLineStyle = xform1 c_tgraphasymmerrors_setlinestyle
         setLineWidth = xform1 c_tgraphasymmerrors_setlinewidth
 
-instance ITAttFill TGraphAsymmErrors where
+instance () => ITAttFill (TGraphAsymmErrors) where
         setFillColor = xform1 c_tgraphasymmerrors_setfillcolor
         setFillStyle = xform1 c_tgraphasymmerrors_setfillstyle
 
-instance ITAttMarker TGraphAsymmErrors where
+instance () => ITAttMarker (TGraphAsymmErrors) where
         getMarkerColor = xform0 c_tgraphasymmerrors_getmarkercolor
         getMarkerStyle = xform0 c_tgraphasymmerrors_getmarkerstyle
         getMarkerSize = xform0 c_tgraphasymmerrors_getmarkersize
@@ -114,7 +124,8 @@
         setMarkerStyle = xform1 c_tgraphasymmerrors_setmarkerstyle
         setMarkerSize = xform1 c_tgraphasymmerrors_setmarkersize
 
-instance ITObject TGraphAsymmErrors where
+instance () => ITObject (TGraphAsymmErrors) where
+        clear = xform1 c_tgraphasymmerrors_clear
         draw = xform1 c_tgraphasymmerrors_draw
         findObject = xform1 c_tgraphasymmerrors_findobject
         getName = xform0 c_tgraphasymmerrors_getname
@@ -123,16 +134,17 @@
         printObj = xform1 c_tgraphasymmerrors_printobj
         saveAs = xform2 c_tgraphasymmerrors_saveas
         write = xform3 c_tgraphasymmerrors_write
+        write_ = xform0 c_tgraphasymmerrors_write_
 
-instance IDeletable TGraphAsymmErrors where
+instance () => IDeletable (TGraphAsymmErrors) where
         delete = xform0 c_tgraphasymmerrors_delete
 
 newTGraphAsymmErrors ::
+                       () =>
                        CInt ->
-                         (Ptr CDouble) ->
-                           (Ptr CDouble) ->
-                             (Ptr CDouble) ->
-                               (Ptr CDouble) ->
-                                 (Ptr CDouble) -> (Ptr CDouble) -> IO TGraphAsymmErrors
+                         Ptr CDouble ->
+                           Ptr CDouble ->
+                             Ptr CDouble ->
+                               Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO TGraphAsymmErrors
 newTGraphAsymmErrors
   = xform6 c_tgraphasymmerrors_newtgraphasymmerrors
diff --git a/src/HROOT/Hist/TGraphAsymmErrors/Interface.hs b/src/HROOT/Hist/TGraphAsymmErrors/Interface.hs
--- a/src/HROOT/Hist/TGraphAsymmErrors/Interface.hs
+++ b/src/HROOT/Hist/TGraphAsymmErrors/Interface.hs
@@ -4,13 +4,17 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TGraphAsymmErrors.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TGraphAsymmErrors.RawType
 import HROOT.Hist.TGraph.Interface
 
-class ITGraph a => ITGraphAsymmErrors a
+class (ITGraph a) => ITGraphAsymmErrors a where
+        setPointErrorA ::
+                         () =>
+                         a -> CInt -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
 
 upcastTGraphAsymmErrors ::
                         forall a . (FPtr a, ITGraphAsymmErrors a) => a -> TGraphAsymmErrors
diff --git a/src/HROOT/Hist/TGraphAsymmErrors/RawType.hs b/src/HROOT/Hist/TGraphAsymmErrors/RawType.hs
--- a/src/HROOT/Hist/TGraphAsymmErrors/RawType.hs
+++ b/src/HROOT/Hist/TGraphAsymmErrors/RawType.hs
@@ -9,9 +9,9 @@
 
 newtype TGraphAsymmErrors = TGraphAsymmErrors (Ptr
                                                  RawTGraphAsymmErrors)
-                          deriving (Eq, Ord, Show)
+                              deriving (Eq, Ord, Show)
 
-instance FPtr TGraphAsymmErrors where
+instance () => FPtr (TGraphAsymmErrors) where
         type Raw TGraphAsymmErrors = RawTGraphAsymmErrors
         get_fptr (TGraphAsymmErrors ptr) = ptr
         cast_fptr_to_obj = TGraphAsymmErrors
diff --git a/src/HROOT/Hist/TGraphBentErrors/Cast.hs b/src/HROOT/Hist/TGraphBentErrors/Cast.hs
--- a/src/HROOT/Hist/TGraphBentErrors/Cast.hs
+++ b/src/HROOT/Hist/TGraphBentErrors/Cast.hs
@@ -8,11 +8,14 @@
 import HROOT.Hist.TGraphBentErrors.RawType
 import HROOT.Hist.TGraphBentErrors.Interface
 
-instance (ITGraphBentErrors a, FPtr a) => Castable a
-         (Ptr RawTGraphBentErrors) where
+instance (ITGraphBentErrors a, FPtr a) =>
+         Castable (a) (Ptr RawTGraphBentErrors)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TGraphBentErrors (Ptr RawTGraphBentErrors) where
+instance () =>
+         Castable (TGraphBentErrors) (Ptr RawTGraphBentErrors)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TGraphBentErrors/FFI.hsc b/src/HROOT/Hist/TGraphBentErrors/FFI.hsc
--- a/src/HROOT/Hist/TGraphBentErrors/FFI.hsc
+++ b/src/HROOT/Hist/TGraphBentErrors/FFI.hsc
@@ -1,332 +1,345 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TGraphBentErrors.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TGraphBentErrors.RawType
+import HROOT.Hist.TGraphBentErrors.RawType
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TAxis.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Apply"
                c_tgraphbenterrors_apply ::
                Ptr RawTGraphBentErrors -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Chisquare"
                c_tgraphbenterrors_chisquare ::
                Ptr RawTGraphBentErrors -> Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_DrawGraph"
                c_tgraphbenterrors_drawgraph ::
                Ptr RawTGraphBentErrors ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CString -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_drawPanelTGraph"
                c_tgraphbenterrors_drawpaneltgraph ::
                Ptr RawTGraphBentErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Expand"
                c_tgraphbenterrors_expand ::
                Ptr RawTGraphBentErrors -> CInt -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_FitPanelTGraph"
                c_tgraphbenterrors_fitpaneltgraph ::
                Ptr RawTGraphBentErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_getCorrelationFactorTGraph"
                c_tgraphbenterrors_getcorrelationfactortgraph ::
                Ptr RawTGraphBentErrors -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_getCovarianceTGraph"
                c_tgraphbenterrors_getcovariancetgraph ::
                Ptr RawTGraphBentErrors -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_getMeanTGraph"
                c_tgraphbenterrors_getmeantgraph ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_getRMSTGraph"
                c_tgraphbenterrors_getrmstgraph ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetErrorX"
                c_tgraphbenterrors_geterrorx ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetErrorY"
                c_tgraphbenterrors_geterrory ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetErrorXhigh"
                c_tgraphbenterrors_geterrorxhigh ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetErrorXlow"
                c_tgraphbenterrors_geterrorxlow ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetErrorYhigh"
                c_tgraphbenterrors_geterroryhigh ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetErrorYlow"
                c_tgraphbenterrors_geterrorylow ::
                Ptr RawTGraphBentErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_InitExpo"
                c_tgraphbenterrors_initexpo ::
                Ptr RawTGraphBentErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_InitGaus"
                c_tgraphbenterrors_initgaus ::
                Ptr RawTGraphBentErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_InitPolynom"
                c_tgraphbenterrors_initpolynom ::
                Ptr RawTGraphBentErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_InsertPoint"
                c_tgraphbenterrors_insertpoint ::
                Ptr RawTGraphBentErrors -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_integralTGraph"
                c_tgraphbenterrors_integraltgraph ::
                Ptr RawTGraphBentErrors -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_IsEditable"
-               c_tgraphbenterrors_iseditable :: Ptr RawTGraphBentErrors -> IO CInt
+               c_tgraphbenterrors_iseditable ::
+               Ptr RawTGraphBentErrors -> IO CBool
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_isInsideTGraph"
                c_tgraphbenterrors_isinsidetgraph ::
                Ptr RawTGraphBentErrors -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_LeastSquareFit"
                c_tgraphbenterrors_leastsquarefit ::
                Ptr RawTGraphBentErrors ->
-                 CInt -> (Ptr CDouble) -> CDouble -> CDouble -> IO ()
+                 CInt -> Ptr CDouble -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_PaintStats"
                c_tgraphbenterrors_paintstats ::
                Ptr RawTGraphBentErrors -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_RemovePoint"
                c_tgraphbenterrors_removepoint ::
                Ptr RawTGraphBentErrors -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetEditable"
                c_tgraphbenterrors_seteditable ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CBool -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetHistogram"
                c_tgraphbenterrors_sethistogram ::
                Ptr RawTGraphBentErrors -> Ptr RawTH1F -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_setMaximumTGraph"
                c_tgraphbenterrors_setmaximumtgraph ::
                Ptr RawTGraphBentErrors -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_setMinimumTGraph"
                c_tgraphbenterrors_setminimumtgraph ::
                Ptr RawTGraphBentErrors -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Set"
                c_tgraphbenterrors_set :: Ptr RawTGraphBentErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetPoint"
                c_tgraphbenterrors_setpoint ::
                Ptr RawTGraphBentErrors -> CInt -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetName"
                c_tgraphbenterrors_setname ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetNameTitle"
                c_tgraphbenterrors_setnametitle ::
                Ptr RawTGraphBentErrors -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetTitle"
                c_tgraphbenterrors_settitle ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetLineColor"
                c_tgraphbenterrors_getlinecolor ::
-               Ptr RawTGraphBentErrors -> IO CInt
+               Ptr RawTGraphBentErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetLineStyle"
                c_tgraphbenterrors_getlinestyle ::
-               Ptr RawTGraphBentErrors -> IO CInt
+               Ptr RawTGraphBentErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetLineWidth"
                c_tgraphbenterrors_getlinewidth ::
-               Ptr RawTGraphBentErrors -> IO CInt
+               Ptr RawTGraphBentErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_ResetAttLine"
                c_tgraphbenterrors_resetattline ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetLineAttributes"
                c_tgraphbenterrors_setlineattributes ::
                Ptr RawTGraphBentErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetLineColor"
                c_tgraphbenterrors_setlinecolor ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetLineStyle"
                c_tgraphbenterrors_setlinestyle ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetLineWidth"
                c_tgraphbenterrors_setlinewidth ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetFillColor"
                c_tgraphbenterrors_setfillcolor ::
                Ptr RawTGraphBentErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetFillStyle"
                c_tgraphbenterrors_setfillstyle ::
                Ptr RawTGraphBentErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetMarkerColor"
                c_tgraphbenterrors_getmarkercolor ::
-               Ptr RawTGraphBentErrors -> IO CInt
+               Ptr RawTGraphBentErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetMarkerStyle"
                c_tgraphbenterrors_getmarkerstyle ::
-               Ptr RawTGraphBentErrors -> IO CInt
+               Ptr RawTGraphBentErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetMarkerSize"
                c_tgraphbenterrors_getmarkersize ::
-               Ptr RawTGraphBentErrors -> IO CDouble
+               Ptr RawTGraphBentErrors -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_ResetAttMarker"
                c_tgraphbenterrors_resetattmarker ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetMarkerAttributes"
                c_tgraphbenterrors_setmarkerattributes ::
                Ptr RawTGraphBentErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetMarkerColor"
                c_tgraphbenterrors_setmarkercolor ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetMarkerStyle"
                c_tgraphbenterrors_setmarkerstyle ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SetMarkerSize"
                c_tgraphbenterrors_setmarkersize ::
-               Ptr RawTGraphBentErrors -> CInt -> IO ()
+               Ptr RawTGraphBentErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTGraphBentErrors.h TGraphBentErrors_Clear"
+               c_tgraphbenterrors_clear ::
+               Ptr RawTGraphBentErrors -> CString -> IO ()
+
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Draw"
                c_tgraphbenterrors_draw ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_FindObject"
                c_tgraphbenterrors_findobject ::
                Ptr RawTGraphBentErrors -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_GetName"
                c_tgraphbenterrors_getname :: Ptr RawTGraphBentErrors -> IO CString
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_IsA"
                c_tgraphbenterrors_isa ::
                Ptr RawTGraphBentErrors -> IO (Ptr RawTClass)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Paint"
                c_tgraphbenterrors_paint ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_printObj"
                c_tgraphbenterrors_printobj ::
                Ptr RawTGraphBentErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_SaveAs"
                c_tgraphbenterrors_saveas ::
                Ptr RawTGraphBentErrors -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_Write"
                c_tgraphbenterrors_write ::
                Ptr RawTGraphBentErrors -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTGraphBentErrors.h TGraphBentErrors_Write_"
+               c_tgraphbenterrors_write_ :: Ptr RawTGraphBentErrors -> IO CInt
+
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_delete"
                c_tgraphbenterrors_delete :: Ptr RawTGraphBentErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphBentErrors.h TGraphBentErrors_newTGraphBentErrors"
                c_tgraphbenterrors_newtgraphbenterrors ::
                CInt ->
-                 (Ptr CDouble) ->
-                   (Ptr CDouble) ->
-                     (Ptr CDouble) ->
-                       (Ptr CDouble) ->
-                         (Ptr CDouble) ->
-                           (Ptr CDouble) ->
-                             (Ptr CDouble) ->
-                               (Ptr CDouble) ->
-                                 (Ptr CDouble) -> (Ptr CDouble) -> IO (Ptr RawTGraphBentErrors)
+                 Ptr CDouble ->
+                   Ptr CDouble ->
+                     Ptr CDouble ->
+                       Ptr CDouble ->
+                         Ptr CDouble ->
+                           Ptr CDouble ->
+                             Ptr CDouble ->
+                               Ptr CDouble ->
+                                 Ptr CDouble -> Ptr CDouble -> IO (Ptr RawTGraphBentErrors)
diff --git a/src/HROOT/Hist/TGraphBentErrors/Implementation.hs b/src/HROOT/Hist/TGraphBentErrors/Implementation.hs
--- a/src/HROOT/Hist/TGraphBentErrors/Implementation.hs
+++ b/src/HROOT/Hist/TGraphBentErrors/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TGraphBentErrors.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TGraphBentErrors.RawType
 import HROOT.Hist.TGraphBentErrors.FFI
 import HROOT.Hist.TGraphBentErrors.Interface
 import HROOT.Hist.TGraphBentErrors.Cast
+import HROOT.Hist.TGraphBentErrors.RawType
+import HROOT.Hist.TGraphBentErrors.Cast
+import HROOT.Hist.TGraphBentErrors.Interface
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TF1.Cast
 import HROOT.Hist.TF1.Interface
@@ -42,13 +51,13 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITGraphBentErrors TGraphBentErrors
+instance () => ITGraphBentErrors (TGraphBentErrors) where
 
-instance ITGraph TGraphBentErrors where
+instance () => ITGraph (TGraphBentErrors) where
         apply = xform1 c_tgraphbenterrors_apply
         chisquare = xform1 c_tgraphbenterrors_chisquare
         drawGraph = xform4 c_tgraphbenterrors_drawgraph
@@ -83,12 +92,12 @@
         set = xform1 c_tgraphbenterrors_set
         setPoint = xform3 c_tgraphbenterrors_setpoint
 
-instance ITNamed TGraphBentErrors where
+instance () => ITNamed (TGraphBentErrors) where
         setName = xform1 c_tgraphbenterrors_setname
         setNameTitle = xform2 c_tgraphbenterrors_setnametitle
         setTitle = xform1 c_tgraphbenterrors_settitle
 
-instance ITAttLine TGraphBentErrors where
+instance () => ITAttLine (TGraphBentErrors) where
         getLineColor = xform0 c_tgraphbenterrors_getlinecolor
         getLineStyle = xform0 c_tgraphbenterrors_getlinestyle
         getLineWidth = xform0 c_tgraphbenterrors_getlinewidth
@@ -98,11 +107,11 @@
         setLineStyle = xform1 c_tgraphbenterrors_setlinestyle
         setLineWidth = xform1 c_tgraphbenterrors_setlinewidth
 
-instance ITAttFill TGraphBentErrors where
+instance () => ITAttFill (TGraphBentErrors) where
         setFillColor = xform1 c_tgraphbenterrors_setfillcolor
         setFillStyle = xform1 c_tgraphbenterrors_setfillstyle
 
-instance ITAttMarker TGraphBentErrors where
+instance () => ITAttMarker (TGraphBentErrors) where
         getMarkerColor = xform0 c_tgraphbenterrors_getmarkercolor
         getMarkerStyle = xform0 c_tgraphbenterrors_getmarkerstyle
         getMarkerSize = xform0 c_tgraphbenterrors_getmarkersize
@@ -112,7 +121,8 @@
         setMarkerStyle = xform1 c_tgraphbenterrors_setmarkerstyle
         setMarkerSize = xform1 c_tgraphbenterrors_setmarkersize
 
-instance ITObject TGraphBentErrors where
+instance () => ITObject (TGraphBentErrors) where
+        clear = xform1 c_tgraphbenterrors_clear
         draw = xform1 c_tgraphbenterrors_draw
         findObject = xform1 c_tgraphbenterrors_findobject
         getName = xform0 c_tgraphbenterrors_getname
@@ -121,20 +131,22 @@
         printObj = xform1 c_tgraphbenterrors_printobj
         saveAs = xform2 c_tgraphbenterrors_saveas
         write = xform3 c_tgraphbenterrors_write
+        write_ = xform0 c_tgraphbenterrors_write_
 
-instance IDeletable TGraphBentErrors where
+instance () => IDeletable (TGraphBentErrors) where
         delete = xform0 c_tgraphbenterrors_delete
 
 newTGraphBentErrors ::
+                      () =>
                       CInt ->
-                        (Ptr CDouble) ->
-                          (Ptr CDouble) ->
-                            (Ptr CDouble) ->
-                              (Ptr CDouble) ->
-                                (Ptr CDouble) ->
-                                  (Ptr CDouble) ->
-                                    (Ptr CDouble) ->
-                                      (Ptr CDouble) ->
-                                        (Ptr CDouble) -> (Ptr CDouble) -> IO TGraphBentErrors
+                        Ptr CDouble ->
+                          Ptr CDouble ->
+                            Ptr CDouble ->
+                              Ptr CDouble ->
+                                Ptr CDouble ->
+                                  Ptr CDouble ->
+                                    Ptr CDouble ->
+                                      Ptr CDouble ->
+                                        Ptr CDouble -> Ptr CDouble -> IO TGraphBentErrors
 newTGraphBentErrors
   = xform10 c_tgraphbenterrors_newtgraphbenterrors
diff --git a/src/HROOT/Hist/TGraphBentErrors/Interface.hs b/src/HROOT/Hist/TGraphBentErrors/Interface.hs
--- a/src/HROOT/Hist/TGraphBentErrors/Interface.hs
+++ b/src/HROOT/Hist/TGraphBentErrors/Interface.hs
@@ -4,13 +4,14 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TGraphBentErrors.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TGraphBentErrors.RawType
 import HROOT.Hist.TGraph.Interface
 
-class ITGraph a => ITGraphBentErrors a
+class (ITGraph a) => ITGraphBentErrors a where
 
 upcastTGraphBentErrors ::
                        forall a . (FPtr a, ITGraphBentErrors a) => a -> TGraphBentErrors
diff --git a/src/HROOT/Hist/TGraphBentErrors/RawType.hs b/src/HROOT/Hist/TGraphBentErrors/RawType.hs
--- a/src/HROOT/Hist/TGraphBentErrors/RawType.hs
+++ b/src/HROOT/Hist/TGraphBentErrors/RawType.hs
@@ -9,9 +9,9 @@
 
 newtype TGraphBentErrors = TGraphBentErrors (Ptr
                                                RawTGraphBentErrors)
-                         deriving (Eq, Ord, Show)
+                             deriving (Eq, Ord, Show)
 
-instance FPtr TGraphBentErrors where
+instance () => FPtr (TGraphBentErrors) where
         type Raw TGraphBentErrors = RawTGraphBentErrors
         get_fptr (TGraphBentErrors ptr) = ptr
         cast_fptr_to_obj = TGraphBentErrors
diff --git a/src/HROOT/Hist/TGraphErrors.hs b/src/HROOT/Hist/TGraphErrors.hs
--- a/src/HROOT/Hist/TGraphErrors.hs
+++ b/src/HROOT/Hist/TGraphErrors.hs
@@ -1,5 +1,5 @@
 module HROOT.Hist.TGraphErrors
-       (TGraphErrors(..), ITGraphErrors, upcastTGraphErrors,
+       (TGraphErrors(..), ITGraphErrors(..), upcastTGraphErrors,
         downcastTGraphErrors, newTGraphErrors)
        where
 import HROOT.Hist.TGraphErrors.RawType
diff --git a/src/HROOT/Hist/TGraphErrors/Cast.hs b/src/HROOT/Hist/TGraphErrors/Cast.hs
--- a/src/HROOT/Hist/TGraphErrors/Cast.hs
+++ b/src/HROOT/Hist/TGraphErrors/Cast.hs
@@ -8,11 +8,12 @@
 import HROOT.Hist.TGraphErrors.RawType
 import HROOT.Hist.TGraphErrors.Interface
 
-instance (ITGraphErrors a, FPtr a) => Castable a
-         (Ptr RawTGraphErrors) where
+instance (ITGraphErrors a, FPtr a) =>
+         Castable (a) (Ptr RawTGraphErrors)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TGraphErrors (Ptr RawTGraphErrors) where
+instance () => Castable (TGraphErrors) (Ptr RawTGraphErrors) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TGraphErrors/FFI.hsc b/src/HROOT/Hist/TGraphErrors/FFI.hsc
--- a/src/HROOT/Hist/TGraphErrors/FFI.hsc
+++ b/src/HROOT/Hist/TGraphErrors/FFI.hsc
@@ -1,299 +1,318 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TGraphErrors.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TGraphErrors.RawType
+import HROOT.Hist.TGraphErrors.RawType
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TAxis.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Apply" c_tgrapherrors_apply
                :: Ptr RawTGraphErrors -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Chisquare"
                c_tgrapherrors_chisquare ::
                Ptr RawTGraphErrors -> Ptr RawTF1 -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_DrawGraph"
                c_tgrapherrors_drawgraph ::
                Ptr RawTGraphErrors ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CString -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_drawPanelTGraph"
                c_tgrapherrors_drawpaneltgraph :: Ptr RawTGraphErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Expand" c_tgrapherrors_expand
                :: Ptr RawTGraphErrors -> CInt -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_FitPanelTGraph"
                c_tgrapherrors_fitpaneltgraph :: Ptr RawTGraphErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_getCorrelationFactorTGraph"
                c_tgrapherrors_getcorrelationfactortgraph ::
                Ptr RawTGraphErrors -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_getCovarianceTGraph"
                c_tgrapherrors_getcovariancetgraph ::
                Ptr RawTGraphErrors -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_getMeanTGraph"
                c_tgrapherrors_getmeantgraph ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_getRMSTGraph"
                c_tgrapherrors_getrmstgraph ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetErrorX"
                c_tgrapherrors_geterrorx ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetErrorY"
                c_tgrapherrors_geterrory ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetErrorXhigh"
                c_tgrapherrors_geterrorxhigh ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetErrorXlow"
                c_tgrapherrors_geterrorxlow ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetErrorYhigh"
                c_tgrapherrors_geterroryhigh ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetErrorYlow"
                c_tgrapherrors_geterrorylow ::
                Ptr RawTGraphErrors -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_InitExpo"
                c_tgrapherrors_initexpo ::
                Ptr RawTGraphErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_InitGaus"
                c_tgrapherrors_initgaus ::
                Ptr RawTGraphErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_InitPolynom"
                c_tgrapherrors_initpolynom ::
                Ptr RawTGraphErrors -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_InsertPoint"
                c_tgrapherrors_insertpoint :: Ptr RawTGraphErrors -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_integralTGraph"
                c_tgrapherrors_integraltgraph ::
                Ptr RawTGraphErrors -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_IsEditable"
-               c_tgrapherrors_iseditable :: Ptr RawTGraphErrors -> IO CInt
+               c_tgrapherrors_iseditable :: Ptr RawTGraphErrors -> IO CBool
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_isInsideTGraph"
                c_tgrapherrors_isinsidetgraph ::
                Ptr RawTGraphErrors -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_LeastSquareFit"
                c_tgrapherrors_leastsquarefit ::
                Ptr RawTGraphErrors ->
-                 CInt -> (Ptr CDouble) -> CDouble -> CDouble -> IO ()
+                 CInt -> Ptr CDouble -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_PaintStats"
                c_tgrapherrors_paintstats ::
                Ptr RawTGraphErrors -> Ptr RawTF1 -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_RemovePoint"
                c_tgrapherrors_removepoint ::
                Ptr RawTGraphErrors -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetEditable"
-               c_tgrapherrors_seteditable :: Ptr RawTGraphErrors -> CInt -> IO ()
+               c_tgrapherrors_seteditable :: Ptr RawTGraphErrors -> CBool -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetHistogram"
                c_tgrapherrors_sethistogram ::
                Ptr RawTGraphErrors -> Ptr RawTH1F -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_setMaximumTGraph"
                c_tgrapherrors_setmaximumtgraph ::
                Ptr RawTGraphErrors -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_setMinimumTGraph"
                c_tgrapherrors_setminimumtgraph ::
                Ptr RawTGraphErrors -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Set" c_tgrapherrors_set ::
                Ptr RawTGraphErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetPoint"
                c_tgrapherrors_setpoint ::
                Ptr RawTGraphErrors -> CInt -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetName"
                c_tgrapherrors_setname :: Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetNameTitle"
                c_tgrapherrors_setnametitle ::
                Ptr RawTGraphErrors -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetTitle"
                c_tgrapherrors_settitle :: Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetLineColor"
-               c_tgrapherrors_getlinecolor :: Ptr RawTGraphErrors -> IO CInt
+               c_tgrapherrors_getlinecolor :: Ptr RawTGraphErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetLineStyle"
-               c_tgrapherrors_getlinestyle :: Ptr RawTGraphErrors -> IO CInt
+               c_tgrapherrors_getlinestyle :: Ptr RawTGraphErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetLineWidth"
-               c_tgrapherrors_getlinewidth :: Ptr RawTGraphErrors -> IO CInt
+               c_tgrapherrors_getlinewidth :: Ptr RawTGraphErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_ResetAttLine"
                c_tgrapherrors_resetattline ::
                Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetLineAttributes"
                c_tgrapherrors_setlineattributes :: Ptr RawTGraphErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetLineColor"
-               c_tgrapherrors_setlinecolor :: Ptr RawTGraphErrors -> CInt -> IO ()
+               c_tgrapherrors_setlinecolor ::
+               Ptr RawTGraphErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetLineStyle"
-               c_tgrapherrors_setlinestyle :: Ptr RawTGraphErrors -> CInt -> IO ()
+               c_tgrapherrors_setlinestyle ::
+               Ptr RawTGraphErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetLineWidth"
-               c_tgrapherrors_setlinewidth :: Ptr RawTGraphErrors -> CInt -> IO ()
+               c_tgrapherrors_setlinewidth ::
+               Ptr RawTGraphErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetFillColor"
                c_tgrapherrors_setfillcolor :: Ptr RawTGraphErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetFillStyle"
                c_tgrapherrors_setfillstyle :: Ptr RawTGraphErrors -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetMarkerColor"
-               c_tgrapherrors_getmarkercolor :: Ptr RawTGraphErrors -> IO CInt
+               c_tgrapherrors_getmarkercolor :: Ptr RawTGraphErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetMarkerStyle"
-               c_tgrapherrors_getmarkerstyle :: Ptr RawTGraphErrors -> IO CInt
+               c_tgrapherrors_getmarkerstyle :: Ptr RawTGraphErrors -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetMarkerSize"
-               c_tgrapherrors_getmarkersize :: Ptr RawTGraphErrors -> IO CDouble
+               c_tgrapherrors_getmarkersize :: Ptr RawTGraphErrors -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_ResetAttMarker"
                c_tgrapherrors_resetattmarker ::
                Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetMarkerAttributes"
                c_tgrapherrors_setmarkerattributes :: Ptr RawTGraphErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetMarkerColor"
                c_tgrapherrors_setmarkercolor ::
-               Ptr RawTGraphErrors -> CInt -> IO ()
+               Ptr RawTGraphErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetMarkerStyle"
                c_tgrapherrors_setmarkerstyle ::
-               Ptr RawTGraphErrors -> CInt -> IO ()
+               Ptr RawTGraphErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SetMarkerSize"
                c_tgrapherrors_setmarkersize ::
-               Ptr RawTGraphErrors -> CInt -> IO ()
+               Ptr RawTGraphErrors -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTGraphErrors.h TGraphErrors_Clear" c_tgrapherrors_clear
+               :: Ptr RawTGraphErrors -> CString -> IO ()
+
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Draw" c_tgrapherrors_draw ::
                Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_FindObject"
                c_tgrapherrors_findobject ::
                Ptr RawTGraphErrors -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_GetName"
                c_tgrapherrors_getname :: Ptr RawTGraphErrors -> IO CString
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_IsA" c_tgrapherrors_isa ::
                Ptr RawTGraphErrors -> IO (Ptr RawTClass)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Paint" c_tgrapherrors_paint
                :: Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_printObj"
                c_tgrapherrors_printobj :: Ptr RawTGraphErrors -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_SaveAs" c_tgrapherrors_saveas
                :: Ptr RawTGraphErrors -> CString -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_Write" c_tgrapherrors_write
                :: Ptr RawTGraphErrors -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
+               "HROOTHistTGraphErrors.h TGraphErrors_Write_" c_tgrapherrors_write_
+               :: Ptr RawTGraphErrors -> IO CInt
+
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_delete" c_tgrapherrors_delete
                :: Ptr RawTGraphErrors -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTGraphErrors.h TGraphErrors_newTGraphErrors"
                c_tgrapherrors_newtgrapherrors ::
                CInt ->
-                 (Ptr CDouble) ->
-                   (Ptr CDouble) ->
-                     (Ptr CDouble) -> (Ptr CDouble) -> IO (Ptr RawTGraphErrors)
+                 Ptr CDouble ->
+                   Ptr CDouble ->
+                     Ptr CDouble -> Ptr CDouble -> IO (Ptr RawTGraphErrors)
+
+foreign import ccall interruptible
+               "HROOTHistTGraphErrors.h TGraphErrors_SetPointError"
+               c_tgrapherrors_setpointerror ::
+               Ptr RawTGraphErrors -> CInt -> CDouble -> CDouble -> IO ()
diff --git a/src/HROOT/Hist/TGraphErrors/Implementation.hs b/src/HROOT/Hist/TGraphErrors/Implementation.hs
--- a/src/HROOT/Hist/TGraphErrors/Implementation.hs
+++ b/src/HROOT/Hist/TGraphErrors/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TGraphErrors.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TGraphErrors.RawType
 import HROOT.Hist.TGraphErrors.FFI
 import HROOT.Hist.TGraphErrors.Interface
 import HROOT.Hist.TGraphErrors.Cast
+import HROOT.Hist.TGraphErrors.RawType
+import HROOT.Hist.TGraphErrors.Cast
+import HROOT.Hist.TGraphErrors.Interface
 import HROOT.Hist.TF1.RawType
 import HROOT.Hist.TF1.Cast
 import HROOT.Hist.TF1.Interface
@@ -42,13 +51,14 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITGraphErrors TGraphErrors
+instance () => ITGraphErrors (TGraphErrors) where
+        setPointError = xform3 c_tgrapherrors_setpointerror
 
-instance ITGraph TGraphErrors where
+instance () => ITGraph (TGraphErrors) where
         apply = xform1 c_tgrapherrors_apply
         chisquare = xform1 c_tgrapherrors_chisquare
         drawGraph = xform4 c_tgrapherrors_drawgraph
@@ -83,12 +93,12 @@
         set = xform1 c_tgrapherrors_set
         setPoint = xform3 c_tgrapherrors_setpoint
 
-instance ITNamed TGraphErrors where
+instance () => ITNamed (TGraphErrors) where
         setName = xform1 c_tgrapherrors_setname
         setNameTitle = xform2 c_tgrapherrors_setnametitle
         setTitle = xform1 c_tgrapherrors_settitle
 
-instance ITAttLine TGraphErrors where
+instance () => ITAttLine (TGraphErrors) where
         getLineColor = xform0 c_tgrapherrors_getlinecolor
         getLineStyle = xform0 c_tgrapherrors_getlinestyle
         getLineWidth = xform0 c_tgrapherrors_getlinewidth
@@ -98,11 +108,11 @@
         setLineStyle = xform1 c_tgrapherrors_setlinestyle
         setLineWidth = xform1 c_tgrapherrors_setlinewidth
 
-instance ITAttFill TGraphErrors where
+instance () => ITAttFill (TGraphErrors) where
         setFillColor = xform1 c_tgrapherrors_setfillcolor
         setFillStyle = xform1 c_tgrapherrors_setfillstyle
 
-instance ITAttMarker TGraphErrors where
+instance () => ITAttMarker (TGraphErrors) where
         getMarkerColor = xform0 c_tgrapherrors_getmarkercolor
         getMarkerStyle = xform0 c_tgrapherrors_getmarkerstyle
         getMarkerSize = xform0 c_tgrapherrors_getmarkersize
@@ -112,7 +122,8 @@
         setMarkerStyle = xform1 c_tgrapherrors_setmarkerstyle
         setMarkerSize = xform1 c_tgrapherrors_setmarkersize
 
-instance ITObject TGraphErrors where
+instance () => ITObject (TGraphErrors) where
+        clear = xform1 c_tgrapherrors_clear
         draw = xform1 c_tgrapherrors_draw
         findObject = xform1 c_tgrapherrors_findobject
         getName = xform0 c_tgrapherrors_getname
@@ -121,12 +132,14 @@
         printObj = xform1 c_tgrapherrors_printobj
         saveAs = xform2 c_tgrapherrors_saveas
         write = xform3 c_tgrapherrors_write
+        write_ = xform0 c_tgrapherrors_write_
 
-instance IDeletable TGraphErrors where
+instance () => IDeletable (TGraphErrors) where
         delete = xform0 c_tgrapherrors_delete
 
 newTGraphErrors ::
+                  () =>
                   CInt ->
-                    (Ptr CDouble) ->
-                      (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> IO TGraphErrors
+                    Ptr CDouble ->
+                      Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO TGraphErrors
 newTGraphErrors = xform4 c_tgrapherrors_newtgrapherrors
diff --git a/src/HROOT/Hist/TGraphErrors/Interface.hs b/src/HROOT/Hist/TGraphErrors/Interface.hs
--- a/src/HROOT/Hist/TGraphErrors/Interface.hs
+++ b/src/HROOT/Hist/TGraphErrors/Interface.hs
@@ -4,13 +4,15 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TGraphErrors.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TGraphErrors.RawType
 import HROOT.Hist.TGraph.Interface
 
-class ITGraph a => ITGraphErrors a
+class (ITGraph a) => ITGraphErrors a where
+        setPointError :: () => a -> CInt -> CDouble -> CDouble -> IO ()
 
 upcastTGraphErrors ::
                    forall a . (FPtr a, ITGraphErrors a) => a -> TGraphErrors
diff --git a/src/HROOT/Hist/TGraphErrors/RawType.hs b/src/HROOT/Hist/TGraphErrors/RawType.hs
--- a/src/HROOT/Hist/TGraphErrors/RawType.hs
+++ b/src/HROOT/Hist/TGraphErrors/RawType.hs
@@ -8,9 +8,9 @@
 data RawTGraphErrors
 
 newtype TGraphErrors = TGraphErrors (Ptr RawTGraphErrors)
-                     deriving (Eq, Ord, Show)
+                         deriving (Eq, Ord, Show)
 
-instance FPtr TGraphErrors where
+instance () => FPtr (TGraphErrors) where
         type Raw TGraphErrors = RawTGraphErrors
         get_fptr (TGraphErrors ptr) = ptr
         cast_fptr_to_obj = TGraphErrors
diff --git a/src/HROOT/Hist/TH.hs b/src/HROOT/Hist/TH.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TH.hs
@@ -0,0 +1,12 @@
+{-# LANGUAGE FlexibleContexts, FlexibleInstances,
+  ForeignFunctionInterface, InterruptibleFFI, TemplateHaskell #-}
+module HROOT.Hist.TH () where
+import Data.Char
+import Data.List
+import Data.Monoid
+import Foreign.C.Types
+import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
diff --git a/src/HROOT/Hist/TH1.hs b/src/HROOT/Hist/TH1.hs
--- a/src/HROOT/Hist/TH1.hs
+++ b/src/HROOT/Hist/TH1.hs
@@ -1,10 +1,10 @@
 module HROOT.Hist.TH1
-       (TH1(..), ITH1(..), upcastTH1, downcastTH1, tH1GetAsymmetry,
-        tH1GetBufferLength, tH1GetBufferSize, tH1GetDirectory,
-        tH1IsBinOverflow, tH1IsBinUnderflow, tH1UseCurrentStyle,
-        tH1GetDefaultBufferSize, tH1GetDefaultSumw2,
-        tH1SetDefaultBufferSize, tH1SetDefaultSumw2, tH1SmoothArray,
-        tH1StatOverflows)
+       (TH1(..), ITH1(..), upcastTH1, downcastTH1, tH1_GetAsymmetry,
+        tH1_GetBufferLength, tH1_GetBufferSize, tH1_GetDirectory,
+        tH1_GetXaxis, tH1_GetYaxis, tH1_GetZaxis, tH1_IsBinOverflow,
+        tH1_IsBinUnderflow, tH1_UseCurrentStyle, tH1_GetDefaultBufferSize,
+        tH1_GetDefaultSumw2, tH1_SetDefaultBufferSize, tH1_SetDefaultSumw2,
+        tH1_SmoothArray, tH1_StatOverflows)
        where
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH1.Interface
diff --git a/src/HROOT/Hist/TH1/Cast.hs b/src/HROOT/Hist/TH1/Cast.hs
--- a/src/HROOT/Hist/TH1/Cast.hs
+++ b/src/HROOT/Hist/TH1/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH1.Interface
 
-instance (ITH1 a, FPtr a) => Castable a (Ptr RawTH1) where
+instance (ITH1 a, FPtr a) => Castable (a) (Ptr RawTH1) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1 (Ptr RawTH1) where
+instance () => Castable (TH1) (Ptr RawTH1) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1/FFI.hsc b/src/HROOT/Hist/TH1/FFI.hsc
--- a/src/HROOT/Hist/TH1/FFI.hsc
+++ b/src/HROOT/Hist/TH1/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1.RawType
+import HROOT.Hist.TH1.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 import HROOT.Core.TDirectory.RawType
@@ -10,559 +13,643 @@
 import HROOT.Core.TArrayD.RawType
 import HROOT.Hist.TAxis.RawType
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetName"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetName"
                c_th1_setname :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetNameTitle"
-               c_th1_setnametitle :: Ptr RawTH1 -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetNameTitle" c_th1_setnametitle ::
+               Ptr RawTH1 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetTitle"
                c_th1_settitle :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetLineColor"
-               c_th1_getlinecolor :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetLineColor" c_th1_getlinecolor ::
+               Ptr RawTH1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetLineStyle"
-               c_th1_getlinestyle :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetLineStyle" c_th1_getlinestyle ::
+               Ptr RawTH1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetLineWidth"
-               c_th1_getlinewidth :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetLineWidth" c_th1_getlinewidth ::
+               Ptr RawTH1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_ResetAttLine"
-               c_th1_resetattline :: Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_ResetAttLine" c_th1_resetattline ::
+               Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetLineAttributes"
-               c_th1_setlineattributes :: Ptr RawTH1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetLineAttributes" c_th1_setlineattributes ::
+               Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetLineColor"
-               c_th1_setlinecolor :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetLineColor" c_th1_setlinecolor ::
+               Ptr RawTH1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetLineStyle"
-               c_th1_setlinestyle :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetLineStyle" c_th1_setlinestyle ::
+               Ptr RawTH1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetLineWidth"
-               c_th1_setlinewidth :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetLineWidth" c_th1_setlinewidth ::
+               Ptr RawTH1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetFillColor"
-               c_th1_setfillcolor :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetFillColor" c_th1_setfillcolor ::
+               Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetFillStyle"
-               c_th1_setfillstyle :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetFillStyle" c_th1_setfillstyle ::
+               Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMarkerColor"
-               c_th1_getmarkercolor :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMarkerColor" c_th1_getmarkercolor ::
+               Ptr RawTH1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMarkerStyle"
-               c_th1_getmarkerstyle :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMarkerStyle" c_th1_getmarkerstyle ::
+               Ptr RawTH1 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMarkerSize"
-               c_th1_getmarkersize :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMarkerSize" c_th1_getmarkersize ::
+               Ptr RawTH1 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_ResetAttMarker"
-               c_th1_resetattmarker :: Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_ResetAttMarker" c_th1_resetattmarker ::
+               Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetMarkerAttributes"
-               c_th1_setmarkerattributes :: Ptr RawTH1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetMarkerAttributes" c_th1_setmarkerattributes
+               :: Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetMarkerColor"
-               c_th1_setmarkercolor :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetMarkerColor" c_th1_setmarkercolor ::
+               Ptr RawTH1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetMarkerStyle"
-               c_th1_setmarkerstyle :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetMarkerStyle" c_th1_setmarkerstyle ::
+               Ptr RawTH1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetMarkerSize"
-               c_th1_setmarkersize :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetMarkerSize" c_th1_setmarkersize ::
+               Ptr RawTH1 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Draw" c_th1_draw ::
-               Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Clear"
+               c_th1_clear :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FindObject"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Draw"
+               c_th1_draw :: Ptr RawTH1 -> CString -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1.h TH1_FindObject"
                c_th1_findobject :: Ptr RawTH1 -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetName"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetName"
                c_th1_getname :: Ptr RawTH1 -> IO CString
 
-foreign import ccall safe "HROOTHistTH1.h TH1_IsA" c_th1_isa ::
-               Ptr RawTH1 -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1.h TH1_IsA"
+               c_th1_isa :: Ptr RawTH1 -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Paint" c_th1_paint ::
-               Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Paint"
+               c_th1_paint :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_printObj"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_printObj"
                c_th1_printobj :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SaveAs" c_th1_saveas
-               :: Ptr RawTH1 -> CString -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SaveAs"
+               c_th1_saveas :: Ptr RawTH1 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Write" c_th1_write ::
-               Ptr RawTH1 -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Write"
+               c_th1_write :: Ptr RawTH1 -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_delete" c_th1_delete
-               :: Ptr RawTH1 -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Write_"
+               c_th1_write_ :: Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Add" c_th1_add ::
-               Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_delete"
+               c_th1_delete :: Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_AddBinContent"
-               c_th1_addbincontent :: Ptr RawTH1 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Add"
+               c_th1_add :: Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Chi2Test"
-               c_th1_chi2test ::
-               Ptr RawTH1 -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_AddBinContent" c_th1_addbincontent ::
+               Ptr RawTH1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_ComputeIntegral"
-               c_th1_computeintegral :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Chi2Test"
+               c_th1_chi2test ::
+               Ptr RawTH1 -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_DirectoryAutoAdd"
-               c_th1_directoryautoadd :: Ptr RawTH1 -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_DirectoryAutoAdd" c_th1_directoryautoadd ::
+               Ptr RawTH1 -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Divide" c_th1_divide
-               ::
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Divide"
+               c_th1_divide ::
                Ptr RawTH1 ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_drawCopyTH1"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_drawCopyTH1"
                c_th1_drawcopyth1 :: Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_DrawNormalized"
-               c_th1_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_DrawNormalized" c_th1_drawnormalized ::
                Ptr RawTH1 -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_drawPanelTH1"
-               c_th1_drawpanelth1 :: Ptr RawTH1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_drawPanelTH1" c_th1_drawpanelth1 ::
+               Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_BufferEmpty"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_BufferEmpty"
                c_th1_bufferempty :: Ptr RawTH1 -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_evalF" c_th1_evalf ::
-               Ptr RawTH1 -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_evalF"
+               c_th1_evalf :: Ptr RawTH1 -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FFT" c_th1_fft ::
-               Ptr RawTH1 -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1.h TH1_FFT"
+               c_th1_fft :: Ptr RawTH1 -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_fill1" c_th1_fill1 ::
-               Ptr RawTH1 -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1.h TH1_fill1"
+               c_th1_fill1 :: Ptr RawTH1 -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_fill1w" c_th1_fill1w
-               :: Ptr RawTH1 -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1.h TH1_fill1w"
+               c_th1_fill1w :: Ptr RawTH1 -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_fillN1" c_th1_filln1
-               ::
-               Ptr RawTH1 ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_fillN1"
+               c_th1_filln1 ::
+               Ptr RawTH1 -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FillRandom"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_FillRandom"
                c_th1_fillrandom :: Ptr RawTH1 -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FindBin"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_FindBin"
                c_th1_findbin ::
                Ptr RawTH1 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FindFixBin"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_FindFixBin"
                c_th1_findfixbin ::
                Ptr RawTH1 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FindFirstBinAbove"
-               c_th1_findfirstbinabove :: Ptr RawTH1 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_FindFirstBinAbove" c_th1_findfirstbinabove ::
+               Ptr RawTH1 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FindLastBinAbove"
-               c_th1_findlastbinabove :: Ptr RawTH1 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_FindLastBinAbove" c_th1_findlastbinabove ::
+               Ptr RawTH1 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Fit" c_th1_fit ::
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Fit"
+               c_th1_fit ::
                Ptr RawTH1 ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_FitPanelTH1"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_FitPanelTH1"
                c_th1_fitpanelth1 :: Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1GetAsymmetry"
-               c_th1_th1getasymmetry ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetAsymmetry" c_th1_th1_getasymmetry ::
                Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1GetBufferLength"
-               c_th1_th1getbufferlength :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetBufferLength" c_th1_th1_getbufferlength
+               :: Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1GetBufferSize"
-               c_th1_th1getbuffersize :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetBufferSize" c_th1_th1_getbuffersize ::
+               Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe
-               "HROOTHistTH1.h TH1_tH1GetDefaultBufferSize"
-               c_th1_th1getdefaultbuffersize :: IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetDefaultBufferSize"
+               c_th1_th1_getdefaultbuffersize :: IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getNdivisionA"
-               c_th1_getndivisiona :: Ptr RawTH1 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getNdivisionA" c_th1_getndivisiona ::
+               Ptr RawTH1 -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getAxisColorA"
-               c_th1_getaxiscolora :: Ptr RawTH1 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getAxisColorA" c_th1_getaxiscolora ::
+               Ptr RawTH1 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getLabelColorA"
-               c_th1_getlabelcolora :: Ptr RawTH1 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getLabelColorA" c_th1_getlabelcolora ::
+               Ptr RawTH1 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getLabelFontA"
-               c_th1_getlabelfonta :: Ptr RawTH1 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getLabelFontA" c_th1_getlabelfonta ::
+               Ptr RawTH1 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getLabelOffsetA"
-               c_th1_getlabeloffseta :: Ptr RawTH1 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getLabelOffsetA" c_th1_getlabeloffseta ::
+               Ptr RawTH1 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getLabelSizeA"
-               c_th1_getlabelsizea :: Ptr RawTH1 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getLabelSizeA" c_th1_getlabelsizea ::
+               Ptr RawTH1 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getTitleFontA"
-               c_th1_gettitlefonta :: Ptr RawTH1 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getTitleFontA" c_th1_gettitlefonta ::
+               Ptr RawTH1 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getTitleOffsetA"
-               c_th1_gettitleoffseta :: Ptr RawTH1 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getTitleOffsetA" c_th1_gettitleoffseta ::
+               Ptr RawTH1 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getTitleSizeA"
-               c_th1_gettitlesizea :: Ptr RawTH1 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getTitleSizeA" c_th1_gettitlesizea ::
+               Ptr RawTH1 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getTickLengthA"
-               c_th1_getticklengtha :: Ptr RawTH1 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getTickLengthA" c_th1_getticklengtha ::
+               Ptr RawTH1 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBarOffset"
-               c_th1_getbaroffset :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBarOffset" c_th1_getbaroffset ::
+               Ptr RawTH1 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBarWidth"
-               c_th1_getbarwidth :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetBarWidth"
+               c_th1_getbarwidth :: Ptr RawTH1 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetContour"
-               c_th1_getcontour :: Ptr RawTH1 -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetContour"
+               c_th1_getcontour :: Ptr RawTH1 -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetContourLevel"
-               c_th1_getcontourlevel :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetContourLevel" c_th1_getcontourlevel ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetContourLevelPad"
-               c_th1_getcontourlevelpad :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetContourLevelPad" c_th1_getcontourlevelpad ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBin" c_th1_getbin
-               :: Ptr RawTH1 -> CInt -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetBin"
+               c_th1_getbin :: Ptr RawTH1 -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinCenter"
-               c_th1_getbincenter :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinCenter" c_th1_getbincenter ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinContent1"
-               c_th1_getbincontent1 :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinContent1" c_th1_getbincontent1 ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinContent2"
-               c_th1_getbincontent2 :: Ptr RawTH1 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinContent2" c_th1_getbincontent2 ::
+               Ptr RawTH1 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinContent3"
-               c_th1_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinContent3" c_th1_getbincontent3 ::
                Ptr RawTH1 -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinError1"
-               c_th1_getbinerror1 :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinError1" c_th1_getbinerror1 ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinError2"
-               c_th1_getbinerror2 :: Ptr RawTH1 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinError2" c_th1_getbinerror2 ::
+               Ptr RawTH1 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinError3"
-               c_th1_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinError3" c_th1_getbinerror3 ::
                Ptr RawTH1 -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinLowEdge"
-               c_th1_getbinlowedge :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetBinLowEdge" c_th1_getbinlowedge ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetBinWidth"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetBinWidth"
                c_th1_getbinwidth :: Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetCellContent"
-               c_th1_getcellcontent :: Ptr RawTH1 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetCellContent" c_th1_getcellcontent ::
+               Ptr RawTH1 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetCellError"
-               c_th1_getcellerror :: Ptr RawTH1 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetCellError" c_th1_getcellerror ::
+               Ptr RawTH1 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1GetDefaultSumw2"
-               c_th1_th1getdefaultsumw2 :: IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetDefaultSumw2" c_th1_th1_getdefaultsumw2
+               :: IO CBool
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1GetDirectory"
-               c_th1_th1getdirectory :: Ptr RawTH1 -> IO (Ptr RawTDirectory)
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetDirectory" c_th1_th1_getdirectory ::
+               Ptr RawTH1 -> IO (Ptr RawTDirectory)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetEntries"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetEntries"
                c_th1_getentries :: Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetEffectiveEntries"
-               c_th1_geteffectiveentries :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetEffectiveEntries" c_th1_geteffectiveentries
+               :: Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetFunction"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetFunction"
                c_th1_getfunction :: Ptr RawTH1 -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetDimension"
-               c_th1_getdimension :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetDimension" c_th1_getdimension ::
+               Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetKurtosis"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetKurtosis"
                c_th1_getkurtosis :: Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetLowEdge"
-               c_th1_getlowedge :: Ptr RawTH1 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetLowEdge"
+               c_th1_getlowedge :: Ptr RawTH1 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getMaximumTH1"
-               c_th1_getmaximumth1 :: Ptr RawTH1 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getMaximumTH1" c_th1_getmaximumth1 ::
+               Ptr RawTH1 -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMaximumBin"
-               c_th1_getmaximumbin :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMaximumBin" c_th1_getmaximumbin ::
+               Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMaximumStored"
-               c_th1_getmaximumstored :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMaximumStored" c_th1_getmaximumstored ::
+               Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getMinimumTH1"
-               c_th1_getminimumth1 :: Ptr RawTH1 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getMinimumTH1" c_th1_getminimumth1 ::
+               Ptr RawTH1 -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMinimumBin"
-               c_th1_getminimumbin :: Ptr RawTH1 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMinimumBin" c_th1_getminimumbin ::
+               Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMinimumStored"
-               c_th1_getminimumstored :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMinimumStored" c_th1_getminimumstored ::
+               Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMean"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetMean"
                c_th1_getmean :: Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetMeanError"
-               c_th1_getmeanerror :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetMeanError" c_th1_getmeanerror ::
+               Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetNbinsX"
                c_th1_getnbinsx :: Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetNbinsY"
                c_th1_getnbinsy :: Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetNbinsZ"
                c_th1_getnbinsz :: Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_getQuantilesTH1"
-               c_th1_getquantilesth1 ::
-               Ptr RawTH1 -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_getQuantilesTH1" c_th1_getquantilesth1 ::
+               Ptr RawTH1 -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetRandom"
                c_th1_getrandom :: Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetStats"
-               c_th1_getstats :: Ptr RawTH1 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetStats"
+               c_th1_getstats :: Ptr RawTH1 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetSumOfWeights"
-               c_th1_getsumofweights :: Ptr RawTH1 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_GetSumOfWeights" c_th1_getsumofweights ::
+               Ptr RawTH1 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetSumw2"
                c_th1_getsumw2 :: Ptr RawTH1 -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetSumw2N"
                c_th1_getsumw2n :: Ptr RawTH1 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetRMS" c_th1_getrms
-               :: Ptr RawTH1 -> CInt -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetRMS"
+               c_th1_getrms :: Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetRMSError"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetRMSError"
                c_th1_getrmserror :: Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_GetSkewness"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_GetSkewness"
                c_th1_getskewness :: Ptr RawTH1 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_integral1"
-               c_th1_integral1 ::
-               Ptr RawTH1 -> CInt -> CInt -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetXaxis" c_th1_th1_getxaxis ::
+               Ptr RawTH1 -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_interpolate1"
-               c_th1_interpolate1 :: Ptr RawTH1 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetYaxis" c_th1_th1_getyaxis ::
+               Ptr RawTH1 -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_interpolate2"
-               c_th1_interpolate2 ::
-               Ptr RawTH1 -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_GetZaxis" c_th1_th1_getzaxis ::
+               Ptr RawTH1 -> IO (Ptr RawTAxis)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_interpolate3"
-               c_th1_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_interpolate3" c_th1_interpolate3 ::
                Ptr RawTH1 -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1IsBinOverflow"
-               c_th1_th1isbinoverflow :: Ptr RawTH1 -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_IsBinOverflow" c_th1_th1_isbinoverflow ::
+               Ptr RawTH1 -> CInt -> IO CBool
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1IsBinUnderflow"
-               c_th1_th1isbinunderflow :: Ptr RawTH1 -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_IsBinUnderflow" c_th1_th1_isbinunderflow ::
+               Ptr RawTH1 -> CInt -> IO CBool
 
-foreign import ccall safe "HROOTHistTH1.h TH1_KolmogorovTest"
-               c_th1_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_KolmogorovTest" c_th1_kolmogorovtest ::
                Ptr RawTH1 -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1.h TH1_LabelsDeflate"
-               c_th1_labelsdeflate :: Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_LabelsDeflate" c_th1_labelsdeflate ::
+               Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_LabelsInflate"
-               c_th1_labelsinflate :: Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_LabelsInflate" c_th1_labelsinflate ::
+               Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_LabelsOption"
-               c_th1_labelsoption :: Ptr RawTH1 -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_LabelsOption" c_th1_labelsoption ::
+               Ptr RawTH1 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_multiflyF"
                c_th1_multiflyf :: Ptr RawTH1 -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Multiply"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Multiply"
                c_th1_multiply ::
                Ptr RawTH1 ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_PutStats"
-               c_th1_putstats :: Ptr RawTH1 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_PutStats"
+               c_th1_putstats :: Ptr RawTH1 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Rebin" c_th1_rebin ::
-               Ptr RawTH1 -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Rebin"
+               c_th1_rebin ::
+               Ptr RawTH1 -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_RebinAxis"
                c_th1_rebinaxis :: Ptr RawTH1 -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Rebuild"
                c_th1_rebuild :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_RecursiveRemove"
-               c_th1_recursiveremove :: Ptr RawTH1 -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_RecursiveRemove" c_th1_recursiveremove ::
+               Ptr RawTH1 -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Reset" c_th1_reset ::
-               Ptr RawTH1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Reset"
+               c_th1_reset :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_ResetStats"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_ResetStats"
                c_th1_resetstats :: Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Scale" c_th1_scale ::
-               Ptr RawTH1 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Scale"
+               c_th1_scale :: Ptr RawTH1 -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setAxisColorA"
-               c_th1_setaxiscolora :: Ptr RawTH1 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setAxisColorA" c_th1_setaxiscolora ::
+               Ptr RawTH1 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetAxisRange"
-               c_th1_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetAxisRange" c_th1_setaxisrange ::
                Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetBarOffset"
-               c_th1_setbaroffset :: Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetBarOffset" c_th1_setbaroffset ::
+               Ptr RawTH1 -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetBarWidth"
-               c_th1_setbarwidth :: Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetBarWidth"
+               c_th1_setbarwidth :: Ptr RawTH1 -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBinContent1"
-               c_th1_setbincontent1 :: Ptr RawTH1 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setBinContent1" c_th1_setbincontent1 ::
+               Ptr RawTH1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBinContent2"
-               c_th1_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setBinContent2" c_th1_setbincontent2 ::
                Ptr RawTH1 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBinContent3"
-               c_th1_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setBinContent3" c_th1_setbincontent3 ::
                Ptr RawTH1 -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBinError1"
-               c_th1_setbinerror1 :: Ptr RawTH1 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setBinError1" c_th1_setbinerror1 ::
+               Ptr RawTH1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBinError2"
-               c_th1_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setBinError2" c_th1_setbinerror2 ::
                Ptr RawTH1 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBinError3"
-               c_th1_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setBinError3" c_th1_setbinerror3 ::
                Ptr RawTH1 -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBins1"
-               c_th1_setbins1 :: Ptr RawTH1 -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_setBins1"
+               c_th1_setbins1 :: Ptr RawTH1 -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBins2"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_setBins2"
                c_th1_setbins2 ::
-               Ptr RawTH1 ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1 -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setBins3"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_setBins3"
                c_th1_setbins3 ::
                Ptr RawTH1 ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetBinsLength"
-               c_th1_setbinslength :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetBinsLength" c_th1_setbinslength ::
+               Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetBuffer"
                c_th1_setbuffer :: Ptr RawTH1 -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetCellContent"
-               c_th1_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetCellContent" c_th1_setcellcontent ::
                Ptr RawTH1 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetContent"
-               c_th1_setcontent :: Ptr RawTH1 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetContent"
+               c_th1_setcontent :: Ptr RawTH1 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetContour"
-               c_th1_setcontour :: Ptr RawTH1 -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetContour"
+               c_th1_setcontour :: Ptr RawTH1 -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetContourLevel"
-               c_th1_setcontourlevel :: Ptr RawTH1 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetContourLevel" c_th1_setcontourlevel ::
+               Ptr RawTH1 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe
-               "HROOTHistTH1.h TH1_tH1SetDefaultBufferSize"
-               c_th1_th1setdefaultbuffersize :: CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_SetDefaultBufferSize"
+               c_th1_th1_setdefaultbuffersize :: CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1SetDefaultSumw2"
-               c_th1_th1setdefaultsumw2 :: CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_SetDefaultSumw2" c_th1_th1_setdefaultsumw2
+               :: CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetDirectory"
-               c_th1_setdirectory :: Ptr RawTH1 -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetDirectory" c_th1_setdirectory ::
+               Ptr RawTH1 -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetEntries"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetEntries"
                c_th1_setentries :: Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetError"
-               c_th1_seterror :: Ptr RawTH1 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetError"
+               c_th1_seterror :: Ptr RawTH1 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setLabelColorA"
-               c_th1_setlabelcolora :: Ptr RawTH1 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setLabelColorA" c_th1_setlabelcolora ::
+               Ptr RawTH1 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setLabelSizeA"
-               c_th1_setlabelsizea :: Ptr RawTH1 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setLabelSizeA" c_th1_setlabelsizea ::
+               Ptr RawTH1 -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setLabelFontA"
-               c_th1_setlabelfonta :: Ptr RawTH1 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setLabelFontA" c_th1_setlabelfonta ::
+               Ptr RawTH1 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_setLabelOffsetA"
-               c_th1_setlabeloffseta :: Ptr RawTH1 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_setLabelOffsetA" c_th1_setlabeloffseta ::
+               Ptr RawTH1 -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetMaximum"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetMaximum"
                c_th1_setmaximum :: Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetMinimum"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetMinimum"
                c_th1_setminimum :: Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetNormFactor"
-               c_th1_setnormfactor :: Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_SetNormFactor" c_th1_setnormfactor ::
+               Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetStats"
-               c_th1_setstats :: Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetStats"
+               c_th1_setstats :: Ptr RawTH1 -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetOption"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetOption"
                c_th1_setoption :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetXTitle"
                c_th1_setxtitle :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetYTitle"
                c_th1_setytitle :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_SetZTitle"
                c_th1_setztitle :: Ptr RawTH1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_ShowBackground"
-               c_th1_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_ShowBackground" c_th1_showbackground ::
                Ptr RawTH1 -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1.h TH1_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1.h TH1_ShowPeaks"
                c_th1_showpeaks ::
                Ptr RawTH1 -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Smooth" c_th1_smooth
-               :: Ptr RawTH1 -> CInt -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Smooth"
+               c_th1_smooth :: Ptr RawTH1 -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1SmoothArray"
-               c_th1_th1smootharray :: CInt -> (Ptr CDouble) -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_SmoothArray" c_th1_th1_smootharray ::
+               CInt -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1StatOverflows"
-               c_th1_th1statoverflows :: CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_StatOverflows" c_th1_th1_statoverflows ::
+               CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_Sumw2" c_th1_sumw2 ::
-               Ptr RawTH1 -> IO ()
+foreign import ccall interruptible "HROOTHistTH1.h TH1_Sumw2"
+               c_th1_sumw2 :: Ptr RawTH1 -> IO ()
 
-foreign import ccall safe "HROOTHistTH1.h TH1_tH1UseCurrentStyle"
-               c_th1_th1usecurrentstyle :: Ptr RawTH1 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1.h TH1_tH1_UseCurrentStyle" c_th1_th1_usecurrentstyle
+               :: Ptr RawTH1 -> IO ()
diff --git a/src/HROOT/Hist/TH1/Implementation.hs b/src/HROOT/Hist/TH1/Implementation.hs
--- a/src/HROOT/Hist/TH1/Implementation.hs
+++ b/src/HROOT/Hist/TH1/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH1.FFI
 import HROOT.Hist.TH1.Interface
 import HROOT.Hist.TH1.Cast
+import HROOT.Hist.TH1.RawType
+import HROOT.Hist.TH1.Cast
+import HROOT.Hist.TH1.Interface
 import HROOT.Core.TClass.RawType
 import HROOT.Core.TClass.Cast
 import HROOT.Core.TClass.Interface
@@ -42,15 +51,14 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITH1 TH1 where
+instance () => ITH1 (TH1) where
         add = xform2 c_th1_add
         addBinContent = xform2 c_th1_addbincontent
         chi2Test = xform3 c_th1_chi2test
-        computeIntegral = xform0 c_th1_computeintegral
         directoryAutoAdd = xform1 c_th1_directoryautoadd
         divide = xform5 c_th1_divide
         drawCopyTH1 = xform1 c_th1_drawcopyth1
@@ -122,9 +130,6 @@
         getRMS = xform1 c_th1_getrms
         getRMSError = xform1 c_th1_getrmserror
         getSkewness = xform1 c_th1_getskewness
-        integral1 = xform3 c_th1_integral1
-        interpolate1 = xform1 c_th1_interpolate1
-        interpolate2 = xform2 c_th1_interpolate2
         interpolate3 = xform3 c_th1_interpolate3
         kolmogorovTest = xform2 c_th1_kolmogorovtest
         labelsDeflate = xform1 c_th1_labelsdeflate
@@ -179,12 +184,12 @@
         smooth = xform2 c_th1_smooth
         sumw2 = xform0 c_th1_sumw2
 
-instance ITNamed TH1 where
+instance () => ITNamed (TH1) where
         setName = xform1 c_th1_setname
         setNameTitle = xform2 c_th1_setnametitle
         setTitle = xform1 c_th1_settitle
 
-instance ITAttLine TH1 where
+instance () => ITAttLine (TH1) where
         getLineColor = xform0 c_th1_getlinecolor
         getLineStyle = xform0 c_th1_getlinestyle
         getLineWidth = xform0 c_th1_getlinewidth
@@ -194,11 +199,11 @@
         setLineStyle = xform1 c_th1_setlinestyle
         setLineWidth = xform1 c_th1_setlinewidth
 
-instance ITAttFill TH1 where
+instance () => ITAttFill (TH1) where
         setFillColor = xform1 c_th1_setfillcolor
         setFillStyle = xform1 c_th1_setfillstyle
 
-instance ITAttMarker TH1 where
+instance () => ITAttMarker (TH1) where
         getMarkerColor = xform0 c_th1_getmarkercolor
         getMarkerStyle = xform0 c_th1_getmarkerstyle
         getMarkerSize = xform0 c_th1_getmarkersize
@@ -208,7 +213,8 @@
         setMarkerStyle = xform1 c_th1_setmarkerstyle
         setMarkerSize = xform1 c_th1_setmarkersize
 
-instance ITObject TH1 where
+instance () => ITObject (TH1) where
+        clear = xform1 c_th1_clear
         draw = xform1 c_th1_draw
         findObject = xform1 c_th1_findobject
         getName = xform0 c_th1_getname
@@ -217,46 +223,56 @@
         printObj = xform1 c_th1_printobj
         saveAs = xform2 c_th1_saveas
         write = xform3 c_th1_write
+        write_ = xform0 c_th1_write_
 
-instance IDeletable TH1 where
+instance () => IDeletable (TH1) where
         delete = xform0 c_th1_delete
 
-tH1GetAsymmetry ::
-                  (ITH1 c0, FPtr c0) => TH1 -> c0 -> CDouble -> CDouble -> IO TH1
-tH1GetAsymmetry = xform3 c_th1_th1getasymmetry
+tH1_GetAsymmetry ::
+                   (ITH1 c0, FPtr c0) => TH1 -> c0 -> CDouble -> CDouble -> IO TH1
+tH1_GetAsymmetry = xform3 c_th1_th1_getasymmetry
 
-tH1GetBufferLength :: TH1 -> IO CInt
-tH1GetBufferLength = xform0 c_th1_th1getbufferlength
+tH1_GetBufferLength :: () => TH1 -> IO CInt
+tH1_GetBufferLength = xform0 c_th1_th1_getbufferlength
 
-tH1GetBufferSize :: TH1 -> IO CInt
-tH1GetBufferSize = xform0 c_th1_th1getbuffersize
+tH1_GetBufferSize :: () => TH1 -> IO CInt
+tH1_GetBufferSize = xform0 c_th1_th1_getbuffersize
 
-tH1GetDirectory :: TH1 -> IO TDirectory
-tH1GetDirectory = xform0 c_th1_th1getdirectory
+tH1_GetDirectory :: () => TH1 -> IO TDirectory
+tH1_GetDirectory = xform0 c_th1_th1_getdirectory
 
-tH1IsBinOverflow :: TH1 -> CInt -> IO CInt
-tH1IsBinOverflow = xform1 c_th1_th1isbinoverflow
+tH1_GetXaxis :: () => TH1 -> IO TAxis
+tH1_GetXaxis = xform0 c_th1_th1_getxaxis
 
-tH1IsBinUnderflow :: TH1 -> CInt -> IO CInt
-tH1IsBinUnderflow = xform1 c_th1_th1isbinunderflow
+tH1_GetYaxis :: () => TH1 -> IO TAxis
+tH1_GetYaxis = xform0 c_th1_th1_getyaxis
 
-tH1UseCurrentStyle :: TH1 -> IO ()
-tH1UseCurrentStyle = xform0 c_th1_th1usecurrentstyle
+tH1_GetZaxis :: () => TH1 -> IO TAxis
+tH1_GetZaxis = xform0 c_th1_th1_getzaxis
 
-tH1GetDefaultBufferSize :: IO CInt
-tH1GetDefaultBufferSize = xformnull c_th1_th1getdefaultbuffersize
+tH1_IsBinOverflow :: () => TH1 -> CInt -> IO CBool
+tH1_IsBinOverflow = xform1 c_th1_th1_isbinoverflow
 
-tH1GetDefaultSumw2 :: IO CInt
-tH1GetDefaultSumw2 = xformnull c_th1_th1getdefaultsumw2
+tH1_IsBinUnderflow :: () => TH1 -> CInt -> IO CBool
+tH1_IsBinUnderflow = xform1 c_th1_th1_isbinunderflow
 
-tH1SetDefaultBufferSize :: CInt -> IO ()
-tH1SetDefaultBufferSize = xform0 c_th1_th1setdefaultbuffersize
+tH1_UseCurrentStyle :: () => TH1 -> IO ()
+tH1_UseCurrentStyle = xform0 c_th1_th1_usecurrentstyle
 
-tH1SetDefaultSumw2 :: CInt -> IO ()
-tH1SetDefaultSumw2 = xform0 c_th1_th1setdefaultsumw2
+tH1_GetDefaultBufferSize :: () => IO CInt
+tH1_GetDefaultBufferSize = xformnull c_th1_th1_getdefaultbuffersize
 
-tH1SmoothArray :: CInt -> (Ptr CDouble) -> CInt -> IO ()
-tH1SmoothArray = xform2 c_th1_th1smootharray
+tH1_GetDefaultSumw2 :: () => IO CBool
+tH1_GetDefaultSumw2 = xformnull c_th1_th1_getdefaultsumw2
 
-tH1StatOverflows :: CInt -> IO ()
-tH1StatOverflows = xform0 c_th1_th1statoverflows
+tH1_SetDefaultBufferSize :: () => CInt -> IO ()
+tH1_SetDefaultBufferSize = xform0 c_th1_th1_setdefaultbuffersize
+
+tH1_SetDefaultSumw2 :: () => CBool -> IO ()
+tH1_SetDefaultSumw2 = xform0 c_th1_th1_setdefaultsumw2
+
+tH1_SmoothArray :: () => CInt -> Ptr CDouble -> CInt -> IO ()
+tH1_SmoothArray = xform2 c_th1_th1_smootharray
+
+tH1_StatOverflows :: () => CBool -> IO ()
+tH1_StatOverflows = xform0 c_th1_th1_statoverflows
diff --git a/src/HROOT/Hist/TH1/Interface.hs b/src/HROOT/Hist/TH1/Interface.hs
--- a/src/HROOT/Hist/TH1/Interface.hs
+++ b/src/HROOT/Hist/TH1/Interface.hs
@@ -4,11 +4,11 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TH1.RawType
-import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
 import HROOT.Core.TArrayD.RawType
 import HROOT.Core.TNamed.Interface
@@ -17,20 +17,18 @@
 import HROOT.Core.TAttMarker.Interface
 import HROOT.Core.TDirectory.Interface
 import HROOT.Core.TObject.Interface
-import {-# SOURCE #-} HROOT.Hist.TF1.Interface
-import {-# SOURCE #-} HROOT.Hist.TAxis.Interface
+import HROOT.Hist.TF1.Interface
+import HROOT.Hist.TAxis.Interface
 
-class (ITNamed a, ITAttLine a, ITAttFill a, ITAttMarker a) => ITH1
-      a where
+class (ITNamed a, ITAttLine a, ITAttFill a, ITAttMarker a) =>
+      ITH1 a where
         add :: (ITH1 c0, FPtr c0) => a -> c0 -> CDouble -> IO ()
         
-        addBinContent :: a -> CInt -> CDouble -> IO ()
+        addBinContent :: () => a -> CInt -> CDouble -> IO ()
         
         chi2Test ::
                    (Castable c1 CString, ITH1 c0, FPtr c0) =>
-                   a -> c0 -> c1 -> (Ptr CDouble) -> IO CDouble
-        
-        computeIntegral :: a -> IO CDouble
+                   a -> c0 -> c1 -> Ptr CDouble -> IO CDouble
         
         directoryAutoAdd :: (ITDirectory c0, FPtr c0) => a -> c0 -> IO ()
         
@@ -38,14 +36,14 @@
                  (Castable c2 CString, ITH1 c1, FPtr c1, ITH1 c0, FPtr c0) =>
                  a -> c0 -> c1 -> CDouble -> CDouble -> c2 -> IO ()
         
-        drawCopyTH1 :: Castable c0 CString => a -> c0 -> IO a
+        drawCopyTH1 :: (Castable c0 CString) => a -> c0 -> IO a
         
         drawNormalized ::
-                         Castable c0 CString => a -> c0 -> CDouble -> IO TH1
+                         (Castable c0 CString) => a -> c0 -> CDouble -> IO TH1
         
-        drawPanelTH1 :: a -> IO ()
+        drawPanelTH1 :: () => a -> IO ()
         
-        bufferEmpty :: a -> CInt -> IO CInt
+        bufferEmpty :: () => a -> CInt -> IO CInt
         
         evalF ::
                 (Castable c1 CString, ITF1 c0, FPtr c0) => a -> c0 -> c1 -> IO ()
@@ -53,152 +51,146 @@
         fFT ::
               (Castable c1 CString, ITH1 c0, FPtr c0) => a -> c0 -> c1 -> IO TH1
         
-        fill1 :: a -> CDouble -> IO CInt
+        fill1 :: () => a -> CDouble -> IO CInt
         
-        fill1w :: a -> CDouble -> CDouble -> IO CInt
+        fill1w :: () => a -> CDouble -> CDouble -> IO CInt
         
         fillN1 ::
-                 a -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 () => a -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
         
         fillRandom :: (ITH1 c0, FPtr c0) => a -> c0 -> CInt -> IO ()
         
-        findBin :: a -> CDouble -> CDouble -> CDouble -> IO CInt
+        findBin :: () => a -> CDouble -> CDouble -> CDouble -> IO CInt
         
-        findFixBin :: a -> CDouble -> CDouble -> CDouble -> IO CInt
+        findFixBin :: () => a -> CDouble -> CDouble -> CDouble -> IO CInt
         
-        findFirstBinAbove :: a -> CDouble -> CInt -> IO CInt
+        findFirstBinAbove :: () => a -> CDouble -> CInt -> IO CInt
         
-        findLastBinAbove :: a -> CDouble -> CInt -> IO CInt
+        findLastBinAbove :: () => a -> CDouble -> CInt -> IO CInt
         
         fit ::
               (Castable c2 CString, Castable c1 CString, ITF1 c0, FPtr c0) =>
               a -> c0 -> c1 -> c2 -> CDouble -> CDouble -> IO ()
         
-        fitPanelTH1 :: a -> IO ()
+        fitPanelTH1 :: () => a -> IO ()
         
-        getNdivisionA :: Castable c0 CString => a -> c0 -> IO CInt
+        getNdivisionA :: (Castable c0 CString) => a -> c0 -> IO CInt
         
-        getAxisColorA :: Castable c0 CString => a -> c0 -> IO CInt
+        getAxisColorA :: (Castable c0 CString) => a -> c0 -> IO CShort
         
-        getLabelColorA :: Castable c0 CString => a -> c0 -> IO CInt
+        getLabelColorA :: (Castable c0 CString) => a -> c0 -> IO CShort
         
-        getLabelFontA :: Castable c0 CString => a -> c0 -> IO CInt
+        getLabelFontA :: (Castable c0 CString) => a -> c0 -> IO CShort
         
-        getLabelOffsetA :: Castable c0 CString => a -> c0 -> IO CDouble
+        getLabelOffsetA :: (Castable c0 CString) => a -> c0 -> IO CFloat
         
-        getLabelSizeA :: Castable c0 CString => a -> c0 -> IO CDouble
+        getLabelSizeA :: (Castable c0 CString) => a -> c0 -> IO CFloat
         
-        getTitleFontA :: Castable c0 CString => a -> c0 -> IO CInt
+        getTitleFontA :: (Castable c0 CString) => a -> c0 -> IO CShort
         
-        getTitleOffsetA :: Castable c0 CString => a -> c0 -> IO CDouble
+        getTitleOffsetA :: (Castable c0 CString) => a -> c0 -> IO CFloat
         
-        getTitleSizeA :: Castable c0 CString => a -> c0 -> IO CDouble
+        getTitleSizeA :: (Castable c0 CString) => a -> c0 -> IO CFloat
         
-        getTickLengthA :: Castable c0 CString => a -> c0 -> IO CDouble
+        getTickLengthA :: (Castable c0 CString) => a -> c0 -> IO CFloat
         
-        getBarOffset :: a -> IO CDouble
+        getBarOffset :: () => a -> IO CFloat
         
-        getBarWidth :: a -> IO CDouble
+        getBarWidth :: () => a -> IO CFloat
         
-        getContour :: a -> (Ptr CDouble) -> IO CInt
+        getContour :: () => a -> Ptr CDouble -> IO CInt
         
-        getContourLevel :: a -> CInt -> IO CDouble
+        getContourLevel :: () => a -> CInt -> IO CDouble
         
-        getContourLevelPad :: a -> CInt -> IO CDouble
+        getContourLevelPad :: () => a -> CInt -> IO CDouble
         
-        getBin :: a -> CInt -> CInt -> CInt -> IO CInt
+        getBin :: () => a -> CInt -> CInt -> CInt -> IO CInt
         
-        getBinCenter :: a -> CInt -> IO CDouble
+        getBinCenter :: () => a -> CInt -> IO CDouble
         
-        getBinContent1 :: a -> CInt -> IO CDouble
+        getBinContent1 :: () => a -> CInt -> IO CDouble
         
-        getBinContent2 :: a -> CInt -> CInt -> IO CDouble
+        getBinContent2 :: () => a -> CInt -> CInt -> IO CDouble
         
-        getBinContent3 :: a -> CInt -> CInt -> CInt -> IO CDouble
+        getBinContent3 :: () => a -> CInt -> CInt -> CInt -> IO CDouble
         
-        getBinError1 :: a -> CInt -> IO CDouble
+        getBinError1 :: () => a -> CInt -> IO CDouble
         
-        getBinError2 :: a -> CInt -> CInt -> IO CDouble
+        getBinError2 :: () => a -> CInt -> CInt -> IO CDouble
         
-        getBinError3 :: a -> CInt -> CInt -> CInt -> IO CDouble
+        getBinError3 :: () => a -> CInt -> CInt -> CInt -> IO CDouble
         
-        getBinLowEdge :: a -> CInt -> IO CDouble
+        getBinLowEdge :: () => a -> CInt -> IO CDouble
         
-        getBinWidth :: a -> CInt -> IO CDouble
+        getBinWidth :: () => a -> CInt -> IO CDouble
         
-        getCellContent :: a -> CInt -> CInt -> IO CDouble
+        getCellContent :: () => a -> CInt -> CInt -> IO CDouble
         
-        getCellError :: a -> CInt -> CInt -> IO CDouble
+        getCellError :: () => a -> CInt -> CInt -> IO CDouble
         
-        getEntries :: a -> IO CDouble
+        getEntries :: () => a -> IO CDouble
         
-        getEffectiveEntries :: a -> IO CDouble
+        getEffectiveEntries :: () => a -> IO CDouble
         
-        getFunction :: Castable c0 CString => a -> c0 -> IO TF1
+        getFunction :: (Castable c0 CString) => a -> c0 -> IO TF1
         
-        getDimension :: a -> IO CInt
+        getDimension :: () => a -> IO CInt
         
-        getKurtosis :: a -> CInt -> IO CDouble
+        getKurtosis :: () => a -> CInt -> IO CDouble
         
-        getLowEdge :: a -> (Ptr CDouble) -> IO ()
+        getLowEdge :: () => a -> Ptr CDouble -> IO ()
         
-        getMaximumTH1 :: a -> CDouble -> IO CDouble
+        getMaximumTH1 :: () => a -> CDouble -> IO CDouble
         
-        getMaximumBin :: a -> IO CInt
+        getMaximumBin :: () => a -> IO CInt
         
-        getMaximumStored :: a -> IO CDouble
+        getMaximumStored :: () => a -> IO CDouble
         
-        getMinimumTH1 :: a -> CDouble -> IO CDouble
+        getMinimumTH1 :: () => a -> CDouble -> IO CDouble
         
-        getMinimumBin :: a -> IO CInt
+        getMinimumBin :: () => a -> IO CInt
         
-        getMinimumStored :: a -> IO CDouble
+        getMinimumStored :: () => a -> IO CDouble
         
-        getMean :: a -> CInt -> IO CDouble
+        getMean :: () => a -> CInt -> IO CDouble
         
-        getMeanError :: a -> CInt -> IO CDouble
+        getMeanError :: () => a -> CInt -> IO CDouble
         
-        getNbinsX :: a -> IO CDouble
+        getNbinsX :: () => a -> IO CDouble
         
-        getNbinsY :: a -> IO CDouble
+        getNbinsY :: () => a -> IO CDouble
         
-        getNbinsZ :: a -> IO CDouble
+        getNbinsZ :: () => a -> IO CDouble
         
         getQuantilesTH1 ::
-                          a -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
-        
-        getRandom :: a -> IO CDouble
-        
-        getStats :: a -> (Ptr CDouble) -> IO ()
-        
-        getSumOfWeights :: a -> IO CDouble
+                          () => a -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
         
-        getSumw2 :: a -> IO TArrayD
+        getRandom :: () => a -> IO CDouble
         
-        getSumw2N :: a -> IO CInt
+        getStats :: () => a -> Ptr CDouble -> IO ()
         
-        getRMS :: a -> CInt -> IO CDouble
+        getSumOfWeights :: () => a -> IO CDouble
         
-        getRMSError :: a -> CInt -> IO CDouble
+        getSumw2 :: () => a -> IO TArrayD
         
-        getSkewness :: a -> CInt -> IO CDouble
+        getSumw2N :: () => a -> IO CInt
         
-        integral1 ::
-                    Castable c0 CString => a -> CInt -> CInt -> c0 -> IO CDouble
+        getRMS :: () => a -> CInt -> IO CDouble
         
-        interpolate1 :: a -> CDouble -> IO CDouble
+        getRMSError :: () => a -> CInt -> IO CDouble
         
-        interpolate2 :: a -> CDouble -> CDouble -> IO CDouble
+        getSkewness :: () => a -> CInt -> IO CDouble
         
-        interpolate3 :: a -> CDouble -> CDouble -> CDouble -> IO CDouble
+        interpolate3 ::
+                       () => a -> CDouble -> CDouble -> CDouble -> IO CDouble
         
         kolmogorovTest ::
                          (Castable c1 CString, ITH1 c0, FPtr c0) =>
                          a -> c0 -> c1 -> IO CDouble
         
-        labelsDeflate :: Castable c0 CString => a -> c0 -> IO ()
+        labelsDeflate :: (Castable c0 CString) => a -> c0 -> IO ()
         
-        labelsInflate :: Castable c0 CString => a -> c0 -> IO ()
+        labelsInflate :: (Castable c0 CString) => a -> c0 -> IO ()
         
         labelsOption ::
                        (Castable c1 CString, Castable c0 CString) =>
@@ -210,106 +202,112 @@
                    (Castable c2 CString, ITH1 c1, FPtr c1, ITH1 c0, FPtr c0) =>
                    a -> c0 -> c1 -> CDouble -> CDouble -> c2 -> IO ()
         
-        putStats :: a -> (Ptr CDouble) -> IO ()
+        putStats :: () => a -> Ptr CDouble -> IO ()
         
         rebin ::
-                Castable c0 CString => a -> CInt -> c0 -> (Ptr CDouble) -> IO TH1
+                (Castable c0 CString) => a -> CInt -> c0 -> Ptr CDouble -> IO TH1
         
         rebinAxis :: (ITAxis c0, FPtr c0) => a -> CDouble -> c0 -> IO ()
         
-        rebuild :: Castable c0 CString => a -> c0 -> IO ()
+        rebuild :: (Castable c0 CString) => a -> c0 -> IO ()
         
         recursiveRemove :: (ITObject c0, FPtr c0) => a -> c0 -> IO ()
         
-        reset :: Castable c0 CString => a -> c0 -> IO ()
+        reset :: (Castable c0 CString) => a -> c0 -> IO ()
         
-        resetStats :: a -> IO ()
+        resetStats :: () => a -> IO ()
         
-        scale :: Castable c0 CString => a -> CDouble -> c0 -> IO ()
+        scale :: (Castable c0 CString) => a -> CDouble -> c0 -> IO ()
         
-        setAxisColorA :: Castable c0 CString => a -> CInt -> c0 -> IO ()
+        setAxisColorA ::
+                        (Castable c0 CString) => a -> CShort -> c0 -> IO ()
         
         setAxisRange ::
-                       Castable c0 CString => a -> CDouble -> CDouble -> c0 -> IO ()
+                       (Castable c0 CString) => a -> CDouble -> CDouble -> c0 -> IO ()
         
-        setBarOffset :: a -> CDouble -> IO ()
+        setBarOffset :: () => a -> CFloat -> IO ()
         
-        setBarWidth :: a -> CDouble -> IO ()
+        setBarWidth :: () => a -> CFloat -> IO ()
         
-        setBinContent1 :: a -> CInt -> CDouble -> IO ()
+        setBinContent1 :: () => a -> CInt -> CDouble -> IO ()
         
-        setBinContent2 :: a -> CInt -> CInt -> CDouble -> IO ()
+        setBinContent2 :: () => a -> CInt -> CInt -> CDouble -> IO ()
         
-        setBinContent3 :: a -> CInt -> CInt -> CInt -> CDouble -> IO ()
+        setBinContent3 ::
+                         () => a -> CInt -> CInt -> CInt -> CDouble -> IO ()
         
-        setBinError1 :: a -> CInt -> CDouble -> IO ()
+        setBinError1 :: () => a -> CInt -> CDouble -> IO ()
         
-        setBinError2 :: a -> CInt -> CInt -> CDouble -> IO ()
+        setBinError2 :: () => a -> CInt -> CInt -> CDouble -> IO ()
         
-        setBinError3 :: a -> CInt -> CInt -> CInt -> CDouble -> IO ()
+        setBinError3 :: () => a -> CInt -> CInt -> CInt -> CDouble -> IO ()
         
-        setBins1 :: a -> CInt -> (Ptr CDouble) -> IO ()
+        setBins1 :: () => a -> CInt -> Ptr CDouble -> IO ()
         
         setBins2 ::
-                   a -> CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   () => a -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
         
         setBins3 ::
+                   () =>
                    a ->
                      CInt ->
-                       (Ptr CDouble) ->
-                         CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                       Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
         
-        setBinsLength :: a -> CInt -> IO ()
+        setBinsLength :: () => a -> CInt -> IO ()
         
-        setBuffer :: Castable c0 CString => a -> CInt -> c0 -> IO ()
+        setBuffer :: (Castable c0 CString) => a -> CInt -> c0 -> IO ()
         
-        setCellContent :: a -> CInt -> CInt -> CDouble -> IO ()
+        setCellContent :: () => a -> CInt -> CInt -> CDouble -> IO ()
         
-        setContent :: a -> (Ptr CDouble) -> IO ()
+        setContent :: () => a -> Ptr CDouble -> IO ()
         
-        setContour :: a -> CInt -> (Ptr CDouble) -> IO ()
+        setContour :: () => a -> CInt -> Ptr CDouble -> IO ()
         
-        setContourLevel :: a -> CInt -> CDouble -> IO ()
+        setContourLevel :: () => a -> CInt -> CDouble -> IO ()
         
         setDirectory :: (ITDirectory c0, FPtr c0) => a -> c0 -> IO ()
         
-        setEntries :: a -> CDouble -> IO ()
+        setEntries :: () => a -> CDouble -> IO ()
         
-        setError :: a -> (Ptr CDouble) -> IO ()
+        setError :: () => a -> Ptr CDouble -> IO ()
         
-        setLabelColorA :: Castable c0 CString => a -> CInt -> c0 -> IO ()
+        setLabelColorA ::
+                         (Castable c0 CString) => a -> CShort -> c0 -> IO ()
         
-        setLabelSizeA :: Castable c0 CString => a -> CDouble -> c0 -> IO ()
+        setLabelSizeA ::
+                        (Castable c0 CString) => a -> CFloat -> c0 -> IO ()
         
-        setLabelFontA :: Castable c0 CString => a -> CInt -> c0 -> IO ()
+        setLabelFontA ::
+                        (Castable c0 CString) => a -> CShort -> c0 -> IO ()
         
         setLabelOffsetA ::
-                          Castable c0 CString => a -> CDouble -> c0 -> IO ()
+                          (Castable c0 CString) => a -> CFloat -> c0 -> IO ()
         
-        setMaximum :: a -> CDouble -> IO ()
+        setMaximum :: () => a -> CDouble -> IO ()
         
-        setMinimum :: a -> CDouble -> IO ()
+        setMinimum :: () => a -> CDouble -> IO ()
         
-        setNormFactor :: a -> CDouble -> IO ()
+        setNormFactor :: () => a -> CDouble -> IO ()
         
-        setStats :: a -> CInt -> IO ()
+        setStats :: () => a -> CBool -> IO ()
         
-        setOption :: Castable c0 CString => a -> c0 -> IO ()
+        setOption :: (Castable c0 CString) => a -> c0 -> IO ()
         
-        setXTitle :: Castable c0 CString => a -> c0 -> IO ()
+        setXTitle :: (Castable c0 CString) => a -> c0 -> IO ()
         
-        setYTitle :: Castable c0 CString => a -> c0 -> IO ()
+        setYTitle :: (Castable c0 CString) => a -> c0 -> IO ()
         
-        setZTitle :: Castable c0 CString => a -> c0 -> IO ()
+        setZTitle :: (Castable c0 CString) => a -> c0 -> IO ()
         
-        showBackground :: Castable c0 CString => a -> CInt -> c0 -> IO TH1
+        showBackground ::
+                         (Castable c0 CString) => a -> CInt -> c0 -> IO TH1
         
         showPeaks ::
-                    Castable c0 CString => a -> CDouble -> c0 -> CDouble -> IO CInt
+                    (Castable c0 CString) => a -> CDouble -> c0 -> CDouble -> IO CInt
         
-        smooth :: Castable c0 CString => a -> CInt -> c0 -> IO ()
+        smooth :: (Castable c0 CString) => a -> CInt -> c0 -> IO ()
         
-        sumw2 :: a -> IO ()
+        sumw2 :: () => a -> IO ()
 
 upcastTH1 :: forall a . (FPtr a, ITH1 a) => a -> TH1
 upcastTH1 h
diff --git a/src/HROOT/Hist/TH1/RawType.hs b/src/HROOT/Hist/TH1/RawType.hs
--- a/src/HROOT/Hist/TH1/RawType.hs
+++ b/src/HROOT/Hist/TH1/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1
 
 newtype TH1 = TH1 (Ptr RawTH1)
-            deriving (Eq, Ord, Show)
+                deriving (Eq, Ord, Show)
 
-instance FPtr TH1 where
+instance () => FPtr (TH1) where
         type Raw TH1 = RawTH1
         get_fptr (TH1 ptr) = ptr
         cast_fptr_to_obj = TH1
diff --git a/src/HROOT/Hist/TH1C/Cast.hs b/src/HROOT/Hist/TH1C/Cast.hs
--- a/src/HROOT/Hist/TH1C/Cast.hs
+++ b/src/HROOT/Hist/TH1C/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1C.RawType
 import HROOT.Hist.TH1C.Interface
 
-instance (ITH1C a, FPtr a) => Castable a (Ptr RawTH1C) where
+instance (ITH1C a, FPtr a) => Castable (a) (Ptr RawTH1C) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1C (Ptr RawTH1C) where
+instance () => Castable (TH1C) (Ptr RawTH1C) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1C/FFI.hsc b/src/HROOT/Hist/TH1C/FFI.hsc
--- a/src/HROOT/Hist/TH1C/FFI.hsc
+++ b/src/HROOT/Hist/TH1C/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1C.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1C.RawType
+import HROOT.Hist.TH1C.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -11,524 +14,610 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Add" c_th1c_add ::
-               Ptr RawTH1C -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Add"
+               c_th1c_add :: Ptr RawTH1C -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_AddBinContent"
-               c_th1c_addbincontent :: Ptr RawTH1C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_AddBinContent" c_th1c_addbincontent ::
+               Ptr RawTH1C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Chi2Test"
                c_th1c_chi2test ::
-               Ptr RawTH1C -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1C.h TH1C_ComputeIntegral"
-               c_th1c_computeintegral :: Ptr RawTH1C -> IO CDouble
+               Ptr RawTH1C -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_DirectoryAutoAdd"
-               c_th1c_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_DirectoryAutoAdd" c_th1c_directoryautoadd ::
                Ptr RawTH1C -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Divide"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Divide"
                c_th1c_divide ::
                Ptr RawTH1C ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_drawCopyTH1"
-               c_th1c_drawcopyth1 :: Ptr RawTH1C -> CString -> IO (Ptr RawTH1C)
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_drawCopyTH1" c_th1c_drawcopyth1 ::
+               Ptr RawTH1C -> CString -> IO (Ptr RawTH1C)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_DrawNormalized"
-               c_th1c_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_DrawNormalized" c_th1c_drawnormalized ::
                Ptr RawTH1C -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_drawPanelTH1"
-               c_th1c_drawpanelth1 :: Ptr RawTH1C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_drawPanelTH1" c_th1c_drawpanelth1 ::
+               Ptr RawTH1C -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_BufferEmpty"
-               c_th1c_bufferempty :: Ptr RawTH1C -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_BufferEmpty" c_th1c_bufferempty ::
+               Ptr RawTH1C -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_evalF" c_th1c_evalf
-               :: Ptr RawTH1C -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_evalF"
+               c_th1c_evalf :: Ptr RawTH1C -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FFT" c_th1c_fft ::
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_FFT"
+               c_th1c_fft ::
                Ptr RawTH1C -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_fill1" c_th1c_fill1
-               :: Ptr RawTH1C -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_fill1"
+               c_th1c_fill1 :: Ptr RawTH1C -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_fill1w"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_fill1w"
                c_th1c_fill1w :: Ptr RawTH1C -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_fillN1"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_fillN1"
                c_th1c_filln1 ::
-               Ptr RawTH1C ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH1C -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FillRandom"
-               c_th1c_fillrandom :: Ptr RawTH1C -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_FillRandom" c_th1c_fillrandom ::
+               Ptr RawTH1C -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FindBin"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_FindBin"
                c_th1c_findbin ::
                Ptr RawTH1C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FindFixBin"
-               c_th1c_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_FindFixBin" c_th1c_findfixbin ::
                Ptr RawTH1C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FindFirstBinAbove"
-               c_th1c_findfirstbinabove ::
-               Ptr RawTH1C -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_FindFirstBinAbove" c_th1c_findfirstbinabove
+               :: Ptr RawTH1C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FindLastBinAbove"
-               c_th1c_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_FindLastBinAbove" c_th1c_findlastbinabove ::
                Ptr RawTH1C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Fit" c_th1c_fit ::
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Fit"
+               c_th1c_fit ::
                Ptr RawTH1C ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FitPanelTH1"
-               c_th1c_fitpanelth1 :: Ptr RawTH1C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_FitPanelTH1" c_th1c_fitpanelth1 ::
+               Ptr RawTH1C -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getNdivisionA"
-               c_th1c_getndivisiona :: Ptr RawTH1C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getNdivisionA" c_th1c_getndivisiona ::
+               Ptr RawTH1C -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getAxisColorA"
-               c_th1c_getaxiscolora :: Ptr RawTH1C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getAxisColorA" c_th1c_getaxiscolora ::
+               Ptr RawTH1C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getLabelColorA"
-               c_th1c_getlabelcolora :: Ptr RawTH1C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getLabelColorA" c_th1c_getlabelcolora ::
+               Ptr RawTH1C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getLabelFontA"
-               c_th1c_getlabelfonta :: Ptr RawTH1C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getLabelFontA" c_th1c_getlabelfonta ::
+               Ptr RawTH1C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getLabelOffsetA"
-               c_th1c_getlabeloffseta :: Ptr RawTH1C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getLabelOffsetA" c_th1c_getlabeloffseta ::
+               Ptr RawTH1C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getLabelSizeA"
-               c_th1c_getlabelsizea :: Ptr RawTH1C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getLabelSizeA" c_th1c_getlabelsizea ::
+               Ptr RawTH1C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getTitleFontA"
-               c_th1c_gettitlefonta :: Ptr RawTH1C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getTitleFontA" c_th1c_gettitlefonta ::
+               Ptr RawTH1C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getTitleOffsetA"
-               c_th1c_gettitleoffseta :: Ptr RawTH1C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getTitleOffsetA" c_th1c_gettitleoffseta ::
+               Ptr RawTH1C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getTitleSizeA"
-               c_th1c_gettitlesizea :: Ptr RawTH1C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getTitleSizeA" c_th1c_gettitlesizea ::
+               Ptr RawTH1C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getTickLengthA"
-               c_th1c_getticklengtha :: Ptr RawTH1C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getTickLengthA" c_th1c_getticklengtha ::
+               Ptr RawTH1C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBarOffset"
-               c_th1c_getbaroffset :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBarOffset" c_th1c_getbaroffset ::
+               Ptr RawTH1C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBarWidth"
-               c_th1c_getbarwidth :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBarWidth" c_th1c_getbarwidth ::
+               Ptr RawTH1C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetContour"
-               c_th1c_getcontour :: Ptr RawTH1C -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetContour" c_th1c_getcontour ::
+               Ptr RawTH1C -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetContourLevel"
-               c_th1c_getcontourlevel :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetContourLevel" c_th1c_getcontourlevel ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetContourLevelPad"
-               c_th1c_getcontourlevelpad :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetContourLevelPad" c_th1c_getcontourlevelpad
+               :: Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBin"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetBin"
                c_th1c_getbin :: Ptr RawTH1C -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinCenter"
-               c_th1c_getbincenter :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinCenter" c_th1c_getbincenter ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinContent1"
-               c_th1c_getbincontent1 :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinContent1" c_th1c_getbincontent1 ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinContent2"
-               c_th1c_getbincontent2 :: Ptr RawTH1C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinContent2" c_th1c_getbincontent2 ::
+               Ptr RawTH1C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinContent3"
-               c_th1c_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinContent3" c_th1c_getbincontent3 ::
                Ptr RawTH1C -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinError1"
-               c_th1c_getbinerror1 :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinError1" c_th1c_getbinerror1 ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinError2"
-               c_th1c_getbinerror2 :: Ptr RawTH1C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinError2" c_th1c_getbinerror2 ::
+               Ptr RawTH1C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinError3"
-               c_th1c_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinError3" c_th1c_getbinerror3 ::
                Ptr RawTH1C -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinLowEdge"
-               c_th1c_getbinlowedge :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinLowEdge" c_th1c_getbinlowedge ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetBinWidth"
-               c_th1c_getbinwidth :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetBinWidth" c_th1c_getbinwidth ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetCellContent"
-               c_th1c_getcellcontent :: Ptr RawTH1C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetCellContent" c_th1c_getcellcontent ::
+               Ptr RawTH1C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetCellError"
-               c_th1c_getcellerror :: Ptr RawTH1C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetCellError" c_th1c_getcellerror ::
+               Ptr RawTH1C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetEntries"
-               c_th1c_getentries :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetEntries" c_th1c_getentries ::
+               Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1C.h TH1C_GetEffectiveEntries"
                c_th1c_geteffectiveentries :: Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetFunction"
-               c_th1c_getfunction :: Ptr RawTH1C -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetFunction" c_th1c_getfunction ::
+               Ptr RawTH1C -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetDimension"
-               c_th1c_getdimension :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetDimension" c_th1c_getdimension ::
+               Ptr RawTH1C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetKurtosis"
-               c_th1c_getkurtosis :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetKurtosis" c_th1c_getkurtosis ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetLowEdge"
-               c_th1c_getlowedge :: Ptr RawTH1C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetLowEdge" c_th1c_getlowedge ::
+               Ptr RawTH1C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getMaximumTH1"
-               c_th1c_getmaximumth1 :: Ptr RawTH1C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getMaximumTH1" c_th1c_getmaximumth1 ::
+               Ptr RawTH1C -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMaximumBin"
-               c_th1c_getmaximumbin :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMaximumBin" c_th1c_getmaximumbin ::
+               Ptr RawTH1C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMaximumStored"
-               c_th1c_getmaximumstored :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMaximumStored" c_th1c_getmaximumstored ::
+               Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getMinimumTH1"
-               c_th1c_getminimumth1 :: Ptr RawTH1C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getMinimumTH1" c_th1c_getminimumth1 ::
+               Ptr RawTH1C -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMinimumBin"
-               c_th1c_getminimumbin :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMinimumBin" c_th1c_getminimumbin ::
+               Ptr RawTH1C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMinimumStored"
-               c_th1c_getminimumstored :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMinimumStored" c_th1c_getminimumstored ::
+               Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMean"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetMean"
                c_th1c_getmean :: Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMeanError"
-               c_th1c_getmeanerror :: Ptr RawTH1C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMeanError" c_th1c_getmeanerror ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetNbinsX"
                c_th1c_getnbinsx :: Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetNbinsY"
                c_th1c_getnbinsy :: Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetNbinsZ"
                c_th1c_getnbinsz :: Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_getQuantilesTH1"
-               c_th1c_getquantilesth1 ::
-               Ptr RawTH1C -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_getQuantilesTH1" c_th1c_getquantilesth1 ::
+               Ptr RawTH1C -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetRandom"
                c_th1c_getrandom :: Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetStats"
-               c_th1c_getstats :: Ptr RawTH1C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetStats"
+               c_th1c_getstats :: Ptr RawTH1C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetSumOfWeights"
-               c_th1c_getsumofweights :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetSumOfWeights" c_th1c_getsumofweights ::
+               Ptr RawTH1C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetSumw2"
                c_th1c_getsumw2 :: Ptr RawTH1C -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetSumw2N"
                c_th1c_getsumw2n :: Ptr RawTH1C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetRMS"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetRMS"
                c_th1c_getrms :: Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetRMSError"
-               c_th1c_getrmserror :: Ptr RawTH1C -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetSkewness"
-               c_th1c_getskewness :: Ptr RawTH1C -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1C.h TH1C_integral1"
-               c_th1c_integral1 ::
-               Ptr RawTH1C -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1C.h TH1C_interpolate1"
-               c_th1c_interpolate1 :: Ptr RawTH1C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetRMSError" c_th1c_getrmserror ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_interpolate2"
-               c_th1c_interpolate2 ::
-               Ptr RawTH1C -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetSkewness" c_th1c_getskewness ::
+               Ptr RawTH1C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_interpolate3"
-               c_th1c_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_interpolate3" c_th1c_interpolate3 ::
                Ptr RawTH1C -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_KolmogorovTest"
-               c_th1c_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_KolmogorovTest" c_th1c_kolmogorovtest ::
                Ptr RawTH1C -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_LabelsDeflate"
-               c_th1c_labelsdeflate :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_LabelsDeflate" c_th1c_labelsdeflate ::
+               Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_LabelsInflate"
-               c_th1c_labelsinflate :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_LabelsInflate" c_th1c_labelsinflate ::
+               Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_LabelsOption"
-               c_th1c_labelsoption :: Ptr RawTH1C -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_LabelsOption" c_th1c_labelsoption ::
+               Ptr RawTH1C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_multiflyF"
                c_th1c_multiflyf :: Ptr RawTH1C -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Multiply"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Multiply"
                c_th1c_multiply ::
                Ptr RawTH1C ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_PutStats"
-               c_th1c_putstats :: Ptr RawTH1C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_PutStats"
+               c_th1c_putstats :: Ptr RawTH1C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Rebin" c_th1c_rebin
-               ::
-               Ptr RawTH1C -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Rebin"
+               c_th1c_rebin ::
+               Ptr RawTH1C -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_RebinAxis"
                c_th1c_rebinaxis :: Ptr RawTH1C -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Rebuild"
                c_th1c_rebuild :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_RecursiveRemove"
-               c_th1c_recursiveremove :: Ptr RawTH1C -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_RecursiveRemove" c_th1c_recursiveremove ::
+               Ptr RawTH1C -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Reset" c_th1c_reset
-               :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Reset"
+               c_th1c_reset :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_ResetStats"
-               c_th1c_resetstats :: Ptr RawTH1C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_ResetStats" c_th1c_resetstats ::
+               Ptr RawTH1C -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Scale" c_th1c_scale
-               :: Ptr RawTH1C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Scale"
+               c_th1c_scale :: Ptr RawTH1C -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setAxisColorA"
-               c_th1c_setaxiscolora :: Ptr RawTH1C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setAxisColorA" c_th1c_setaxiscolora ::
+               Ptr RawTH1C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetAxisRange"
-               c_th1c_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetAxisRange" c_th1c_setaxisrange ::
                Ptr RawTH1C -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetBarOffset"
-               c_th1c_setbaroffset :: Ptr RawTH1C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetBarOffset" c_th1c_setbaroffset ::
+               Ptr RawTH1C -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetBarWidth"
-               c_th1c_setbarwidth :: Ptr RawTH1C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetBarWidth" c_th1c_setbarwidth ::
+               Ptr RawTH1C -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBinContent1"
-               c_th1c_setbincontent1 :: Ptr RawTH1C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setBinContent1" c_th1c_setbincontent1 ::
+               Ptr RawTH1C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBinContent2"
-               c_th1c_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setBinContent2" c_th1c_setbincontent2 ::
                Ptr RawTH1C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBinContent3"
-               c_th1c_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setBinContent3" c_th1c_setbincontent3 ::
                Ptr RawTH1C -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBinError1"
-               c_th1c_setbinerror1 :: Ptr RawTH1C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setBinError1" c_th1c_setbinerror1 ::
+               Ptr RawTH1C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBinError2"
-               c_th1c_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setBinError2" c_th1c_setbinerror2 ::
                Ptr RawTH1C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBinError3"
-               c_th1c_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setBinError3" c_th1c_setbinerror3 ::
                Ptr RawTH1C -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBins1"
-               c_th1c_setbins1 :: Ptr RawTH1C -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_setBins1"
+               c_th1c_setbins1 :: Ptr RawTH1C -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBins2"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_setBins2"
                c_th1c_setbins2 ::
-               Ptr RawTH1C ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1C -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setBins3"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_setBins3"
                c_th1c_setbins3 ::
                Ptr RawTH1C ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetBinsLength"
-               c_th1c_setbinslength :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetBinsLength" c_th1c_setbinslength ::
+               Ptr RawTH1C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetBuffer"
                c_th1c_setbuffer :: Ptr RawTH1C -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetCellContent"
-               c_th1c_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetCellContent" c_th1c_setcellcontent ::
                Ptr RawTH1C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetContent"
-               c_th1c_setcontent :: Ptr RawTH1C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetContent" c_th1c_setcontent ::
+               Ptr RawTH1C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetContour"
-               c_th1c_setcontour :: Ptr RawTH1C -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetContour" c_th1c_setcontour ::
+               Ptr RawTH1C -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetContourLevel"
-               c_th1c_setcontourlevel :: Ptr RawTH1C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetContourLevel" c_th1c_setcontourlevel ::
+               Ptr RawTH1C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetDirectory"
-               c_th1c_setdirectory :: Ptr RawTH1C -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetDirectory" c_th1c_setdirectory ::
+               Ptr RawTH1C -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetEntries"
-               c_th1c_setentries :: Ptr RawTH1C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetEntries" c_th1c_setentries ::
+               Ptr RawTH1C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetError"
-               c_th1c_seterror :: Ptr RawTH1C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetError"
+               c_th1c_seterror :: Ptr RawTH1C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setLabelColorA"
-               c_th1c_setlabelcolora :: Ptr RawTH1C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setLabelColorA" c_th1c_setlabelcolora ::
+               Ptr RawTH1C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setLabelSizeA"
-               c_th1c_setlabelsizea :: Ptr RawTH1C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setLabelSizeA" c_th1c_setlabelsizea ::
+               Ptr RawTH1C -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setLabelFontA"
-               c_th1c_setlabelfonta :: Ptr RawTH1C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setLabelFontA" c_th1c_setlabelfonta ::
+               Ptr RawTH1C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_setLabelOffsetA"
-               c_th1c_setlabeloffseta ::
-               Ptr RawTH1C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_setLabelOffsetA" c_th1c_setlabeloffseta ::
+               Ptr RawTH1C -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetMaximum"
-               c_th1c_setmaximum :: Ptr RawTH1C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetMaximum" c_th1c_setmaximum ::
+               Ptr RawTH1C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetMinimum"
-               c_th1c_setminimum :: Ptr RawTH1C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetMinimum" c_th1c_setminimum ::
+               Ptr RawTH1C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetNormFactor"
-               c_th1c_setnormfactor :: Ptr RawTH1C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetNormFactor" c_th1c_setnormfactor ::
+               Ptr RawTH1C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetStats"
-               c_th1c_setstats :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetStats"
+               c_th1c_setstats :: Ptr RawTH1C -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetOption"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetOption"
                c_th1c_setoption :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetXTitle"
                c_th1c_setxtitle :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetYTitle"
                c_th1c_setytitle :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetZTitle"
                c_th1c_setztitle :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_ShowBackground"
-               c_th1c_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_ShowBackground" c_th1c_showbackground ::
                Ptr RawTH1C -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_ShowPeaks"
                c_th1c_showpeaks ::
                Ptr RawTH1C -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Smooth"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Smooth"
                c_th1c_smooth :: Ptr RawTH1C -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Sumw2" c_th1c_sumw2
-               :: Ptr RawTH1C -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Sumw2"
+               c_th1c_sumw2 :: Ptr RawTH1C -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetName"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetName"
                c_th1c_setname :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetNameTitle"
-               c_th1c_setnametitle :: Ptr RawTH1C -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetNameTitle" c_th1c_setnametitle ::
+               Ptr RawTH1C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetTitle"
                c_th1c_settitle :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetLineColor"
-               c_th1c_getlinecolor :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetLineColor" c_th1c_getlinecolor ::
+               Ptr RawTH1C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetLineStyle"
-               c_th1c_getlinestyle :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetLineStyle" c_th1c_getlinestyle ::
+               Ptr RawTH1C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetLineWidth"
-               c_th1c_getlinewidth :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetLineWidth" c_th1c_getlinewidth ::
+               Ptr RawTH1C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_ResetAttLine"
-               c_th1c_resetattline :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_ResetAttLine" c_th1c_resetattline ::
+               Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetLineAttributes"
-               c_th1c_setlineattributes :: Ptr RawTH1C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetLineAttributes" c_th1c_setlineattributes
+               :: Ptr RawTH1C -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetLineColor"
-               c_th1c_setlinecolor :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetLineColor" c_th1c_setlinecolor ::
+               Ptr RawTH1C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetLineStyle"
-               c_th1c_setlinestyle :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetLineStyle" c_th1c_setlinestyle ::
+               Ptr RawTH1C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetLineWidth"
-               c_th1c_setlinewidth :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetLineWidth" c_th1c_setlinewidth ::
+               Ptr RawTH1C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetFillColor"
-               c_th1c_setfillcolor :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetFillColor" c_th1c_setfillcolor ::
+               Ptr RawTH1C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetFillStyle"
-               c_th1c_setfillstyle :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetFillStyle" c_th1c_setfillstyle ::
+               Ptr RawTH1C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMarkerColor"
-               c_th1c_getmarkercolor :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMarkerColor" c_th1c_getmarkercolor ::
+               Ptr RawTH1C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMarkerStyle"
-               c_th1c_getmarkerstyle :: Ptr RawTH1C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMarkerStyle" c_th1c_getmarkerstyle ::
+               Ptr RawTH1C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetMarkerSize"
-               c_th1c_getmarkersize :: Ptr RawTH1C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_GetMarkerSize" c_th1c_getmarkersize ::
+               Ptr RawTH1C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_ResetAttMarker"
-               c_th1c_resetattmarker :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_ResetAttMarker" c_th1c_resetattmarker ::
+               Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1C.h TH1C_SetMarkerAttributes"
                c_th1c_setmarkerattributes :: Ptr RawTH1C -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetMarkerColor"
-               c_th1c_setmarkercolor :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetMarkerColor" c_th1c_setmarkercolor ::
+               Ptr RawTH1C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetMarkerStyle"
-               c_th1c_setmarkerstyle :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetMarkerStyle" c_th1c_setmarkerstyle ::
+               Ptr RawTH1C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SetMarkerSize"
-               c_th1c_setmarkersize :: Ptr RawTH1C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_SetMarkerSize" c_th1c_setmarkersize ::
+               Ptr RawTH1C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Draw" c_th1c_draw
-               :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Clear"
+               c_th1c_clear :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_FindObject"
-               c_th1c_findobject :: Ptr RawTH1C -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Draw"
+               c_th1c_draw :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH1C.h TH1C_FindObject" c_th1c_findobject ::
+               Ptr RawTH1C -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetName"
                c_th1c_getname :: Ptr RawTH1C -> IO CString
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_IsA" c_th1c_isa ::
-               Ptr RawTH1C -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_IsA"
+               c_th1c_isa :: Ptr RawTH1C -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Paint" c_th1c_paint
-               :: Ptr RawTH1C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Paint"
+               c_th1c_paint :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_printObj"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_printObj"
                c_th1c_printobj :: Ptr RawTH1C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_SaveAs"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SaveAs"
                c_th1c_saveas :: Ptr RawTH1C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_Write" c_th1c_write
-               :: Ptr RawTH1C -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Write"
+               c_th1c_write :: Ptr RawTH1C -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1C.h TH1C_delete"
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_Write_"
+               c_th1c_write_ :: Ptr RawTH1C -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_delete"
                c_th1c_delete :: Ptr RawTH1C -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_GetAt"
+               c_th1c_getat :: Ptr RawTH1C -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetArray"
+               c_th1c_setarray :: Ptr RawTH1C -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1C.h TH1C_SetAt"
+               c_th1c_setat :: Ptr RawTH1C -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH1C/Implementation.hs b/src/HROOT/Hist/TH1C/Implementation.hs
--- a/src/HROOT/Hist/TH1C/Implementation.hs
+++ b/src/HROOT/Hist/TH1C/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1C.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1C.RawType
 import HROOT.Hist.TH1C.FFI
 import HROOT.Hist.TH1C.Interface
 import HROOT.Hist.TH1C.Cast
+import HROOT.Hist.TH1C.RawType
+import HROOT.Hist.TH1C.Cast
+import HROOT.Hist.TH1C.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -48,20 +57,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH1C TH1C
+instance () => ITH1C (TH1C) where
 
-instance ITH1 TH1C where
+instance () => ITH1 (TH1C) where
         add = xform2 c_th1c_add
         addBinContent = xform2 c_th1c_addbincontent
         chi2Test = xform3 c_th1c_chi2test
-        computeIntegral = xform0 c_th1c_computeintegral
         directoryAutoAdd = xform1 c_th1c_directoryautoadd
         divide = xform5 c_th1c_divide
         drawCopyTH1 = xform1 c_th1c_drawcopyth1
@@ -133,9 +141,6 @@
         getRMS = xform1 c_th1c_getrms
         getRMSError = xform1 c_th1c_getrmserror
         getSkewness = xform1 c_th1c_getskewness
-        integral1 = xform3 c_th1c_integral1
-        interpolate1 = xform1 c_th1c_interpolate1
-        interpolate2 = xform2 c_th1c_interpolate2
         interpolate3 = xform3 c_th1c_interpolate3
         kolmogorovTest = xform2 c_th1c_kolmogorovtest
         labelsDeflate = xform1 c_th1c_labelsdeflate
@@ -190,14 +195,14 @@
         smooth = xform2 c_th1c_smooth
         sumw2 = xform0 c_th1c_sumw2
 
-instance ITArrayC TH1C
+instance () => ITArrayC (TH1C) where
 
-instance ITNamed TH1C where
+instance () => ITNamed (TH1C) where
         setName = xform1 c_th1c_setname
         setNameTitle = xform2 c_th1c_setnametitle
         setTitle = xform1 c_th1c_settitle
 
-instance ITAttLine TH1C where
+instance () => ITAttLine (TH1C) where
         getLineColor = xform0 c_th1c_getlinecolor
         getLineStyle = xform0 c_th1c_getlinestyle
         getLineWidth = xform0 c_th1c_getlinewidth
@@ -207,11 +212,11 @@
         setLineStyle = xform1 c_th1c_setlinestyle
         setLineWidth = xform1 c_th1c_setlinewidth
 
-instance ITAttFill TH1C where
+instance () => ITAttFill (TH1C) where
         setFillColor = xform1 c_th1c_setfillcolor
         setFillStyle = xform1 c_th1c_setfillstyle
 
-instance ITAttMarker TH1C where
+instance () => ITAttMarker (TH1C) where
         getMarkerColor = xform0 c_th1c_getmarkercolor
         getMarkerStyle = xform0 c_th1c_getmarkerstyle
         getMarkerSize = xform0 c_th1c_getmarkersize
@@ -221,7 +226,8 @@
         setMarkerStyle = xform1 c_th1c_setmarkerstyle
         setMarkerSize = xform1 c_th1c_setmarkersize
 
-instance ITObject TH1C where
+instance () => ITObject (TH1C) where
+        clear = xform1 c_th1c_clear
         draw = xform1 c_th1c_draw
         findObject = xform1 c_th1c_findobject
         getName = xform0 c_th1c_getname
@@ -230,8 +236,12 @@
         printObj = xform1 c_th1c_printobj
         saveAs = xform2 c_th1c_saveas
         write = xform3 c_th1c_write
+        write_ = xform0 c_th1c_write_
 
-instance IDeletable TH1C where
+instance () => IDeletable (TH1C) where
         delete = xform0 c_th1c_delete
 
-instance ITArray TH1C
+instance () => ITArray (TH1C) where
+        getAt = xform1 c_th1c_getat
+        setArray = xform1 c_th1c_setarray
+        setAt = xform2 c_th1c_setat
diff --git a/src/HROOT/Hist/TH1C/Interface.hs b/src/HROOT/Hist/TH1C/Interface.hs
--- a/src/HROOT/Hist/TH1C/Interface.hs
+++ b/src/HROOT/Hist/TH1C/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1C.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TArrayC.Interface
 
-class (ITH1 a, ITArrayC a) => ITH1C a
+class (ITH1 a, ITArrayC a) => ITH1C a where
 
 upcastTH1C :: forall a . (FPtr a, ITH1C a) => a -> TH1C
 upcastTH1C h
diff --git a/src/HROOT/Hist/TH1C/RawType.hs b/src/HROOT/Hist/TH1C/RawType.hs
--- a/src/HROOT/Hist/TH1C/RawType.hs
+++ b/src/HROOT/Hist/TH1C/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1C
 
 newtype TH1C = TH1C (Ptr RawTH1C)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH1C where
+instance () => FPtr (TH1C) where
         type Raw TH1C = RawTH1C
         get_fptr (TH1C ptr) = ptr
         cast_fptr_to_obj = TH1C
diff --git a/src/HROOT/Hist/TH1D/Cast.hs b/src/HROOT/Hist/TH1D/Cast.hs
--- a/src/HROOT/Hist/TH1D/Cast.hs
+++ b/src/HROOT/Hist/TH1D/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Interface
 
-instance (ITH1D a, FPtr a) => Castable a (Ptr RawTH1D) where
+instance (ITH1D a, FPtr a) => Castable (a) (Ptr RawTH1D) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1D (Ptr RawTH1D) where
+instance () => Castable (TH1D) (Ptr RawTH1D) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1D/FFI.hsc b/src/HROOT/Hist/TH1D/FFI.hsc
--- a/src/HROOT/Hist/TH1D/FFI.hsc
+++ b/src/HROOT/Hist/TH1D/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1D.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1D.RawType
+import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -11,529 +14,615 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Add" c_th1d_add ::
-               Ptr RawTH1D -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Add"
+               c_th1d_add :: Ptr RawTH1D -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_AddBinContent"
-               c_th1d_addbincontent :: Ptr RawTH1D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_AddBinContent" c_th1d_addbincontent ::
+               Ptr RawTH1D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Chi2Test"
                c_th1d_chi2test ::
-               Ptr RawTH1D -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1D.h TH1D_ComputeIntegral"
-               c_th1d_computeintegral :: Ptr RawTH1D -> IO CDouble
+               Ptr RawTH1D -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_DirectoryAutoAdd"
-               c_th1d_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_DirectoryAutoAdd" c_th1d_directoryautoadd ::
                Ptr RawTH1D -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Divide"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Divide"
                c_th1d_divide ::
                Ptr RawTH1D ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_drawCopyTH1"
-               c_th1d_drawcopyth1 :: Ptr RawTH1D -> CString -> IO (Ptr RawTH1D)
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_drawCopyTH1" c_th1d_drawcopyth1 ::
+               Ptr RawTH1D -> CString -> IO (Ptr RawTH1D)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_DrawNormalized"
-               c_th1d_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_DrawNormalized" c_th1d_drawnormalized ::
                Ptr RawTH1D -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_drawPanelTH1"
-               c_th1d_drawpanelth1 :: Ptr RawTH1D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_drawPanelTH1" c_th1d_drawpanelth1 ::
+               Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_BufferEmpty"
-               c_th1d_bufferempty :: Ptr RawTH1D -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_BufferEmpty" c_th1d_bufferempty ::
+               Ptr RawTH1D -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_evalF" c_th1d_evalf
-               :: Ptr RawTH1D -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_evalF"
+               c_th1d_evalf :: Ptr RawTH1D -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FFT" c_th1d_fft ::
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_FFT"
+               c_th1d_fft ::
                Ptr RawTH1D -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_fill1" c_th1d_fill1
-               :: Ptr RawTH1D -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_fill1"
+               c_th1d_fill1 :: Ptr RawTH1D -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_fill1w"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_fill1w"
                c_th1d_fill1w :: Ptr RawTH1D -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_fillN1"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_fillN1"
                c_th1d_filln1 ::
-               Ptr RawTH1D ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH1D -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FillRandom"
-               c_th1d_fillrandom :: Ptr RawTH1D -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_FillRandom" c_th1d_fillrandom ::
+               Ptr RawTH1D -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FindBin"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_FindBin"
                c_th1d_findbin ::
                Ptr RawTH1D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FindFixBin"
-               c_th1d_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_FindFixBin" c_th1d_findfixbin ::
                Ptr RawTH1D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FindFirstBinAbove"
-               c_th1d_findfirstbinabove ::
-               Ptr RawTH1D -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_FindFirstBinAbove" c_th1d_findfirstbinabove
+               :: Ptr RawTH1D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FindLastBinAbove"
-               c_th1d_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_FindLastBinAbove" c_th1d_findlastbinabove ::
                Ptr RawTH1D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Fit" c_th1d_fit ::
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Fit"
+               c_th1d_fit ::
                Ptr RawTH1D ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FitPanelTH1"
-               c_th1d_fitpanelth1 :: Ptr RawTH1D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_FitPanelTH1" c_th1d_fitpanelth1 ::
+               Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getNdivisionA"
-               c_th1d_getndivisiona :: Ptr RawTH1D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getNdivisionA" c_th1d_getndivisiona ::
+               Ptr RawTH1D -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getAxisColorA"
-               c_th1d_getaxiscolora :: Ptr RawTH1D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getAxisColorA" c_th1d_getaxiscolora ::
+               Ptr RawTH1D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getLabelColorA"
-               c_th1d_getlabelcolora :: Ptr RawTH1D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getLabelColorA" c_th1d_getlabelcolora ::
+               Ptr RawTH1D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getLabelFontA"
-               c_th1d_getlabelfonta :: Ptr RawTH1D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getLabelFontA" c_th1d_getlabelfonta ::
+               Ptr RawTH1D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getLabelOffsetA"
-               c_th1d_getlabeloffseta :: Ptr RawTH1D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getLabelOffsetA" c_th1d_getlabeloffseta ::
+               Ptr RawTH1D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getLabelSizeA"
-               c_th1d_getlabelsizea :: Ptr RawTH1D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getLabelSizeA" c_th1d_getlabelsizea ::
+               Ptr RawTH1D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getTitleFontA"
-               c_th1d_gettitlefonta :: Ptr RawTH1D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getTitleFontA" c_th1d_gettitlefonta ::
+               Ptr RawTH1D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getTitleOffsetA"
-               c_th1d_gettitleoffseta :: Ptr RawTH1D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getTitleOffsetA" c_th1d_gettitleoffseta ::
+               Ptr RawTH1D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getTitleSizeA"
-               c_th1d_gettitlesizea :: Ptr RawTH1D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getTitleSizeA" c_th1d_gettitlesizea ::
+               Ptr RawTH1D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getTickLengthA"
-               c_th1d_getticklengtha :: Ptr RawTH1D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getTickLengthA" c_th1d_getticklengtha ::
+               Ptr RawTH1D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBarOffset"
-               c_th1d_getbaroffset :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBarOffset" c_th1d_getbaroffset ::
+               Ptr RawTH1D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBarWidth"
-               c_th1d_getbarwidth :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBarWidth" c_th1d_getbarwidth ::
+               Ptr RawTH1D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetContour"
-               c_th1d_getcontour :: Ptr RawTH1D -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetContour" c_th1d_getcontour ::
+               Ptr RawTH1D -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetContourLevel"
-               c_th1d_getcontourlevel :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetContourLevel" c_th1d_getcontourlevel ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetContourLevelPad"
-               c_th1d_getcontourlevelpad :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetContourLevelPad" c_th1d_getcontourlevelpad
+               :: Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBin"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetBin"
                c_th1d_getbin :: Ptr RawTH1D -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinCenter"
-               c_th1d_getbincenter :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinCenter" c_th1d_getbincenter ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinContent1"
-               c_th1d_getbincontent1 :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinContent1" c_th1d_getbincontent1 ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinContent2"
-               c_th1d_getbincontent2 :: Ptr RawTH1D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinContent2" c_th1d_getbincontent2 ::
+               Ptr RawTH1D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinContent3"
-               c_th1d_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinContent3" c_th1d_getbincontent3 ::
                Ptr RawTH1D -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinError1"
-               c_th1d_getbinerror1 :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinError1" c_th1d_getbinerror1 ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinError2"
-               c_th1d_getbinerror2 :: Ptr RawTH1D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinError2" c_th1d_getbinerror2 ::
+               Ptr RawTH1D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinError3"
-               c_th1d_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinError3" c_th1d_getbinerror3 ::
                Ptr RawTH1D -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinLowEdge"
-               c_th1d_getbinlowedge :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinLowEdge" c_th1d_getbinlowedge ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetBinWidth"
-               c_th1d_getbinwidth :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetBinWidth" c_th1d_getbinwidth ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetCellContent"
-               c_th1d_getcellcontent :: Ptr RawTH1D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetCellContent" c_th1d_getcellcontent ::
+               Ptr RawTH1D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetCellError"
-               c_th1d_getcellerror :: Ptr RawTH1D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetCellError" c_th1d_getcellerror ::
+               Ptr RawTH1D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetEntries"
-               c_th1d_getentries :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetEntries" c_th1d_getentries ::
+               Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1D.h TH1D_GetEffectiveEntries"
                c_th1d_geteffectiveentries :: Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetFunction"
-               c_th1d_getfunction :: Ptr RawTH1D -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetFunction" c_th1d_getfunction ::
+               Ptr RawTH1D -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetDimension"
-               c_th1d_getdimension :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetDimension" c_th1d_getdimension ::
+               Ptr RawTH1D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetKurtosis"
-               c_th1d_getkurtosis :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetKurtosis" c_th1d_getkurtosis ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetLowEdge"
-               c_th1d_getlowedge :: Ptr RawTH1D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetLowEdge" c_th1d_getlowedge ::
+               Ptr RawTH1D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getMaximumTH1"
-               c_th1d_getmaximumth1 :: Ptr RawTH1D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getMaximumTH1" c_th1d_getmaximumth1 ::
+               Ptr RawTH1D -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMaximumBin"
-               c_th1d_getmaximumbin :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMaximumBin" c_th1d_getmaximumbin ::
+               Ptr RawTH1D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMaximumStored"
-               c_th1d_getmaximumstored :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMaximumStored" c_th1d_getmaximumstored ::
+               Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getMinimumTH1"
-               c_th1d_getminimumth1 :: Ptr RawTH1D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getMinimumTH1" c_th1d_getminimumth1 ::
+               Ptr RawTH1D -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMinimumBin"
-               c_th1d_getminimumbin :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMinimumBin" c_th1d_getminimumbin ::
+               Ptr RawTH1D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMinimumStored"
-               c_th1d_getminimumstored :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMinimumStored" c_th1d_getminimumstored ::
+               Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMean"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetMean"
                c_th1d_getmean :: Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMeanError"
-               c_th1d_getmeanerror :: Ptr RawTH1D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMeanError" c_th1d_getmeanerror ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetNbinsX"
                c_th1d_getnbinsx :: Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetNbinsY"
                c_th1d_getnbinsy :: Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetNbinsZ"
                c_th1d_getnbinsz :: Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_getQuantilesTH1"
-               c_th1d_getquantilesth1 ::
-               Ptr RawTH1D -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_getQuantilesTH1" c_th1d_getquantilesth1 ::
+               Ptr RawTH1D -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetRandom"
                c_th1d_getrandom :: Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetStats"
-               c_th1d_getstats :: Ptr RawTH1D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetStats"
+               c_th1d_getstats :: Ptr RawTH1D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetSumOfWeights"
-               c_th1d_getsumofweights :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetSumOfWeights" c_th1d_getsumofweights ::
+               Ptr RawTH1D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetSumw2"
                c_th1d_getsumw2 :: Ptr RawTH1D -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetSumw2N"
                c_th1d_getsumw2n :: Ptr RawTH1D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetRMS"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetRMS"
                c_th1d_getrms :: Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetRMSError"
-               c_th1d_getrmserror :: Ptr RawTH1D -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetSkewness"
-               c_th1d_getskewness :: Ptr RawTH1D -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1D.h TH1D_integral1"
-               c_th1d_integral1 ::
-               Ptr RawTH1D -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1D.h TH1D_interpolate1"
-               c_th1d_interpolate1 :: Ptr RawTH1D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetRMSError" c_th1d_getrmserror ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_interpolate2"
-               c_th1d_interpolate2 ::
-               Ptr RawTH1D -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetSkewness" c_th1d_getskewness ::
+               Ptr RawTH1D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_interpolate3"
-               c_th1d_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_interpolate3" c_th1d_interpolate3 ::
                Ptr RawTH1D -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_KolmogorovTest"
-               c_th1d_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_KolmogorovTest" c_th1d_kolmogorovtest ::
                Ptr RawTH1D -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_LabelsDeflate"
-               c_th1d_labelsdeflate :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_LabelsDeflate" c_th1d_labelsdeflate ::
+               Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_LabelsInflate"
-               c_th1d_labelsinflate :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_LabelsInflate" c_th1d_labelsinflate ::
+               Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_LabelsOption"
-               c_th1d_labelsoption :: Ptr RawTH1D -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_LabelsOption" c_th1d_labelsoption ::
+               Ptr RawTH1D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_multiflyF"
                c_th1d_multiflyf :: Ptr RawTH1D -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Multiply"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Multiply"
                c_th1d_multiply ::
                Ptr RawTH1D ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_PutStats"
-               c_th1d_putstats :: Ptr RawTH1D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_PutStats"
+               c_th1d_putstats :: Ptr RawTH1D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Rebin" c_th1d_rebin
-               ::
-               Ptr RawTH1D -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Rebin"
+               c_th1d_rebin ::
+               Ptr RawTH1D -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_RebinAxis"
                c_th1d_rebinaxis :: Ptr RawTH1D -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Rebuild"
                c_th1d_rebuild :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_RecursiveRemove"
-               c_th1d_recursiveremove :: Ptr RawTH1D -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_RecursiveRemove" c_th1d_recursiveremove ::
+               Ptr RawTH1D -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Reset" c_th1d_reset
-               :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Reset"
+               c_th1d_reset :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_ResetStats"
-               c_th1d_resetstats :: Ptr RawTH1D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_ResetStats" c_th1d_resetstats ::
+               Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Scale" c_th1d_scale
-               :: Ptr RawTH1D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Scale"
+               c_th1d_scale :: Ptr RawTH1D -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setAxisColorA"
-               c_th1d_setaxiscolora :: Ptr RawTH1D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setAxisColorA" c_th1d_setaxiscolora ::
+               Ptr RawTH1D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetAxisRange"
-               c_th1d_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetAxisRange" c_th1d_setaxisrange ::
                Ptr RawTH1D -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetBarOffset"
-               c_th1d_setbaroffset :: Ptr RawTH1D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetBarOffset" c_th1d_setbaroffset ::
+               Ptr RawTH1D -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetBarWidth"
-               c_th1d_setbarwidth :: Ptr RawTH1D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetBarWidth" c_th1d_setbarwidth ::
+               Ptr RawTH1D -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBinContent1"
-               c_th1d_setbincontent1 :: Ptr RawTH1D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setBinContent1" c_th1d_setbincontent1 ::
+               Ptr RawTH1D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBinContent2"
-               c_th1d_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setBinContent2" c_th1d_setbincontent2 ::
                Ptr RawTH1D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBinContent3"
-               c_th1d_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setBinContent3" c_th1d_setbincontent3 ::
                Ptr RawTH1D -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBinError1"
-               c_th1d_setbinerror1 :: Ptr RawTH1D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setBinError1" c_th1d_setbinerror1 ::
+               Ptr RawTH1D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBinError2"
-               c_th1d_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setBinError2" c_th1d_setbinerror2 ::
                Ptr RawTH1D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBinError3"
-               c_th1d_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setBinError3" c_th1d_setbinerror3 ::
                Ptr RawTH1D -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBins1"
-               c_th1d_setbins1 :: Ptr RawTH1D -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_setBins1"
+               c_th1d_setbins1 :: Ptr RawTH1D -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBins2"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_setBins2"
                c_th1d_setbins2 ::
-               Ptr RawTH1D ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1D -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setBins3"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_setBins3"
                c_th1d_setbins3 ::
                Ptr RawTH1D ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetBinsLength"
-               c_th1d_setbinslength :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetBinsLength" c_th1d_setbinslength ::
+               Ptr RawTH1D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetBuffer"
                c_th1d_setbuffer :: Ptr RawTH1D -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetCellContent"
-               c_th1d_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetCellContent" c_th1d_setcellcontent ::
                Ptr RawTH1D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetContent"
-               c_th1d_setcontent :: Ptr RawTH1D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetContent" c_th1d_setcontent ::
+               Ptr RawTH1D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetContour"
-               c_th1d_setcontour :: Ptr RawTH1D -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetContour" c_th1d_setcontour ::
+               Ptr RawTH1D -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetContourLevel"
-               c_th1d_setcontourlevel :: Ptr RawTH1D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetContourLevel" c_th1d_setcontourlevel ::
+               Ptr RawTH1D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetDirectory"
-               c_th1d_setdirectory :: Ptr RawTH1D -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetDirectory" c_th1d_setdirectory ::
+               Ptr RawTH1D -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetEntries"
-               c_th1d_setentries :: Ptr RawTH1D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetEntries" c_th1d_setentries ::
+               Ptr RawTH1D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetError"
-               c_th1d_seterror :: Ptr RawTH1D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetError"
+               c_th1d_seterror :: Ptr RawTH1D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setLabelColorA"
-               c_th1d_setlabelcolora :: Ptr RawTH1D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setLabelColorA" c_th1d_setlabelcolora ::
+               Ptr RawTH1D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setLabelSizeA"
-               c_th1d_setlabelsizea :: Ptr RawTH1D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setLabelSizeA" c_th1d_setlabelsizea ::
+               Ptr RawTH1D -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setLabelFontA"
-               c_th1d_setlabelfonta :: Ptr RawTH1D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setLabelFontA" c_th1d_setlabelfonta ::
+               Ptr RawTH1D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_setLabelOffsetA"
-               c_th1d_setlabeloffseta ::
-               Ptr RawTH1D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_setLabelOffsetA" c_th1d_setlabeloffseta ::
+               Ptr RawTH1D -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetMaximum"
-               c_th1d_setmaximum :: Ptr RawTH1D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetMaximum" c_th1d_setmaximum ::
+               Ptr RawTH1D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetMinimum"
-               c_th1d_setminimum :: Ptr RawTH1D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetMinimum" c_th1d_setminimum ::
+               Ptr RawTH1D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetNormFactor"
-               c_th1d_setnormfactor :: Ptr RawTH1D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetNormFactor" c_th1d_setnormfactor ::
+               Ptr RawTH1D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetStats"
-               c_th1d_setstats :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetStats"
+               c_th1d_setstats :: Ptr RawTH1D -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetOption"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetOption"
                c_th1d_setoption :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetXTitle"
                c_th1d_setxtitle :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetYTitle"
                c_th1d_setytitle :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetZTitle"
                c_th1d_setztitle :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_ShowBackground"
-               c_th1d_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_ShowBackground" c_th1d_showbackground ::
                Ptr RawTH1D -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_ShowPeaks"
                c_th1d_showpeaks ::
                Ptr RawTH1D -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Smooth"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Smooth"
                c_th1d_smooth :: Ptr RawTH1D -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Sumw2" c_th1d_sumw2
-               :: Ptr RawTH1D -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Sumw2"
+               c_th1d_sumw2 :: Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetName"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetName"
                c_th1d_setname :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetNameTitle"
-               c_th1d_setnametitle :: Ptr RawTH1D -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetNameTitle" c_th1d_setnametitle ::
+               Ptr RawTH1D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetTitle"
                c_th1d_settitle :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetLineColor"
-               c_th1d_getlinecolor :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetLineColor" c_th1d_getlinecolor ::
+               Ptr RawTH1D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetLineStyle"
-               c_th1d_getlinestyle :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetLineStyle" c_th1d_getlinestyle ::
+               Ptr RawTH1D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetLineWidth"
-               c_th1d_getlinewidth :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetLineWidth" c_th1d_getlinewidth ::
+               Ptr RawTH1D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_ResetAttLine"
-               c_th1d_resetattline :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_ResetAttLine" c_th1d_resetattline ::
+               Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetLineAttributes"
-               c_th1d_setlineattributes :: Ptr RawTH1D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetLineAttributes" c_th1d_setlineattributes
+               :: Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetLineColor"
-               c_th1d_setlinecolor :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetLineColor" c_th1d_setlinecolor ::
+               Ptr RawTH1D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetLineStyle"
-               c_th1d_setlinestyle :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetLineStyle" c_th1d_setlinestyle ::
+               Ptr RawTH1D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetLineWidth"
-               c_th1d_setlinewidth :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetLineWidth" c_th1d_setlinewidth ::
+               Ptr RawTH1D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetFillColor"
-               c_th1d_setfillcolor :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetFillColor" c_th1d_setfillcolor ::
+               Ptr RawTH1D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetFillStyle"
-               c_th1d_setfillstyle :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetFillStyle" c_th1d_setfillstyle ::
+               Ptr RawTH1D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMarkerColor"
-               c_th1d_getmarkercolor :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMarkerColor" c_th1d_getmarkercolor ::
+               Ptr RawTH1D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMarkerStyle"
-               c_th1d_getmarkerstyle :: Ptr RawTH1D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMarkerStyle" c_th1d_getmarkerstyle ::
+               Ptr RawTH1D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetMarkerSize"
-               c_th1d_getmarkersize :: Ptr RawTH1D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_GetMarkerSize" c_th1d_getmarkersize ::
+               Ptr RawTH1D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_ResetAttMarker"
-               c_th1d_resetattmarker :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_ResetAttMarker" c_th1d_resetattmarker ::
+               Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1D.h TH1D_SetMarkerAttributes"
                c_th1d_setmarkerattributes :: Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetMarkerColor"
-               c_th1d_setmarkercolor :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetMarkerColor" c_th1d_setmarkercolor ::
+               Ptr RawTH1D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetMarkerStyle"
-               c_th1d_setmarkerstyle :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetMarkerStyle" c_th1d_setmarkerstyle ::
+               Ptr RawTH1D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SetMarkerSize"
-               c_th1d_setmarkersize :: Ptr RawTH1D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_SetMarkerSize" c_th1d_setmarkersize ::
+               Ptr RawTH1D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Draw" c_th1d_draw
-               :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Clear"
+               c_th1d_clear :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_FindObject"
-               c_th1d_findobject :: Ptr RawTH1D -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Draw"
+               c_th1d_draw :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH1D.h TH1D_FindObject" c_th1d_findobject ::
+               Ptr RawTH1D -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetName"
                c_th1d_getname :: Ptr RawTH1D -> IO CString
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_IsA" c_th1d_isa ::
-               Ptr RawTH1D -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_IsA"
+               c_th1d_isa :: Ptr RawTH1D -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Paint" c_th1d_paint
-               :: Ptr RawTH1D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Paint"
+               c_th1d_paint :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_printObj"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_printObj"
                c_th1d_printobj :: Ptr RawTH1D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_SaveAs"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SaveAs"
                c_th1d_saveas :: Ptr RawTH1D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_Write" c_th1d_write
-               :: Ptr RawTH1D -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Write"
+               c_th1d_write :: Ptr RawTH1D -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_delete"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_Write_"
+               c_th1d_write_ :: Ptr RawTH1D -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_delete"
                c_th1d_delete :: Ptr RawTH1D -> IO ()
 
-foreign import ccall safe "HROOTHistTH1D.h TH1D_newTH1D"
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_GetAt"
+               c_th1d_getat :: Ptr RawTH1D -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetArray"
+               c_th1d_setarray :: Ptr RawTH1D -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_SetAt"
+               c_th1d_setat :: Ptr RawTH1D -> CDouble -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1D.h TH1D_newTH1D"
                c_th1d_newth1d ::
                CString ->
                  CString -> CInt -> CDouble -> CDouble -> IO (Ptr RawTH1D)
diff --git a/src/HROOT/Hist/TH1D/Implementation.hs b/src/HROOT/Hist/TH1D/Implementation.hs
--- a/src/HROOT/Hist/TH1D/Implementation.hs
+++ b/src/HROOT/Hist/TH1D/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1D.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.FFI
 import HROOT.Hist.TH1D.Interface
 import HROOT.Hist.TH1D.Cast
+import HROOT.Hist.TH1D.RawType
+import HROOT.Hist.TH1D.Cast
+import HROOT.Hist.TH1D.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -45,20 +54,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH1D TH1D
+instance () => ITH1D (TH1D) where
 
-instance ITH1 TH1D where
+instance () => ITH1 (TH1D) where
         add = xform2 c_th1d_add
         addBinContent = xform2 c_th1d_addbincontent
         chi2Test = xform3 c_th1d_chi2test
-        computeIntegral = xform0 c_th1d_computeintegral
         directoryAutoAdd = xform1 c_th1d_directoryautoadd
         divide = xform5 c_th1d_divide
         drawCopyTH1 = xform1 c_th1d_drawcopyth1
@@ -130,9 +138,6 @@
         getRMS = xform1 c_th1d_getrms
         getRMSError = xform1 c_th1d_getrmserror
         getSkewness = xform1 c_th1d_getskewness
-        integral1 = xform3 c_th1d_integral1
-        interpolate1 = xform1 c_th1d_interpolate1
-        interpolate2 = xform2 c_th1d_interpolate2
         interpolate3 = xform3 c_th1d_interpolate3
         kolmogorovTest = xform2 c_th1d_kolmogorovtest
         labelsDeflate = xform1 c_th1d_labelsdeflate
@@ -187,14 +192,14 @@
         smooth = xform2 c_th1d_smooth
         sumw2 = xform0 c_th1d_sumw2
 
-instance ITArrayD TH1D
+instance () => ITArrayD (TH1D) where
 
-instance ITNamed TH1D where
+instance () => ITNamed (TH1D) where
         setName = xform1 c_th1d_setname
         setNameTitle = xform2 c_th1d_setnametitle
         setTitle = xform1 c_th1d_settitle
 
-instance ITAttLine TH1D where
+instance () => ITAttLine (TH1D) where
         getLineColor = xform0 c_th1d_getlinecolor
         getLineStyle = xform0 c_th1d_getlinestyle
         getLineWidth = xform0 c_th1d_getlinewidth
@@ -204,11 +209,11 @@
         setLineStyle = xform1 c_th1d_setlinestyle
         setLineWidth = xform1 c_th1d_setlinewidth
 
-instance ITAttFill TH1D where
+instance () => ITAttFill (TH1D) where
         setFillColor = xform1 c_th1d_setfillcolor
         setFillStyle = xform1 c_th1d_setfillstyle
 
-instance ITAttMarker TH1D where
+instance () => ITAttMarker (TH1D) where
         getMarkerColor = xform0 c_th1d_getmarkercolor
         getMarkerStyle = xform0 c_th1d_getmarkerstyle
         getMarkerSize = xform0 c_th1d_getmarkersize
@@ -218,7 +223,8 @@
         setMarkerStyle = xform1 c_th1d_setmarkerstyle
         setMarkerSize = xform1 c_th1d_setmarkersize
 
-instance ITObject TH1D where
+instance () => ITObject (TH1D) where
+        clear = xform1 c_th1d_clear
         draw = xform1 c_th1d_draw
         findObject = xform1 c_th1d_findobject
         getName = xform0 c_th1d_getname
@@ -227,11 +233,15 @@
         printObj = xform1 c_th1d_printobj
         saveAs = xform2 c_th1d_saveas
         write = xform3 c_th1d_write
+        write_ = xform0 c_th1d_write_
 
-instance IDeletable TH1D where
+instance () => IDeletable (TH1D) where
         delete = xform0 c_th1d_delete
 
-instance ITArray TH1D
+instance () => ITArray (TH1D) where
+        getAt = xform1 c_th1d_getat
+        setArray = xform1 c_th1d_setarray
+        setAt = xform2 c_th1d_setat
 
 newTH1D ::
           (Castable c1 CString, Castable c0 CString) =>
diff --git a/src/HROOT/Hist/TH1D/Interface.hs b/src/HROOT/Hist/TH1D/Interface.hs
--- a/src/HROOT/Hist/TH1D/Interface.hs
+++ b/src/HROOT/Hist/TH1D/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1D.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TArrayD.Interface
 
-class (ITH1 a, ITArrayD a) => ITH1D a
+class (ITH1 a, ITArrayD a) => ITH1D a where
 
 upcastTH1D :: forall a . (FPtr a, ITH1D a) => a -> TH1D
 upcastTH1D h
diff --git a/src/HROOT/Hist/TH1D/RawType.hs b/src/HROOT/Hist/TH1D/RawType.hs
--- a/src/HROOT/Hist/TH1D/RawType.hs
+++ b/src/HROOT/Hist/TH1D/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1D
 
 newtype TH1D = TH1D (Ptr RawTH1D)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH1D where
+instance () => FPtr (TH1D) where
         type Raw TH1D = RawTH1D
         get_fptr (TH1D ptr) = ptr
         cast_fptr_to_obj = TH1D
diff --git a/src/HROOT/Hist/TH1F/Cast.hs b/src/HROOT/Hist/TH1F/Cast.hs
--- a/src/HROOT/Hist/TH1F/Cast.hs
+++ b/src/HROOT/Hist/TH1F/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TH1F.Interface
 
-instance (ITH1F a, FPtr a) => Castable a (Ptr RawTH1F) where
+instance (ITH1F a, FPtr a) => Castable (a) (Ptr RawTH1F) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1F (Ptr RawTH1F) where
+instance () => Castable (TH1F) (Ptr RawTH1F) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1F/FFI.hsc b/src/HROOT/Hist/TH1F/FFI.hsc
--- a/src/HROOT/Hist/TH1F/FFI.hsc
+++ b/src/HROOT/Hist/TH1F/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1F.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1F.RawType
+import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -11,529 +14,615 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Add" c_th1f_add ::
-               Ptr RawTH1F -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Add"
+               c_th1f_add :: Ptr RawTH1F -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_AddBinContent"
-               c_th1f_addbincontent :: Ptr RawTH1F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_AddBinContent" c_th1f_addbincontent ::
+               Ptr RawTH1F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Chi2Test"
                c_th1f_chi2test ::
-               Ptr RawTH1F -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1F.h TH1F_ComputeIntegral"
-               c_th1f_computeintegral :: Ptr RawTH1F -> IO CDouble
+               Ptr RawTH1F -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_DirectoryAutoAdd"
-               c_th1f_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_DirectoryAutoAdd" c_th1f_directoryautoadd ::
                Ptr RawTH1F -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Divide"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Divide"
                c_th1f_divide ::
                Ptr RawTH1F ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_drawCopyTH1"
-               c_th1f_drawcopyth1 :: Ptr RawTH1F -> CString -> IO (Ptr RawTH1F)
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_drawCopyTH1" c_th1f_drawcopyth1 ::
+               Ptr RawTH1F -> CString -> IO (Ptr RawTH1F)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_DrawNormalized"
-               c_th1f_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_DrawNormalized" c_th1f_drawnormalized ::
                Ptr RawTH1F -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_drawPanelTH1"
-               c_th1f_drawpanelth1 :: Ptr RawTH1F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_drawPanelTH1" c_th1f_drawpanelth1 ::
+               Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_BufferEmpty"
-               c_th1f_bufferempty :: Ptr RawTH1F -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_BufferEmpty" c_th1f_bufferempty ::
+               Ptr RawTH1F -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_evalF" c_th1f_evalf
-               :: Ptr RawTH1F -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_evalF"
+               c_th1f_evalf :: Ptr RawTH1F -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FFT" c_th1f_fft ::
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_FFT"
+               c_th1f_fft ::
                Ptr RawTH1F -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_fill1" c_th1f_fill1
-               :: Ptr RawTH1F -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_fill1"
+               c_th1f_fill1 :: Ptr RawTH1F -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_fill1w"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_fill1w"
                c_th1f_fill1w :: Ptr RawTH1F -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_fillN1"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_fillN1"
                c_th1f_filln1 ::
-               Ptr RawTH1F ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH1F -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FillRandom"
-               c_th1f_fillrandom :: Ptr RawTH1F -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_FillRandom" c_th1f_fillrandom ::
+               Ptr RawTH1F -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FindBin"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_FindBin"
                c_th1f_findbin ::
                Ptr RawTH1F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FindFixBin"
-               c_th1f_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_FindFixBin" c_th1f_findfixbin ::
                Ptr RawTH1F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FindFirstBinAbove"
-               c_th1f_findfirstbinabove ::
-               Ptr RawTH1F -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_FindFirstBinAbove" c_th1f_findfirstbinabove
+               :: Ptr RawTH1F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FindLastBinAbove"
-               c_th1f_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_FindLastBinAbove" c_th1f_findlastbinabove ::
                Ptr RawTH1F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Fit" c_th1f_fit ::
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Fit"
+               c_th1f_fit ::
                Ptr RawTH1F ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FitPanelTH1"
-               c_th1f_fitpanelth1 :: Ptr RawTH1F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_FitPanelTH1" c_th1f_fitpanelth1 ::
+               Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getNdivisionA"
-               c_th1f_getndivisiona :: Ptr RawTH1F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getNdivisionA" c_th1f_getndivisiona ::
+               Ptr RawTH1F -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getAxisColorA"
-               c_th1f_getaxiscolora :: Ptr RawTH1F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getAxisColorA" c_th1f_getaxiscolora ::
+               Ptr RawTH1F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getLabelColorA"
-               c_th1f_getlabelcolora :: Ptr RawTH1F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getLabelColorA" c_th1f_getlabelcolora ::
+               Ptr RawTH1F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getLabelFontA"
-               c_th1f_getlabelfonta :: Ptr RawTH1F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getLabelFontA" c_th1f_getlabelfonta ::
+               Ptr RawTH1F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getLabelOffsetA"
-               c_th1f_getlabeloffseta :: Ptr RawTH1F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getLabelOffsetA" c_th1f_getlabeloffseta ::
+               Ptr RawTH1F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getLabelSizeA"
-               c_th1f_getlabelsizea :: Ptr RawTH1F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getLabelSizeA" c_th1f_getlabelsizea ::
+               Ptr RawTH1F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getTitleFontA"
-               c_th1f_gettitlefonta :: Ptr RawTH1F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getTitleFontA" c_th1f_gettitlefonta ::
+               Ptr RawTH1F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getTitleOffsetA"
-               c_th1f_gettitleoffseta :: Ptr RawTH1F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getTitleOffsetA" c_th1f_gettitleoffseta ::
+               Ptr RawTH1F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getTitleSizeA"
-               c_th1f_gettitlesizea :: Ptr RawTH1F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getTitleSizeA" c_th1f_gettitlesizea ::
+               Ptr RawTH1F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getTickLengthA"
-               c_th1f_getticklengtha :: Ptr RawTH1F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getTickLengthA" c_th1f_getticklengtha ::
+               Ptr RawTH1F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBarOffset"
-               c_th1f_getbaroffset :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBarOffset" c_th1f_getbaroffset ::
+               Ptr RawTH1F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBarWidth"
-               c_th1f_getbarwidth :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBarWidth" c_th1f_getbarwidth ::
+               Ptr RawTH1F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetContour"
-               c_th1f_getcontour :: Ptr RawTH1F -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetContour" c_th1f_getcontour ::
+               Ptr RawTH1F -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetContourLevel"
-               c_th1f_getcontourlevel :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetContourLevel" c_th1f_getcontourlevel ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetContourLevelPad"
-               c_th1f_getcontourlevelpad :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetContourLevelPad" c_th1f_getcontourlevelpad
+               :: Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBin"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetBin"
                c_th1f_getbin :: Ptr RawTH1F -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinCenter"
-               c_th1f_getbincenter :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinCenter" c_th1f_getbincenter ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinContent1"
-               c_th1f_getbincontent1 :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinContent1" c_th1f_getbincontent1 ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinContent2"
-               c_th1f_getbincontent2 :: Ptr RawTH1F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinContent2" c_th1f_getbincontent2 ::
+               Ptr RawTH1F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinContent3"
-               c_th1f_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinContent3" c_th1f_getbincontent3 ::
                Ptr RawTH1F -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinError1"
-               c_th1f_getbinerror1 :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinError1" c_th1f_getbinerror1 ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinError2"
-               c_th1f_getbinerror2 :: Ptr RawTH1F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinError2" c_th1f_getbinerror2 ::
+               Ptr RawTH1F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinError3"
-               c_th1f_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinError3" c_th1f_getbinerror3 ::
                Ptr RawTH1F -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinLowEdge"
-               c_th1f_getbinlowedge :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinLowEdge" c_th1f_getbinlowedge ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetBinWidth"
-               c_th1f_getbinwidth :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetBinWidth" c_th1f_getbinwidth ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetCellContent"
-               c_th1f_getcellcontent :: Ptr RawTH1F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetCellContent" c_th1f_getcellcontent ::
+               Ptr RawTH1F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetCellError"
-               c_th1f_getcellerror :: Ptr RawTH1F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetCellError" c_th1f_getcellerror ::
+               Ptr RawTH1F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetEntries"
-               c_th1f_getentries :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetEntries" c_th1f_getentries ::
+               Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1F.h TH1F_GetEffectiveEntries"
                c_th1f_geteffectiveentries :: Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetFunction"
-               c_th1f_getfunction :: Ptr RawTH1F -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetFunction" c_th1f_getfunction ::
+               Ptr RawTH1F -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetDimension"
-               c_th1f_getdimension :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetDimension" c_th1f_getdimension ::
+               Ptr RawTH1F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetKurtosis"
-               c_th1f_getkurtosis :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetKurtosis" c_th1f_getkurtosis ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetLowEdge"
-               c_th1f_getlowedge :: Ptr RawTH1F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetLowEdge" c_th1f_getlowedge ::
+               Ptr RawTH1F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getMaximumTH1"
-               c_th1f_getmaximumth1 :: Ptr RawTH1F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getMaximumTH1" c_th1f_getmaximumth1 ::
+               Ptr RawTH1F -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMaximumBin"
-               c_th1f_getmaximumbin :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMaximumBin" c_th1f_getmaximumbin ::
+               Ptr RawTH1F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMaximumStored"
-               c_th1f_getmaximumstored :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMaximumStored" c_th1f_getmaximumstored ::
+               Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getMinimumTH1"
-               c_th1f_getminimumth1 :: Ptr RawTH1F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getMinimumTH1" c_th1f_getminimumth1 ::
+               Ptr RawTH1F -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMinimumBin"
-               c_th1f_getminimumbin :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMinimumBin" c_th1f_getminimumbin ::
+               Ptr RawTH1F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMinimumStored"
-               c_th1f_getminimumstored :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMinimumStored" c_th1f_getminimumstored ::
+               Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMean"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetMean"
                c_th1f_getmean :: Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMeanError"
-               c_th1f_getmeanerror :: Ptr RawTH1F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMeanError" c_th1f_getmeanerror ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetNbinsX"
                c_th1f_getnbinsx :: Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetNbinsY"
                c_th1f_getnbinsy :: Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetNbinsZ"
                c_th1f_getnbinsz :: Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_getQuantilesTH1"
-               c_th1f_getquantilesth1 ::
-               Ptr RawTH1F -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_getQuantilesTH1" c_th1f_getquantilesth1 ::
+               Ptr RawTH1F -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetRandom"
                c_th1f_getrandom :: Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetStats"
-               c_th1f_getstats :: Ptr RawTH1F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetStats"
+               c_th1f_getstats :: Ptr RawTH1F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetSumOfWeights"
-               c_th1f_getsumofweights :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetSumOfWeights" c_th1f_getsumofweights ::
+               Ptr RawTH1F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetSumw2"
                c_th1f_getsumw2 :: Ptr RawTH1F -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetSumw2N"
                c_th1f_getsumw2n :: Ptr RawTH1F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetRMS"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetRMS"
                c_th1f_getrms :: Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetRMSError"
-               c_th1f_getrmserror :: Ptr RawTH1F -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetSkewness"
-               c_th1f_getskewness :: Ptr RawTH1F -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1F.h TH1F_integral1"
-               c_th1f_integral1 ::
-               Ptr RawTH1F -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1F.h TH1F_interpolate1"
-               c_th1f_interpolate1 :: Ptr RawTH1F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetRMSError" c_th1f_getrmserror ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_interpolate2"
-               c_th1f_interpolate2 ::
-               Ptr RawTH1F -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetSkewness" c_th1f_getskewness ::
+               Ptr RawTH1F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_interpolate3"
-               c_th1f_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_interpolate3" c_th1f_interpolate3 ::
                Ptr RawTH1F -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_KolmogorovTest"
-               c_th1f_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_KolmogorovTest" c_th1f_kolmogorovtest ::
                Ptr RawTH1F -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_LabelsDeflate"
-               c_th1f_labelsdeflate :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_LabelsDeflate" c_th1f_labelsdeflate ::
+               Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_LabelsInflate"
-               c_th1f_labelsinflate :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_LabelsInflate" c_th1f_labelsinflate ::
+               Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_LabelsOption"
-               c_th1f_labelsoption :: Ptr RawTH1F -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_LabelsOption" c_th1f_labelsoption ::
+               Ptr RawTH1F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_multiflyF"
                c_th1f_multiflyf :: Ptr RawTH1F -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Multiply"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Multiply"
                c_th1f_multiply ::
                Ptr RawTH1F ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_PutStats"
-               c_th1f_putstats :: Ptr RawTH1F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_PutStats"
+               c_th1f_putstats :: Ptr RawTH1F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Rebin" c_th1f_rebin
-               ::
-               Ptr RawTH1F -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Rebin"
+               c_th1f_rebin ::
+               Ptr RawTH1F -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_RebinAxis"
                c_th1f_rebinaxis :: Ptr RawTH1F -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Rebuild"
                c_th1f_rebuild :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_RecursiveRemove"
-               c_th1f_recursiveremove :: Ptr RawTH1F -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_RecursiveRemove" c_th1f_recursiveremove ::
+               Ptr RawTH1F -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Reset" c_th1f_reset
-               :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Reset"
+               c_th1f_reset :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_ResetStats"
-               c_th1f_resetstats :: Ptr RawTH1F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_ResetStats" c_th1f_resetstats ::
+               Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Scale" c_th1f_scale
-               :: Ptr RawTH1F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Scale"
+               c_th1f_scale :: Ptr RawTH1F -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setAxisColorA"
-               c_th1f_setaxiscolora :: Ptr RawTH1F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setAxisColorA" c_th1f_setaxiscolora ::
+               Ptr RawTH1F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetAxisRange"
-               c_th1f_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetAxisRange" c_th1f_setaxisrange ::
                Ptr RawTH1F -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetBarOffset"
-               c_th1f_setbaroffset :: Ptr RawTH1F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetBarOffset" c_th1f_setbaroffset ::
+               Ptr RawTH1F -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetBarWidth"
-               c_th1f_setbarwidth :: Ptr RawTH1F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetBarWidth" c_th1f_setbarwidth ::
+               Ptr RawTH1F -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBinContent1"
-               c_th1f_setbincontent1 :: Ptr RawTH1F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setBinContent1" c_th1f_setbincontent1 ::
+               Ptr RawTH1F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBinContent2"
-               c_th1f_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setBinContent2" c_th1f_setbincontent2 ::
                Ptr RawTH1F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBinContent3"
-               c_th1f_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setBinContent3" c_th1f_setbincontent3 ::
                Ptr RawTH1F -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBinError1"
-               c_th1f_setbinerror1 :: Ptr RawTH1F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setBinError1" c_th1f_setbinerror1 ::
+               Ptr RawTH1F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBinError2"
-               c_th1f_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setBinError2" c_th1f_setbinerror2 ::
                Ptr RawTH1F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBinError3"
-               c_th1f_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setBinError3" c_th1f_setbinerror3 ::
                Ptr RawTH1F -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBins1"
-               c_th1f_setbins1 :: Ptr RawTH1F -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_setBins1"
+               c_th1f_setbins1 :: Ptr RawTH1F -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBins2"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_setBins2"
                c_th1f_setbins2 ::
-               Ptr RawTH1F ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1F -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setBins3"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_setBins3"
                c_th1f_setbins3 ::
                Ptr RawTH1F ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetBinsLength"
-               c_th1f_setbinslength :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetBinsLength" c_th1f_setbinslength ::
+               Ptr RawTH1F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetBuffer"
                c_th1f_setbuffer :: Ptr RawTH1F -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetCellContent"
-               c_th1f_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetCellContent" c_th1f_setcellcontent ::
                Ptr RawTH1F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetContent"
-               c_th1f_setcontent :: Ptr RawTH1F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetContent" c_th1f_setcontent ::
+               Ptr RawTH1F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetContour"
-               c_th1f_setcontour :: Ptr RawTH1F -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetContour" c_th1f_setcontour ::
+               Ptr RawTH1F -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetContourLevel"
-               c_th1f_setcontourlevel :: Ptr RawTH1F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetContourLevel" c_th1f_setcontourlevel ::
+               Ptr RawTH1F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetDirectory"
-               c_th1f_setdirectory :: Ptr RawTH1F -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetDirectory" c_th1f_setdirectory ::
+               Ptr RawTH1F -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetEntries"
-               c_th1f_setentries :: Ptr RawTH1F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetEntries" c_th1f_setentries ::
+               Ptr RawTH1F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetError"
-               c_th1f_seterror :: Ptr RawTH1F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetError"
+               c_th1f_seterror :: Ptr RawTH1F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setLabelColorA"
-               c_th1f_setlabelcolora :: Ptr RawTH1F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setLabelColorA" c_th1f_setlabelcolora ::
+               Ptr RawTH1F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setLabelSizeA"
-               c_th1f_setlabelsizea :: Ptr RawTH1F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setLabelSizeA" c_th1f_setlabelsizea ::
+               Ptr RawTH1F -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setLabelFontA"
-               c_th1f_setlabelfonta :: Ptr RawTH1F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setLabelFontA" c_th1f_setlabelfonta ::
+               Ptr RawTH1F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_setLabelOffsetA"
-               c_th1f_setlabeloffseta ::
-               Ptr RawTH1F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_setLabelOffsetA" c_th1f_setlabeloffseta ::
+               Ptr RawTH1F -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetMaximum"
-               c_th1f_setmaximum :: Ptr RawTH1F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetMaximum" c_th1f_setmaximum ::
+               Ptr RawTH1F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetMinimum"
-               c_th1f_setminimum :: Ptr RawTH1F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetMinimum" c_th1f_setminimum ::
+               Ptr RawTH1F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetNormFactor"
-               c_th1f_setnormfactor :: Ptr RawTH1F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetNormFactor" c_th1f_setnormfactor ::
+               Ptr RawTH1F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetStats"
-               c_th1f_setstats :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetStats"
+               c_th1f_setstats :: Ptr RawTH1F -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetOption"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetOption"
                c_th1f_setoption :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetXTitle"
                c_th1f_setxtitle :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetYTitle"
                c_th1f_setytitle :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetZTitle"
                c_th1f_setztitle :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_ShowBackground"
-               c_th1f_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_ShowBackground" c_th1f_showbackground ::
                Ptr RawTH1F -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_ShowPeaks"
                c_th1f_showpeaks ::
                Ptr RawTH1F -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Smooth"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Smooth"
                c_th1f_smooth :: Ptr RawTH1F -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Sumw2" c_th1f_sumw2
-               :: Ptr RawTH1F -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Sumw2"
+               c_th1f_sumw2 :: Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetName"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetName"
                c_th1f_setname :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetNameTitle"
-               c_th1f_setnametitle :: Ptr RawTH1F -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetNameTitle" c_th1f_setnametitle ::
+               Ptr RawTH1F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetTitle"
                c_th1f_settitle :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetLineColor"
-               c_th1f_getlinecolor :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetLineColor" c_th1f_getlinecolor ::
+               Ptr RawTH1F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetLineStyle"
-               c_th1f_getlinestyle :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetLineStyle" c_th1f_getlinestyle ::
+               Ptr RawTH1F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetLineWidth"
-               c_th1f_getlinewidth :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetLineWidth" c_th1f_getlinewidth ::
+               Ptr RawTH1F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_ResetAttLine"
-               c_th1f_resetattline :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_ResetAttLine" c_th1f_resetattline ::
+               Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetLineAttributes"
-               c_th1f_setlineattributes :: Ptr RawTH1F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetLineAttributes" c_th1f_setlineattributes
+               :: Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetLineColor"
-               c_th1f_setlinecolor :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetLineColor" c_th1f_setlinecolor ::
+               Ptr RawTH1F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetLineStyle"
-               c_th1f_setlinestyle :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetLineStyle" c_th1f_setlinestyle ::
+               Ptr RawTH1F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetLineWidth"
-               c_th1f_setlinewidth :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetLineWidth" c_th1f_setlinewidth ::
+               Ptr RawTH1F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetFillColor"
-               c_th1f_setfillcolor :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetFillColor" c_th1f_setfillcolor ::
+               Ptr RawTH1F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetFillStyle"
-               c_th1f_setfillstyle :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetFillStyle" c_th1f_setfillstyle ::
+               Ptr RawTH1F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMarkerColor"
-               c_th1f_getmarkercolor :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMarkerColor" c_th1f_getmarkercolor ::
+               Ptr RawTH1F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMarkerStyle"
-               c_th1f_getmarkerstyle :: Ptr RawTH1F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMarkerStyle" c_th1f_getmarkerstyle ::
+               Ptr RawTH1F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetMarkerSize"
-               c_th1f_getmarkersize :: Ptr RawTH1F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_GetMarkerSize" c_th1f_getmarkersize ::
+               Ptr RawTH1F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_ResetAttMarker"
-               c_th1f_resetattmarker :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_ResetAttMarker" c_th1f_resetattmarker ::
+               Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1F.h TH1F_SetMarkerAttributes"
                c_th1f_setmarkerattributes :: Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetMarkerColor"
-               c_th1f_setmarkercolor :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetMarkerColor" c_th1f_setmarkercolor ::
+               Ptr RawTH1F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetMarkerStyle"
-               c_th1f_setmarkerstyle :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetMarkerStyle" c_th1f_setmarkerstyle ::
+               Ptr RawTH1F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SetMarkerSize"
-               c_th1f_setmarkersize :: Ptr RawTH1F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_SetMarkerSize" c_th1f_setmarkersize ::
+               Ptr RawTH1F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Draw" c_th1f_draw
-               :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Clear"
+               c_th1f_clear :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_FindObject"
-               c_th1f_findobject :: Ptr RawTH1F -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Draw"
+               c_th1f_draw :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH1F.h TH1F_FindObject" c_th1f_findobject ::
+               Ptr RawTH1F -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetName"
                c_th1f_getname :: Ptr RawTH1F -> IO CString
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_IsA" c_th1f_isa ::
-               Ptr RawTH1F -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_IsA"
+               c_th1f_isa :: Ptr RawTH1F -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Paint" c_th1f_paint
-               :: Ptr RawTH1F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Paint"
+               c_th1f_paint :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_printObj"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_printObj"
                c_th1f_printobj :: Ptr RawTH1F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_SaveAs"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SaveAs"
                c_th1f_saveas :: Ptr RawTH1F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_Write" c_th1f_write
-               :: Ptr RawTH1F -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Write"
+               c_th1f_write :: Ptr RawTH1F -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_delete"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_Write_"
+               c_th1f_write_ :: Ptr RawTH1F -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_delete"
                c_th1f_delete :: Ptr RawTH1F -> IO ()
 
-foreign import ccall safe "HROOTHistTH1F.h TH1F_newTH1F"
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_GetAt"
+               c_th1f_getat :: Ptr RawTH1F -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetArray"
+               c_th1f_setarray :: Ptr RawTH1F -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_SetAt"
+               c_th1f_setat :: Ptr RawTH1F -> CDouble -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1F.h TH1F_newTH1F"
                c_th1f_newth1f ::
                CString ->
                  CString -> CInt -> CDouble -> CDouble -> IO (Ptr RawTH1F)
diff --git a/src/HROOT/Hist/TH1F/Implementation.hs b/src/HROOT/Hist/TH1F/Implementation.hs
--- a/src/HROOT/Hist/TH1F/Implementation.hs
+++ b/src/HROOT/Hist/TH1F/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1F.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1F.RawType
 import HROOT.Hist.TH1F.FFI
 import HROOT.Hist.TH1F.Interface
 import HROOT.Hist.TH1F.Cast
+import HROOT.Hist.TH1F.RawType
+import HROOT.Hist.TH1F.Cast
+import HROOT.Hist.TH1F.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -48,20 +57,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH1F TH1F
+instance () => ITH1F (TH1F) where
 
-instance ITH1 TH1F where
+instance () => ITH1 (TH1F) where
         add = xform2 c_th1f_add
         addBinContent = xform2 c_th1f_addbincontent
         chi2Test = xform3 c_th1f_chi2test
-        computeIntegral = xform0 c_th1f_computeintegral
         directoryAutoAdd = xform1 c_th1f_directoryautoadd
         divide = xform5 c_th1f_divide
         drawCopyTH1 = xform1 c_th1f_drawcopyth1
@@ -133,9 +141,6 @@
         getRMS = xform1 c_th1f_getrms
         getRMSError = xform1 c_th1f_getrmserror
         getSkewness = xform1 c_th1f_getskewness
-        integral1 = xform3 c_th1f_integral1
-        interpolate1 = xform1 c_th1f_interpolate1
-        interpolate2 = xform2 c_th1f_interpolate2
         interpolate3 = xform3 c_th1f_interpolate3
         kolmogorovTest = xform2 c_th1f_kolmogorovtest
         labelsDeflate = xform1 c_th1f_labelsdeflate
@@ -190,14 +195,14 @@
         smooth = xform2 c_th1f_smooth
         sumw2 = xform0 c_th1f_sumw2
 
-instance ITArrayF TH1F
+instance () => ITArrayF (TH1F) where
 
-instance ITNamed TH1F where
+instance () => ITNamed (TH1F) where
         setName = xform1 c_th1f_setname
         setNameTitle = xform2 c_th1f_setnametitle
         setTitle = xform1 c_th1f_settitle
 
-instance ITAttLine TH1F where
+instance () => ITAttLine (TH1F) where
         getLineColor = xform0 c_th1f_getlinecolor
         getLineStyle = xform0 c_th1f_getlinestyle
         getLineWidth = xform0 c_th1f_getlinewidth
@@ -207,11 +212,11 @@
         setLineStyle = xform1 c_th1f_setlinestyle
         setLineWidth = xform1 c_th1f_setlinewidth
 
-instance ITAttFill TH1F where
+instance () => ITAttFill (TH1F) where
         setFillColor = xform1 c_th1f_setfillcolor
         setFillStyle = xform1 c_th1f_setfillstyle
 
-instance ITAttMarker TH1F where
+instance () => ITAttMarker (TH1F) where
         getMarkerColor = xform0 c_th1f_getmarkercolor
         getMarkerStyle = xform0 c_th1f_getmarkerstyle
         getMarkerSize = xform0 c_th1f_getmarkersize
@@ -221,7 +226,8 @@
         setMarkerStyle = xform1 c_th1f_setmarkerstyle
         setMarkerSize = xform1 c_th1f_setmarkersize
 
-instance ITObject TH1F where
+instance () => ITObject (TH1F) where
+        clear = xform1 c_th1f_clear
         draw = xform1 c_th1f_draw
         findObject = xform1 c_th1f_findobject
         getName = xform0 c_th1f_getname
@@ -230,11 +236,15 @@
         printObj = xform1 c_th1f_printobj
         saveAs = xform2 c_th1f_saveas
         write = xform3 c_th1f_write
+        write_ = xform0 c_th1f_write_
 
-instance IDeletable TH1F where
+instance () => IDeletable (TH1F) where
         delete = xform0 c_th1f_delete
 
-instance ITArray TH1F
+instance () => ITArray (TH1F) where
+        getAt = xform1 c_th1f_getat
+        setArray = xform1 c_th1f_setarray
+        setAt = xform2 c_th1f_setat
 
 newTH1F ::
           (Castable c1 CString, Castable c0 CString) =>
diff --git a/src/HROOT/Hist/TH1F/Interface.hs b/src/HROOT/Hist/TH1F/Interface.hs
--- a/src/HROOT/Hist/TH1F/Interface.hs
+++ b/src/HROOT/Hist/TH1F/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1F.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TArrayF.Interface
 
-class (ITH1 a, ITArrayF a) => ITH1F a
+class (ITH1 a, ITArrayF a) => ITH1F a where
 
 upcastTH1F :: forall a . (FPtr a, ITH1F a) => a -> TH1F
 upcastTH1F h
diff --git a/src/HROOT/Hist/TH1F/Interface.hs-boot b/src/HROOT/Hist/TH1F/Interface.hs-boot
deleted file mode 100644
--- a/src/HROOT/Hist/TH1F/Interface.hs-boot
+++ /dev/null
@@ -1,3 +0,0 @@
-module HROOT.Hist.TH1F.Interface where
-
-class ITH1F a
diff --git a/src/HROOT/Hist/TH1F/RawType.hs b/src/HROOT/Hist/TH1F/RawType.hs
--- a/src/HROOT/Hist/TH1F/RawType.hs
+++ b/src/HROOT/Hist/TH1F/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1F
 
 newtype TH1F = TH1F (Ptr RawTH1F)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH1F where
+instance () => FPtr (TH1F) where
         type Raw TH1F = RawTH1F
         get_fptr (TH1F ptr) = ptr
         cast_fptr_to_obj = TH1F
diff --git a/src/HROOT/Hist/TH1I/Cast.hs b/src/HROOT/Hist/TH1I/Cast.hs
--- a/src/HROOT/Hist/TH1I/Cast.hs
+++ b/src/HROOT/Hist/TH1I/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1I.RawType
 import HROOT.Hist.TH1I.Interface
 
-instance (ITH1I a, FPtr a) => Castable a (Ptr RawTH1I) where
+instance (ITH1I a, FPtr a) => Castable (a) (Ptr RawTH1I) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1I (Ptr RawTH1I) where
+instance () => Castable (TH1I) (Ptr RawTH1I) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1I/FFI.hsc b/src/HROOT/Hist/TH1I/FFI.hsc
--- a/src/HROOT/Hist/TH1I/FFI.hsc
+++ b/src/HROOT/Hist/TH1I/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1I.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1I.RawType
+import HROOT.Hist.TH1I.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -11,524 +14,610 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Add" c_th1i_add ::
-               Ptr RawTH1I -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Add"
+               c_th1i_add :: Ptr RawTH1I -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_AddBinContent"
-               c_th1i_addbincontent :: Ptr RawTH1I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_AddBinContent" c_th1i_addbincontent ::
+               Ptr RawTH1I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Chi2Test"
                c_th1i_chi2test ::
-               Ptr RawTH1I -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1I.h TH1I_ComputeIntegral"
-               c_th1i_computeintegral :: Ptr RawTH1I -> IO CDouble
+               Ptr RawTH1I -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_DirectoryAutoAdd"
-               c_th1i_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_DirectoryAutoAdd" c_th1i_directoryautoadd ::
                Ptr RawTH1I -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Divide"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Divide"
                c_th1i_divide ::
                Ptr RawTH1I ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_drawCopyTH1"
-               c_th1i_drawcopyth1 :: Ptr RawTH1I -> CString -> IO (Ptr RawTH1I)
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_drawCopyTH1" c_th1i_drawcopyth1 ::
+               Ptr RawTH1I -> CString -> IO (Ptr RawTH1I)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_DrawNormalized"
-               c_th1i_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_DrawNormalized" c_th1i_drawnormalized ::
                Ptr RawTH1I -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_drawPanelTH1"
-               c_th1i_drawpanelth1 :: Ptr RawTH1I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_drawPanelTH1" c_th1i_drawpanelth1 ::
+               Ptr RawTH1I -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_BufferEmpty"
-               c_th1i_bufferempty :: Ptr RawTH1I -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_BufferEmpty" c_th1i_bufferempty ::
+               Ptr RawTH1I -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_evalF" c_th1i_evalf
-               :: Ptr RawTH1I -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_evalF"
+               c_th1i_evalf :: Ptr RawTH1I -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FFT" c_th1i_fft ::
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_FFT"
+               c_th1i_fft ::
                Ptr RawTH1I -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_fill1" c_th1i_fill1
-               :: Ptr RawTH1I -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_fill1"
+               c_th1i_fill1 :: Ptr RawTH1I -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_fill1w"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_fill1w"
                c_th1i_fill1w :: Ptr RawTH1I -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_fillN1"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_fillN1"
                c_th1i_filln1 ::
-               Ptr RawTH1I ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH1I -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FillRandom"
-               c_th1i_fillrandom :: Ptr RawTH1I -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_FillRandom" c_th1i_fillrandom ::
+               Ptr RawTH1I -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FindBin"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_FindBin"
                c_th1i_findbin ::
                Ptr RawTH1I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FindFixBin"
-               c_th1i_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_FindFixBin" c_th1i_findfixbin ::
                Ptr RawTH1I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FindFirstBinAbove"
-               c_th1i_findfirstbinabove ::
-               Ptr RawTH1I -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_FindFirstBinAbove" c_th1i_findfirstbinabove
+               :: Ptr RawTH1I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FindLastBinAbove"
-               c_th1i_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_FindLastBinAbove" c_th1i_findlastbinabove ::
                Ptr RawTH1I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Fit" c_th1i_fit ::
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Fit"
+               c_th1i_fit ::
                Ptr RawTH1I ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FitPanelTH1"
-               c_th1i_fitpanelth1 :: Ptr RawTH1I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_FitPanelTH1" c_th1i_fitpanelth1 ::
+               Ptr RawTH1I -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getNdivisionA"
-               c_th1i_getndivisiona :: Ptr RawTH1I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getNdivisionA" c_th1i_getndivisiona ::
+               Ptr RawTH1I -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getAxisColorA"
-               c_th1i_getaxiscolora :: Ptr RawTH1I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getAxisColorA" c_th1i_getaxiscolora ::
+               Ptr RawTH1I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getLabelColorA"
-               c_th1i_getlabelcolora :: Ptr RawTH1I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getLabelColorA" c_th1i_getlabelcolora ::
+               Ptr RawTH1I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getLabelFontA"
-               c_th1i_getlabelfonta :: Ptr RawTH1I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getLabelFontA" c_th1i_getlabelfonta ::
+               Ptr RawTH1I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getLabelOffsetA"
-               c_th1i_getlabeloffseta :: Ptr RawTH1I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getLabelOffsetA" c_th1i_getlabeloffseta ::
+               Ptr RawTH1I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getLabelSizeA"
-               c_th1i_getlabelsizea :: Ptr RawTH1I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getLabelSizeA" c_th1i_getlabelsizea ::
+               Ptr RawTH1I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getTitleFontA"
-               c_th1i_gettitlefonta :: Ptr RawTH1I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getTitleFontA" c_th1i_gettitlefonta ::
+               Ptr RawTH1I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getTitleOffsetA"
-               c_th1i_gettitleoffseta :: Ptr RawTH1I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getTitleOffsetA" c_th1i_gettitleoffseta ::
+               Ptr RawTH1I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getTitleSizeA"
-               c_th1i_gettitlesizea :: Ptr RawTH1I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getTitleSizeA" c_th1i_gettitlesizea ::
+               Ptr RawTH1I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getTickLengthA"
-               c_th1i_getticklengtha :: Ptr RawTH1I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getTickLengthA" c_th1i_getticklengtha ::
+               Ptr RawTH1I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBarOffset"
-               c_th1i_getbaroffset :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBarOffset" c_th1i_getbaroffset ::
+               Ptr RawTH1I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBarWidth"
-               c_th1i_getbarwidth :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBarWidth" c_th1i_getbarwidth ::
+               Ptr RawTH1I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetContour"
-               c_th1i_getcontour :: Ptr RawTH1I -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetContour" c_th1i_getcontour ::
+               Ptr RawTH1I -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetContourLevel"
-               c_th1i_getcontourlevel :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetContourLevel" c_th1i_getcontourlevel ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetContourLevelPad"
-               c_th1i_getcontourlevelpad :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetContourLevelPad" c_th1i_getcontourlevelpad
+               :: Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBin"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetBin"
                c_th1i_getbin :: Ptr RawTH1I -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinCenter"
-               c_th1i_getbincenter :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinCenter" c_th1i_getbincenter ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinContent1"
-               c_th1i_getbincontent1 :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinContent1" c_th1i_getbincontent1 ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinContent2"
-               c_th1i_getbincontent2 :: Ptr RawTH1I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinContent2" c_th1i_getbincontent2 ::
+               Ptr RawTH1I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinContent3"
-               c_th1i_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinContent3" c_th1i_getbincontent3 ::
                Ptr RawTH1I -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinError1"
-               c_th1i_getbinerror1 :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinError1" c_th1i_getbinerror1 ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinError2"
-               c_th1i_getbinerror2 :: Ptr RawTH1I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinError2" c_th1i_getbinerror2 ::
+               Ptr RawTH1I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinError3"
-               c_th1i_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinError3" c_th1i_getbinerror3 ::
                Ptr RawTH1I -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinLowEdge"
-               c_th1i_getbinlowedge :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinLowEdge" c_th1i_getbinlowedge ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetBinWidth"
-               c_th1i_getbinwidth :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetBinWidth" c_th1i_getbinwidth ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetCellContent"
-               c_th1i_getcellcontent :: Ptr RawTH1I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetCellContent" c_th1i_getcellcontent ::
+               Ptr RawTH1I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetCellError"
-               c_th1i_getcellerror :: Ptr RawTH1I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetCellError" c_th1i_getcellerror ::
+               Ptr RawTH1I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetEntries"
-               c_th1i_getentries :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetEntries" c_th1i_getentries ::
+               Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1I.h TH1I_GetEffectiveEntries"
                c_th1i_geteffectiveentries :: Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetFunction"
-               c_th1i_getfunction :: Ptr RawTH1I -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetFunction" c_th1i_getfunction ::
+               Ptr RawTH1I -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetDimension"
-               c_th1i_getdimension :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetDimension" c_th1i_getdimension ::
+               Ptr RawTH1I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetKurtosis"
-               c_th1i_getkurtosis :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetKurtosis" c_th1i_getkurtosis ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetLowEdge"
-               c_th1i_getlowedge :: Ptr RawTH1I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetLowEdge" c_th1i_getlowedge ::
+               Ptr RawTH1I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getMaximumTH1"
-               c_th1i_getmaximumth1 :: Ptr RawTH1I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getMaximumTH1" c_th1i_getmaximumth1 ::
+               Ptr RawTH1I -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMaximumBin"
-               c_th1i_getmaximumbin :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMaximumBin" c_th1i_getmaximumbin ::
+               Ptr RawTH1I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMaximumStored"
-               c_th1i_getmaximumstored :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMaximumStored" c_th1i_getmaximumstored ::
+               Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getMinimumTH1"
-               c_th1i_getminimumth1 :: Ptr RawTH1I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getMinimumTH1" c_th1i_getminimumth1 ::
+               Ptr RawTH1I -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMinimumBin"
-               c_th1i_getminimumbin :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMinimumBin" c_th1i_getminimumbin ::
+               Ptr RawTH1I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMinimumStored"
-               c_th1i_getminimumstored :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMinimumStored" c_th1i_getminimumstored ::
+               Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMean"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetMean"
                c_th1i_getmean :: Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMeanError"
-               c_th1i_getmeanerror :: Ptr RawTH1I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMeanError" c_th1i_getmeanerror ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetNbinsX"
                c_th1i_getnbinsx :: Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetNbinsY"
                c_th1i_getnbinsy :: Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetNbinsZ"
                c_th1i_getnbinsz :: Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_getQuantilesTH1"
-               c_th1i_getquantilesth1 ::
-               Ptr RawTH1I -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_getQuantilesTH1" c_th1i_getquantilesth1 ::
+               Ptr RawTH1I -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetRandom"
                c_th1i_getrandom :: Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetStats"
-               c_th1i_getstats :: Ptr RawTH1I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetStats"
+               c_th1i_getstats :: Ptr RawTH1I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetSumOfWeights"
-               c_th1i_getsumofweights :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetSumOfWeights" c_th1i_getsumofweights ::
+               Ptr RawTH1I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetSumw2"
                c_th1i_getsumw2 :: Ptr RawTH1I -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetSumw2N"
                c_th1i_getsumw2n :: Ptr RawTH1I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetRMS"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetRMS"
                c_th1i_getrms :: Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetRMSError"
-               c_th1i_getrmserror :: Ptr RawTH1I -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetSkewness"
-               c_th1i_getskewness :: Ptr RawTH1I -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1I.h TH1I_integral1"
-               c_th1i_integral1 ::
-               Ptr RawTH1I -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1I.h TH1I_interpolate1"
-               c_th1i_interpolate1 :: Ptr RawTH1I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetRMSError" c_th1i_getrmserror ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_interpolate2"
-               c_th1i_interpolate2 ::
-               Ptr RawTH1I -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetSkewness" c_th1i_getskewness ::
+               Ptr RawTH1I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_interpolate3"
-               c_th1i_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_interpolate3" c_th1i_interpolate3 ::
                Ptr RawTH1I -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_KolmogorovTest"
-               c_th1i_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_KolmogorovTest" c_th1i_kolmogorovtest ::
                Ptr RawTH1I -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_LabelsDeflate"
-               c_th1i_labelsdeflate :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_LabelsDeflate" c_th1i_labelsdeflate ::
+               Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_LabelsInflate"
-               c_th1i_labelsinflate :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_LabelsInflate" c_th1i_labelsinflate ::
+               Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_LabelsOption"
-               c_th1i_labelsoption :: Ptr RawTH1I -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_LabelsOption" c_th1i_labelsoption ::
+               Ptr RawTH1I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_multiflyF"
                c_th1i_multiflyf :: Ptr RawTH1I -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Multiply"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Multiply"
                c_th1i_multiply ::
                Ptr RawTH1I ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_PutStats"
-               c_th1i_putstats :: Ptr RawTH1I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_PutStats"
+               c_th1i_putstats :: Ptr RawTH1I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Rebin" c_th1i_rebin
-               ::
-               Ptr RawTH1I -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Rebin"
+               c_th1i_rebin ::
+               Ptr RawTH1I -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_RebinAxis"
                c_th1i_rebinaxis :: Ptr RawTH1I -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Rebuild"
                c_th1i_rebuild :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_RecursiveRemove"
-               c_th1i_recursiveremove :: Ptr RawTH1I -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_RecursiveRemove" c_th1i_recursiveremove ::
+               Ptr RawTH1I -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Reset" c_th1i_reset
-               :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Reset"
+               c_th1i_reset :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_ResetStats"
-               c_th1i_resetstats :: Ptr RawTH1I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_ResetStats" c_th1i_resetstats ::
+               Ptr RawTH1I -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Scale" c_th1i_scale
-               :: Ptr RawTH1I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Scale"
+               c_th1i_scale :: Ptr RawTH1I -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setAxisColorA"
-               c_th1i_setaxiscolora :: Ptr RawTH1I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setAxisColorA" c_th1i_setaxiscolora ::
+               Ptr RawTH1I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetAxisRange"
-               c_th1i_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetAxisRange" c_th1i_setaxisrange ::
                Ptr RawTH1I -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetBarOffset"
-               c_th1i_setbaroffset :: Ptr RawTH1I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetBarOffset" c_th1i_setbaroffset ::
+               Ptr RawTH1I -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetBarWidth"
-               c_th1i_setbarwidth :: Ptr RawTH1I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetBarWidth" c_th1i_setbarwidth ::
+               Ptr RawTH1I -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBinContent1"
-               c_th1i_setbincontent1 :: Ptr RawTH1I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setBinContent1" c_th1i_setbincontent1 ::
+               Ptr RawTH1I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBinContent2"
-               c_th1i_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setBinContent2" c_th1i_setbincontent2 ::
                Ptr RawTH1I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBinContent3"
-               c_th1i_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setBinContent3" c_th1i_setbincontent3 ::
                Ptr RawTH1I -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBinError1"
-               c_th1i_setbinerror1 :: Ptr RawTH1I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setBinError1" c_th1i_setbinerror1 ::
+               Ptr RawTH1I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBinError2"
-               c_th1i_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setBinError2" c_th1i_setbinerror2 ::
                Ptr RawTH1I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBinError3"
-               c_th1i_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setBinError3" c_th1i_setbinerror3 ::
                Ptr RawTH1I -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBins1"
-               c_th1i_setbins1 :: Ptr RawTH1I -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_setBins1"
+               c_th1i_setbins1 :: Ptr RawTH1I -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBins2"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_setBins2"
                c_th1i_setbins2 ::
-               Ptr RawTH1I ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1I -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setBins3"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_setBins3"
                c_th1i_setbins3 ::
                Ptr RawTH1I ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetBinsLength"
-               c_th1i_setbinslength :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetBinsLength" c_th1i_setbinslength ::
+               Ptr RawTH1I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetBuffer"
                c_th1i_setbuffer :: Ptr RawTH1I -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetCellContent"
-               c_th1i_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetCellContent" c_th1i_setcellcontent ::
                Ptr RawTH1I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetContent"
-               c_th1i_setcontent :: Ptr RawTH1I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetContent" c_th1i_setcontent ::
+               Ptr RawTH1I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetContour"
-               c_th1i_setcontour :: Ptr RawTH1I -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetContour" c_th1i_setcontour ::
+               Ptr RawTH1I -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetContourLevel"
-               c_th1i_setcontourlevel :: Ptr RawTH1I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetContourLevel" c_th1i_setcontourlevel ::
+               Ptr RawTH1I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetDirectory"
-               c_th1i_setdirectory :: Ptr RawTH1I -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetDirectory" c_th1i_setdirectory ::
+               Ptr RawTH1I -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetEntries"
-               c_th1i_setentries :: Ptr RawTH1I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetEntries" c_th1i_setentries ::
+               Ptr RawTH1I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetError"
-               c_th1i_seterror :: Ptr RawTH1I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetError"
+               c_th1i_seterror :: Ptr RawTH1I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setLabelColorA"
-               c_th1i_setlabelcolora :: Ptr RawTH1I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setLabelColorA" c_th1i_setlabelcolora ::
+               Ptr RawTH1I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setLabelSizeA"
-               c_th1i_setlabelsizea :: Ptr RawTH1I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setLabelSizeA" c_th1i_setlabelsizea ::
+               Ptr RawTH1I -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setLabelFontA"
-               c_th1i_setlabelfonta :: Ptr RawTH1I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setLabelFontA" c_th1i_setlabelfonta ::
+               Ptr RawTH1I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_setLabelOffsetA"
-               c_th1i_setlabeloffseta ::
-               Ptr RawTH1I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_setLabelOffsetA" c_th1i_setlabeloffseta ::
+               Ptr RawTH1I -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetMaximum"
-               c_th1i_setmaximum :: Ptr RawTH1I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetMaximum" c_th1i_setmaximum ::
+               Ptr RawTH1I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetMinimum"
-               c_th1i_setminimum :: Ptr RawTH1I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetMinimum" c_th1i_setminimum ::
+               Ptr RawTH1I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetNormFactor"
-               c_th1i_setnormfactor :: Ptr RawTH1I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetNormFactor" c_th1i_setnormfactor ::
+               Ptr RawTH1I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetStats"
-               c_th1i_setstats :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetStats"
+               c_th1i_setstats :: Ptr RawTH1I -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetOption"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetOption"
                c_th1i_setoption :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetXTitle"
                c_th1i_setxtitle :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetYTitle"
                c_th1i_setytitle :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetZTitle"
                c_th1i_setztitle :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_ShowBackground"
-               c_th1i_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_ShowBackground" c_th1i_showbackground ::
                Ptr RawTH1I -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_ShowPeaks"
                c_th1i_showpeaks ::
                Ptr RawTH1I -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Smooth"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Smooth"
                c_th1i_smooth :: Ptr RawTH1I -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Sumw2" c_th1i_sumw2
-               :: Ptr RawTH1I -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Sumw2"
+               c_th1i_sumw2 :: Ptr RawTH1I -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetName"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetName"
                c_th1i_setname :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetNameTitle"
-               c_th1i_setnametitle :: Ptr RawTH1I -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetNameTitle" c_th1i_setnametitle ::
+               Ptr RawTH1I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetTitle"
                c_th1i_settitle :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetLineColor"
-               c_th1i_getlinecolor :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetLineColor" c_th1i_getlinecolor ::
+               Ptr RawTH1I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetLineStyle"
-               c_th1i_getlinestyle :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetLineStyle" c_th1i_getlinestyle ::
+               Ptr RawTH1I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetLineWidth"
-               c_th1i_getlinewidth :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetLineWidth" c_th1i_getlinewidth ::
+               Ptr RawTH1I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_ResetAttLine"
-               c_th1i_resetattline :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_ResetAttLine" c_th1i_resetattline ::
+               Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetLineAttributes"
-               c_th1i_setlineattributes :: Ptr RawTH1I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetLineAttributes" c_th1i_setlineattributes
+               :: Ptr RawTH1I -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetLineColor"
-               c_th1i_setlinecolor :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetLineColor" c_th1i_setlinecolor ::
+               Ptr RawTH1I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetLineStyle"
-               c_th1i_setlinestyle :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetLineStyle" c_th1i_setlinestyle ::
+               Ptr RawTH1I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetLineWidth"
-               c_th1i_setlinewidth :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetLineWidth" c_th1i_setlinewidth ::
+               Ptr RawTH1I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetFillColor"
-               c_th1i_setfillcolor :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetFillColor" c_th1i_setfillcolor ::
+               Ptr RawTH1I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetFillStyle"
-               c_th1i_setfillstyle :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetFillStyle" c_th1i_setfillstyle ::
+               Ptr RawTH1I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMarkerColor"
-               c_th1i_getmarkercolor :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMarkerColor" c_th1i_getmarkercolor ::
+               Ptr RawTH1I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMarkerStyle"
-               c_th1i_getmarkerstyle :: Ptr RawTH1I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMarkerStyle" c_th1i_getmarkerstyle ::
+               Ptr RawTH1I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetMarkerSize"
-               c_th1i_getmarkersize :: Ptr RawTH1I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_GetMarkerSize" c_th1i_getmarkersize ::
+               Ptr RawTH1I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_ResetAttMarker"
-               c_th1i_resetattmarker :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_ResetAttMarker" c_th1i_resetattmarker ::
+               Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1I.h TH1I_SetMarkerAttributes"
                c_th1i_setmarkerattributes :: Ptr RawTH1I -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetMarkerColor"
-               c_th1i_setmarkercolor :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetMarkerColor" c_th1i_setmarkercolor ::
+               Ptr RawTH1I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetMarkerStyle"
-               c_th1i_setmarkerstyle :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetMarkerStyle" c_th1i_setmarkerstyle ::
+               Ptr RawTH1I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SetMarkerSize"
-               c_th1i_setmarkersize :: Ptr RawTH1I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_SetMarkerSize" c_th1i_setmarkersize ::
+               Ptr RawTH1I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Draw" c_th1i_draw
-               :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Clear"
+               c_th1i_clear :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_FindObject"
-               c_th1i_findobject :: Ptr RawTH1I -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Draw"
+               c_th1i_draw :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH1I.h TH1I_FindObject" c_th1i_findobject ::
+               Ptr RawTH1I -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetName"
                c_th1i_getname :: Ptr RawTH1I -> IO CString
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_IsA" c_th1i_isa ::
-               Ptr RawTH1I -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_IsA"
+               c_th1i_isa :: Ptr RawTH1I -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Paint" c_th1i_paint
-               :: Ptr RawTH1I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Paint"
+               c_th1i_paint :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_printObj"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_printObj"
                c_th1i_printobj :: Ptr RawTH1I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_SaveAs"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SaveAs"
                c_th1i_saveas :: Ptr RawTH1I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_Write" c_th1i_write
-               :: Ptr RawTH1I -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Write"
+               c_th1i_write :: Ptr RawTH1I -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1I.h TH1I_delete"
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_Write_"
+               c_th1i_write_ :: Ptr RawTH1I -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_delete"
                c_th1i_delete :: Ptr RawTH1I -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_GetAt"
+               c_th1i_getat :: Ptr RawTH1I -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetArray"
+               c_th1i_setarray :: Ptr RawTH1I -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1I.h TH1I_SetAt"
+               c_th1i_setat :: Ptr RawTH1I -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH1I/Implementation.hs b/src/HROOT/Hist/TH1I/Implementation.hs
--- a/src/HROOT/Hist/TH1I/Implementation.hs
+++ b/src/HROOT/Hist/TH1I/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1I.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1I.RawType
 import HROOT.Hist.TH1I.FFI
 import HROOT.Hist.TH1I.Interface
 import HROOT.Hist.TH1I.Cast
+import HROOT.Hist.TH1I.RawType
+import HROOT.Hist.TH1I.Cast
+import HROOT.Hist.TH1I.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -48,20 +57,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH1I TH1I
+instance () => ITH1I (TH1I) where
 
-instance ITH1 TH1I where
+instance () => ITH1 (TH1I) where
         add = xform2 c_th1i_add
         addBinContent = xform2 c_th1i_addbincontent
         chi2Test = xform3 c_th1i_chi2test
-        computeIntegral = xform0 c_th1i_computeintegral
         directoryAutoAdd = xform1 c_th1i_directoryautoadd
         divide = xform5 c_th1i_divide
         drawCopyTH1 = xform1 c_th1i_drawcopyth1
@@ -133,9 +141,6 @@
         getRMS = xform1 c_th1i_getrms
         getRMSError = xform1 c_th1i_getrmserror
         getSkewness = xform1 c_th1i_getskewness
-        integral1 = xform3 c_th1i_integral1
-        interpolate1 = xform1 c_th1i_interpolate1
-        interpolate2 = xform2 c_th1i_interpolate2
         interpolate3 = xform3 c_th1i_interpolate3
         kolmogorovTest = xform2 c_th1i_kolmogorovtest
         labelsDeflate = xform1 c_th1i_labelsdeflate
@@ -190,14 +195,14 @@
         smooth = xform2 c_th1i_smooth
         sumw2 = xform0 c_th1i_sumw2
 
-instance ITArrayI TH1I
+instance () => ITArrayI (TH1I) where
 
-instance ITNamed TH1I where
+instance () => ITNamed (TH1I) where
         setName = xform1 c_th1i_setname
         setNameTitle = xform2 c_th1i_setnametitle
         setTitle = xform1 c_th1i_settitle
 
-instance ITAttLine TH1I where
+instance () => ITAttLine (TH1I) where
         getLineColor = xform0 c_th1i_getlinecolor
         getLineStyle = xform0 c_th1i_getlinestyle
         getLineWidth = xform0 c_th1i_getlinewidth
@@ -207,11 +212,11 @@
         setLineStyle = xform1 c_th1i_setlinestyle
         setLineWidth = xform1 c_th1i_setlinewidth
 
-instance ITAttFill TH1I where
+instance () => ITAttFill (TH1I) where
         setFillColor = xform1 c_th1i_setfillcolor
         setFillStyle = xform1 c_th1i_setfillstyle
 
-instance ITAttMarker TH1I where
+instance () => ITAttMarker (TH1I) where
         getMarkerColor = xform0 c_th1i_getmarkercolor
         getMarkerStyle = xform0 c_th1i_getmarkerstyle
         getMarkerSize = xform0 c_th1i_getmarkersize
@@ -221,7 +226,8 @@
         setMarkerStyle = xform1 c_th1i_setmarkerstyle
         setMarkerSize = xform1 c_th1i_setmarkersize
 
-instance ITObject TH1I where
+instance () => ITObject (TH1I) where
+        clear = xform1 c_th1i_clear
         draw = xform1 c_th1i_draw
         findObject = xform1 c_th1i_findobject
         getName = xform0 c_th1i_getname
@@ -230,8 +236,12 @@
         printObj = xform1 c_th1i_printobj
         saveAs = xform2 c_th1i_saveas
         write = xform3 c_th1i_write
+        write_ = xform0 c_th1i_write_
 
-instance IDeletable TH1I where
+instance () => IDeletable (TH1I) where
         delete = xform0 c_th1i_delete
 
-instance ITArray TH1I
+instance () => ITArray (TH1I) where
+        getAt = xform1 c_th1i_getat
+        setArray = xform1 c_th1i_setarray
+        setAt = xform2 c_th1i_setat
diff --git a/src/HROOT/Hist/TH1I/Interface.hs b/src/HROOT/Hist/TH1I/Interface.hs
--- a/src/HROOT/Hist/TH1I/Interface.hs
+++ b/src/HROOT/Hist/TH1I/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1I.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TArrayI.Interface
 
-class (ITH1 a, ITArrayI a) => ITH1I a
+class (ITH1 a, ITArrayI a) => ITH1I a where
 
 upcastTH1I :: forall a . (FPtr a, ITH1I a) => a -> TH1I
 upcastTH1I h
diff --git a/src/HROOT/Hist/TH1I/RawType.hs b/src/HROOT/Hist/TH1I/RawType.hs
--- a/src/HROOT/Hist/TH1I/RawType.hs
+++ b/src/HROOT/Hist/TH1I/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1I
 
 newtype TH1I = TH1I (Ptr RawTH1I)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH1I where
+instance () => FPtr (TH1I) where
         type Raw TH1I = RawTH1I
         get_fptr (TH1I ptr) = ptr
         cast_fptr_to_obj = TH1I
diff --git a/src/HROOT/Hist/TH1K/Cast.hs b/src/HROOT/Hist/TH1K/Cast.hs
--- a/src/HROOT/Hist/TH1K/Cast.hs
+++ b/src/HROOT/Hist/TH1K/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1K.RawType
 import HROOT.Hist.TH1K.Interface
 
-instance (ITH1K a, FPtr a) => Castable a (Ptr RawTH1K) where
+instance (ITH1K a, FPtr a) => Castable (a) (Ptr RawTH1K) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1K (Ptr RawTH1K) where
+instance () => Castable (TH1K) (Ptr RawTH1K) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1K/FFI.hsc b/src/HROOT/Hist/TH1K/FFI.hsc
--- a/src/HROOT/Hist/TH1K/FFI.hsc
+++ b/src/HROOT/Hist/TH1K/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1K.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1K.RawType
+import HROOT.Hist.TH1K.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -11,524 +14,610 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Add" c_th1k_add ::
-               Ptr RawTH1K -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Add"
+               c_th1k_add :: Ptr RawTH1K -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_AddBinContent"
-               c_th1k_addbincontent :: Ptr RawTH1K -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_AddBinContent" c_th1k_addbincontent ::
+               Ptr RawTH1K -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Chi2Test"
                c_th1k_chi2test ::
-               Ptr RawTH1K -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1K.h TH1K_ComputeIntegral"
-               c_th1k_computeintegral :: Ptr RawTH1K -> IO CDouble
+               Ptr RawTH1K -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_DirectoryAutoAdd"
-               c_th1k_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_DirectoryAutoAdd" c_th1k_directoryautoadd ::
                Ptr RawTH1K -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Divide"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Divide"
                c_th1k_divide ::
                Ptr RawTH1K ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_drawCopyTH1"
-               c_th1k_drawcopyth1 :: Ptr RawTH1K -> CString -> IO (Ptr RawTH1K)
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_drawCopyTH1" c_th1k_drawcopyth1 ::
+               Ptr RawTH1K -> CString -> IO (Ptr RawTH1K)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_DrawNormalized"
-               c_th1k_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_DrawNormalized" c_th1k_drawnormalized ::
                Ptr RawTH1K -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_drawPanelTH1"
-               c_th1k_drawpanelth1 :: Ptr RawTH1K -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_drawPanelTH1" c_th1k_drawpanelth1 ::
+               Ptr RawTH1K -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_BufferEmpty"
-               c_th1k_bufferempty :: Ptr RawTH1K -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_BufferEmpty" c_th1k_bufferempty ::
+               Ptr RawTH1K -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_evalF" c_th1k_evalf
-               :: Ptr RawTH1K -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_evalF"
+               c_th1k_evalf :: Ptr RawTH1K -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FFT" c_th1k_fft ::
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_FFT"
+               c_th1k_fft ::
                Ptr RawTH1K -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_fill1" c_th1k_fill1
-               :: Ptr RawTH1K -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_fill1"
+               c_th1k_fill1 :: Ptr RawTH1K -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_fill1w"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_fill1w"
                c_th1k_fill1w :: Ptr RawTH1K -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_fillN1"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_fillN1"
                c_th1k_filln1 ::
-               Ptr RawTH1K ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH1K -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FillRandom"
-               c_th1k_fillrandom :: Ptr RawTH1K -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_FillRandom" c_th1k_fillrandom ::
+               Ptr RawTH1K -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FindBin"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_FindBin"
                c_th1k_findbin ::
                Ptr RawTH1K -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FindFixBin"
-               c_th1k_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_FindFixBin" c_th1k_findfixbin ::
                Ptr RawTH1K -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FindFirstBinAbove"
-               c_th1k_findfirstbinabove ::
-               Ptr RawTH1K -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_FindFirstBinAbove" c_th1k_findfirstbinabove
+               :: Ptr RawTH1K -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FindLastBinAbove"
-               c_th1k_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_FindLastBinAbove" c_th1k_findlastbinabove ::
                Ptr RawTH1K -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Fit" c_th1k_fit ::
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Fit"
+               c_th1k_fit ::
                Ptr RawTH1K ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FitPanelTH1"
-               c_th1k_fitpanelth1 :: Ptr RawTH1K -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_FitPanelTH1" c_th1k_fitpanelth1 ::
+               Ptr RawTH1K -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getNdivisionA"
-               c_th1k_getndivisiona :: Ptr RawTH1K -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getNdivisionA" c_th1k_getndivisiona ::
+               Ptr RawTH1K -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getAxisColorA"
-               c_th1k_getaxiscolora :: Ptr RawTH1K -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getAxisColorA" c_th1k_getaxiscolora ::
+               Ptr RawTH1K -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getLabelColorA"
-               c_th1k_getlabelcolora :: Ptr RawTH1K -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getLabelColorA" c_th1k_getlabelcolora ::
+               Ptr RawTH1K -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getLabelFontA"
-               c_th1k_getlabelfonta :: Ptr RawTH1K -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getLabelFontA" c_th1k_getlabelfonta ::
+               Ptr RawTH1K -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getLabelOffsetA"
-               c_th1k_getlabeloffseta :: Ptr RawTH1K -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getLabelOffsetA" c_th1k_getlabeloffseta ::
+               Ptr RawTH1K -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getLabelSizeA"
-               c_th1k_getlabelsizea :: Ptr RawTH1K -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getLabelSizeA" c_th1k_getlabelsizea ::
+               Ptr RawTH1K -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getTitleFontA"
-               c_th1k_gettitlefonta :: Ptr RawTH1K -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getTitleFontA" c_th1k_gettitlefonta ::
+               Ptr RawTH1K -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getTitleOffsetA"
-               c_th1k_gettitleoffseta :: Ptr RawTH1K -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getTitleOffsetA" c_th1k_gettitleoffseta ::
+               Ptr RawTH1K -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getTitleSizeA"
-               c_th1k_gettitlesizea :: Ptr RawTH1K -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getTitleSizeA" c_th1k_gettitlesizea ::
+               Ptr RawTH1K -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getTickLengthA"
-               c_th1k_getticklengtha :: Ptr RawTH1K -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getTickLengthA" c_th1k_getticklengtha ::
+               Ptr RawTH1K -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBarOffset"
-               c_th1k_getbaroffset :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBarOffset" c_th1k_getbaroffset ::
+               Ptr RawTH1K -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBarWidth"
-               c_th1k_getbarwidth :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBarWidth" c_th1k_getbarwidth ::
+               Ptr RawTH1K -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetContour"
-               c_th1k_getcontour :: Ptr RawTH1K -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetContour" c_th1k_getcontour ::
+               Ptr RawTH1K -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetContourLevel"
-               c_th1k_getcontourlevel :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetContourLevel" c_th1k_getcontourlevel ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetContourLevelPad"
-               c_th1k_getcontourlevelpad :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetContourLevelPad" c_th1k_getcontourlevelpad
+               :: Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBin"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetBin"
                c_th1k_getbin :: Ptr RawTH1K -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinCenter"
-               c_th1k_getbincenter :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinCenter" c_th1k_getbincenter ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinContent1"
-               c_th1k_getbincontent1 :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinContent1" c_th1k_getbincontent1 ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinContent2"
-               c_th1k_getbincontent2 :: Ptr RawTH1K -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinContent2" c_th1k_getbincontent2 ::
+               Ptr RawTH1K -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinContent3"
-               c_th1k_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinContent3" c_th1k_getbincontent3 ::
                Ptr RawTH1K -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinError1"
-               c_th1k_getbinerror1 :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinError1" c_th1k_getbinerror1 ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinError2"
-               c_th1k_getbinerror2 :: Ptr RawTH1K -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinError2" c_th1k_getbinerror2 ::
+               Ptr RawTH1K -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinError3"
-               c_th1k_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinError3" c_th1k_getbinerror3 ::
                Ptr RawTH1K -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinLowEdge"
-               c_th1k_getbinlowedge :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinLowEdge" c_th1k_getbinlowedge ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetBinWidth"
-               c_th1k_getbinwidth :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetBinWidth" c_th1k_getbinwidth ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetCellContent"
-               c_th1k_getcellcontent :: Ptr RawTH1K -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetCellContent" c_th1k_getcellcontent ::
+               Ptr RawTH1K -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetCellError"
-               c_th1k_getcellerror :: Ptr RawTH1K -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetCellError" c_th1k_getcellerror ::
+               Ptr RawTH1K -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetEntries"
-               c_th1k_getentries :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetEntries" c_th1k_getentries ::
+               Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1K.h TH1K_GetEffectiveEntries"
                c_th1k_geteffectiveentries :: Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetFunction"
-               c_th1k_getfunction :: Ptr RawTH1K -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetFunction" c_th1k_getfunction ::
+               Ptr RawTH1K -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetDimension"
-               c_th1k_getdimension :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetDimension" c_th1k_getdimension ::
+               Ptr RawTH1K -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetKurtosis"
-               c_th1k_getkurtosis :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetKurtosis" c_th1k_getkurtosis ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetLowEdge"
-               c_th1k_getlowedge :: Ptr RawTH1K -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetLowEdge" c_th1k_getlowedge ::
+               Ptr RawTH1K -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getMaximumTH1"
-               c_th1k_getmaximumth1 :: Ptr RawTH1K -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getMaximumTH1" c_th1k_getmaximumth1 ::
+               Ptr RawTH1K -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMaximumBin"
-               c_th1k_getmaximumbin :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMaximumBin" c_th1k_getmaximumbin ::
+               Ptr RawTH1K -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMaximumStored"
-               c_th1k_getmaximumstored :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMaximumStored" c_th1k_getmaximumstored ::
+               Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getMinimumTH1"
-               c_th1k_getminimumth1 :: Ptr RawTH1K -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getMinimumTH1" c_th1k_getminimumth1 ::
+               Ptr RawTH1K -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMinimumBin"
-               c_th1k_getminimumbin :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMinimumBin" c_th1k_getminimumbin ::
+               Ptr RawTH1K -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMinimumStored"
-               c_th1k_getminimumstored :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMinimumStored" c_th1k_getminimumstored ::
+               Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMean"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetMean"
                c_th1k_getmean :: Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMeanError"
-               c_th1k_getmeanerror :: Ptr RawTH1K -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMeanError" c_th1k_getmeanerror ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetNbinsX"
                c_th1k_getnbinsx :: Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetNbinsY"
                c_th1k_getnbinsy :: Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetNbinsZ"
                c_th1k_getnbinsz :: Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_getQuantilesTH1"
-               c_th1k_getquantilesth1 ::
-               Ptr RawTH1K -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_getQuantilesTH1" c_th1k_getquantilesth1 ::
+               Ptr RawTH1K -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetRandom"
                c_th1k_getrandom :: Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetStats"
-               c_th1k_getstats :: Ptr RawTH1K -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetStats"
+               c_th1k_getstats :: Ptr RawTH1K -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetSumOfWeights"
-               c_th1k_getsumofweights :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetSumOfWeights" c_th1k_getsumofweights ::
+               Ptr RawTH1K -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetSumw2"
                c_th1k_getsumw2 :: Ptr RawTH1K -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetSumw2N"
                c_th1k_getsumw2n :: Ptr RawTH1K -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetRMS"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetRMS"
                c_th1k_getrms :: Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetRMSError"
-               c_th1k_getrmserror :: Ptr RawTH1K -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetSkewness"
-               c_th1k_getskewness :: Ptr RawTH1K -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1K.h TH1K_integral1"
-               c_th1k_integral1 ::
-               Ptr RawTH1K -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1K.h TH1K_interpolate1"
-               c_th1k_interpolate1 :: Ptr RawTH1K -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetRMSError" c_th1k_getrmserror ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_interpolate2"
-               c_th1k_interpolate2 ::
-               Ptr RawTH1K -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetSkewness" c_th1k_getskewness ::
+               Ptr RawTH1K -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_interpolate3"
-               c_th1k_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_interpolate3" c_th1k_interpolate3 ::
                Ptr RawTH1K -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_KolmogorovTest"
-               c_th1k_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_KolmogorovTest" c_th1k_kolmogorovtest ::
                Ptr RawTH1K -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_LabelsDeflate"
-               c_th1k_labelsdeflate :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_LabelsDeflate" c_th1k_labelsdeflate ::
+               Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_LabelsInflate"
-               c_th1k_labelsinflate :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_LabelsInflate" c_th1k_labelsinflate ::
+               Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_LabelsOption"
-               c_th1k_labelsoption :: Ptr RawTH1K -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_LabelsOption" c_th1k_labelsoption ::
+               Ptr RawTH1K -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_multiflyF"
                c_th1k_multiflyf :: Ptr RawTH1K -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Multiply"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Multiply"
                c_th1k_multiply ::
                Ptr RawTH1K ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_PutStats"
-               c_th1k_putstats :: Ptr RawTH1K -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_PutStats"
+               c_th1k_putstats :: Ptr RawTH1K -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Rebin" c_th1k_rebin
-               ::
-               Ptr RawTH1K -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Rebin"
+               c_th1k_rebin ::
+               Ptr RawTH1K -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_RebinAxis"
                c_th1k_rebinaxis :: Ptr RawTH1K -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Rebuild"
                c_th1k_rebuild :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_RecursiveRemove"
-               c_th1k_recursiveremove :: Ptr RawTH1K -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_RecursiveRemove" c_th1k_recursiveremove ::
+               Ptr RawTH1K -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Reset" c_th1k_reset
-               :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Reset"
+               c_th1k_reset :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_ResetStats"
-               c_th1k_resetstats :: Ptr RawTH1K -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_ResetStats" c_th1k_resetstats ::
+               Ptr RawTH1K -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Scale" c_th1k_scale
-               :: Ptr RawTH1K -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Scale"
+               c_th1k_scale :: Ptr RawTH1K -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setAxisColorA"
-               c_th1k_setaxiscolora :: Ptr RawTH1K -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setAxisColorA" c_th1k_setaxiscolora ::
+               Ptr RawTH1K -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetAxisRange"
-               c_th1k_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetAxisRange" c_th1k_setaxisrange ::
                Ptr RawTH1K -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetBarOffset"
-               c_th1k_setbaroffset :: Ptr RawTH1K -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetBarOffset" c_th1k_setbaroffset ::
+               Ptr RawTH1K -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetBarWidth"
-               c_th1k_setbarwidth :: Ptr RawTH1K -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetBarWidth" c_th1k_setbarwidth ::
+               Ptr RawTH1K -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBinContent1"
-               c_th1k_setbincontent1 :: Ptr RawTH1K -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setBinContent1" c_th1k_setbincontent1 ::
+               Ptr RawTH1K -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBinContent2"
-               c_th1k_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setBinContent2" c_th1k_setbincontent2 ::
                Ptr RawTH1K -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBinContent3"
-               c_th1k_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setBinContent3" c_th1k_setbincontent3 ::
                Ptr RawTH1K -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBinError1"
-               c_th1k_setbinerror1 :: Ptr RawTH1K -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setBinError1" c_th1k_setbinerror1 ::
+               Ptr RawTH1K -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBinError2"
-               c_th1k_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setBinError2" c_th1k_setbinerror2 ::
                Ptr RawTH1K -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBinError3"
-               c_th1k_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setBinError3" c_th1k_setbinerror3 ::
                Ptr RawTH1K -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBins1"
-               c_th1k_setbins1 :: Ptr RawTH1K -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_setBins1"
+               c_th1k_setbins1 :: Ptr RawTH1K -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBins2"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_setBins2"
                c_th1k_setbins2 ::
-               Ptr RawTH1K ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1K -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setBins3"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_setBins3"
                c_th1k_setbins3 ::
                Ptr RawTH1K ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetBinsLength"
-               c_th1k_setbinslength :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetBinsLength" c_th1k_setbinslength ::
+               Ptr RawTH1K -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetBuffer"
                c_th1k_setbuffer :: Ptr RawTH1K -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetCellContent"
-               c_th1k_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetCellContent" c_th1k_setcellcontent ::
                Ptr RawTH1K -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetContent"
-               c_th1k_setcontent :: Ptr RawTH1K -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetContent" c_th1k_setcontent ::
+               Ptr RawTH1K -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetContour"
-               c_th1k_setcontour :: Ptr RawTH1K -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetContour" c_th1k_setcontour ::
+               Ptr RawTH1K -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetContourLevel"
-               c_th1k_setcontourlevel :: Ptr RawTH1K -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetContourLevel" c_th1k_setcontourlevel ::
+               Ptr RawTH1K -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetDirectory"
-               c_th1k_setdirectory :: Ptr RawTH1K -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetDirectory" c_th1k_setdirectory ::
+               Ptr RawTH1K -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetEntries"
-               c_th1k_setentries :: Ptr RawTH1K -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetEntries" c_th1k_setentries ::
+               Ptr RawTH1K -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetError"
-               c_th1k_seterror :: Ptr RawTH1K -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetError"
+               c_th1k_seterror :: Ptr RawTH1K -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setLabelColorA"
-               c_th1k_setlabelcolora :: Ptr RawTH1K -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setLabelColorA" c_th1k_setlabelcolora ::
+               Ptr RawTH1K -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setLabelSizeA"
-               c_th1k_setlabelsizea :: Ptr RawTH1K -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setLabelSizeA" c_th1k_setlabelsizea ::
+               Ptr RawTH1K -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setLabelFontA"
-               c_th1k_setlabelfonta :: Ptr RawTH1K -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setLabelFontA" c_th1k_setlabelfonta ::
+               Ptr RawTH1K -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_setLabelOffsetA"
-               c_th1k_setlabeloffseta ::
-               Ptr RawTH1K -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_setLabelOffsetA" c_th1k_setlabeloffseta ::
+               Ptr RawTH1K -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetMaximum"
-               c_th1k_setmaximum :: Ptr RawTH1K -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetMaximum" c_th1k_setmaximum ::
+               Ptr RawTH1K -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetMinimum"
-               c_th1k_setminimum :: Ptr RawTH1K -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetMinimum" c_th1k_setminimum ::
+               Ptr RawTH1K -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetNormFactor"
-               c_th1k_setnormfactor :: Ptr RawTH1K -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetNormFactor" c_th1k_setnormfactor ::
+               Ptr RawTH1K -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetStats"
-               c_th1k_setstats :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetStats"
+               c_th1k_setstats :: Ptr RawTH1K -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetOption"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetOption"
                c_th1k_setoption :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetXTitle"
                c_th1k_setxtitle :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetYTitle"
                c_th1k_setytitle :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetZTitle"
                c_th1k_setztitle :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_ShowBackground"
-               c_th1k_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_ShowBackground" c_th1k_showbackground ::
                Ptr RawTH1K -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_ShowPeaks"
                c_th1k_showpeaks ::
                Ptr RawTH1K -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Smooth"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Smooth"
                c_th1k_smooth :: Ptr RawTH1K -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Sumw2" c_th1k_sumw2
-               :: Ptr RawTH1K -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Sumw2"
+               c_th1k_sumw2 :: Ptr RawTH1K -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetName"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetName"
                c_th1k_setname :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetNameTitle"
-               c_th1k_setnametitle :: Ptr RawTH1K -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetNameTitle" c_th1k_setnametitle ::
+               Ptr RawTH1K -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetTitle"
                c_th1k_settitle :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetLineColor"
-               c_th1k_getlinecolor :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetLineColor" c_th1k_getlinecolor ::
+               Ptr RawTH1K -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetLineStyle"
-               c_th1k_getlinestyle :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetLineStyle" c_th1k_getlinestyle ::
+               Ptr RawTH1K -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetLineWidth"
-               c_th1k_getlinewidth :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetLineWidth" c_th1k_getlinewidth ::
+               Ptr RawTH1K -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_ResetAttLine"
-               c_th1k_resetattline :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_ResetAttLine" c_th1k_resetattline ::
+               Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetLineAttributes"
-               c_th1k_setlineattributes :: Ptr RawTH1K -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetLineAttributes" c_th1k_setlineattributes
+               :: Ptr RawTH1K -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetLineColor"
-               c_th1k_setlinecolor :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetLineColor" c_th1k_setlinecolor ::
+               Ptr RawTH1K -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetLineStyle"
-               c_th1k_setlinestyle :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetLineStyle" c_th1k_setlinestyle ::
+               Ptr RawTH1K -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetLineWidth"
-               c_th1k_setlinewidth :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetLineWidth" c_th1k_setlinewidth ::
+               Ptr RawTH1K -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetFillColor"
-               c_th1k_setfillcolor :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetFillColor" c_th1k_setfillcolor ::
+               Ptr RawTH1K -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetFillStyle"
-               c_th1k_setfillstyle :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetFillStyle" c_th1k_setfillstyle ::
+               Ptr RawTH1K -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMarkerColor"
-               c_th1k_getmarkercolor :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMarkerColor" c_th1k_getmarkercolor ::
+               Ptr RawTH1K -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMarkerStyle"
-               c_th1k_getmarkerstyle :: Ptr RawTH1K -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMarkerStyle" c_th1k_getmarkerstyle ::
+               Ptr RawTH1K -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetMarkerSize"
-               c_th1k_getmarkersize :: Ptr RawTH1K -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_GetMarkerSize" c_th1k_getmarkersize ::
+               Ptr RawTH1K -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_ResetAttMarker"
-               c_th1k_resetattmarker :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_ResetAttMarker" c_th1k_resetattmarker ::
+               Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1K.h TH1K_SetMarkerAttributes"
                c_th1k_setmarkerattributes :: Ptr RawTH1K -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetMarkerColor"
-               c_th1k_setmarkercolor :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetMarkerColor" c_th1k_setmarkercolor ::
+               Ptr RawTH1K -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetMarkerStyle"
-               c_th1k_setmarkerstyle :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetMarkerStyle" c_th1k_setmarkerstyle ::
+               Ptr RawTH1K -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SetMarkerSize"
-               c_th1k_setmarkersize :: Ptr RawTH1K -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_SetMarkerSize" c_th1k_setmarkersize ::
+               Ptr RawTH1K -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Draw" c_th1k_draw
-               :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Clear"
+               c_th1k_clear :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_FindObject"
-               c_th1k_findobject :: Ptr RawTH1K -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Draw"
+               c_th1k_draw :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH1K.h TH1K_FindObject" c_th1k_findobject ::
+               Ptr RawTH1K -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetName"
                c_th1k_getname :: Ptr RawTH1K -> IO CString
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_IsA" c_th1k_isa ::
-               Ptr RawTH1K -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_IsA"
+               c_th1k_isa :: Ptr RawTH1K -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Paint" c_th1k_paint
-               :: Ptr RawTH1K -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Paint"
+               c_th1k_paint :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_printObj"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_printObj"
                c_th1k_printobj :: Ptr RawTH1K -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_SaveAs"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SaveAs"
                c_th1k_saveas :: Ptr RawTH1K -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_Write" c_th1k_write
-               :: Ptr RawTH1K -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Write"
+               c_th1k_write :: Ptr RawTH1K -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1K.h TH1K_delete"
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_Write_"
+               c_th1k_write_ :: Ptr RawTH1K -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_delete"
                c_th1k_delete :: Ptr RawTH1K -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_GetAt"
+               c_th1k_getat :: Ptr RawTH1K -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetArray"
+               c_th1k_setarray :: Ptr RawTH1K -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1K.h TH1K_SetAt"
+               c_th1k_setat :: Ptr RawTH1K -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH1K/Implementation.hs b/src/HROOT/Hist/TH1K/Implementation.hs
--- a/src/HROOT/Hist/TH1K/Implementation.hs
+++ b/src/HROOT/Hist/TH1K/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1K.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1K.RawType
 import HROOT.Hist.TH1K.FFI
 import HROOT.Hist.TH1K.Interface
 import HROOT.Hist.TH1K.Cast
+import HROOT.Hist.TH1K.RawType
+import HROOT.Hist.TH1K.Cast
+import HROOT.Hist.TH1K.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -48,20 +57,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH1K TH1K
+instance () => ITH1K (TH1K) where
 
-instance ITH1 TH1K where
+instance () => ITH1 (TH1K) where
         add = xform2 c_th1k_add
         addBinContent = xform2 c_th1k_addbincontent
         chi2Test = xform3 c_th1k_chi2test
-        computeIntegral = xform0 c_th1k_computeintegral
         directoryAutoAdd = xform1 c_th1k_directoryautoadd
         divide = xform5 c_th1k_divide
         drawCopyTH1 = xform1 c_th1k_drawcopyth1
@@ -133,9 +141,6 @@
         getRMS = xform1 c_th1k_getrms
         getRMSError = xform1 c_th1k_getrmserror
         getSkewness = xform1 c_th1k_getskewness
-        integral1 = xform3 c_th1k_integral1
-        interpolate1 = xform1 c_th1k_interpolate1
-        interpolate2 = xform2 c_th1k_interpolate2
         interpolate3 = xform3 c_th1k_interpolate3
         kolmogorovTest = xform2 c_th1k_kolmogorovtest
         labelsDeflate = xform1 c_th1k_labelsdeflate
@@ -190,14 +195,14 @@
         smooth = xform2 c_th1k_smooth
         sumw2 = xform0 c_th1k_sumw2
 
-instance ITArrayF TH1K
+instance () => ITArrayF (TH1K) where
 
-instance ITNamed TH1K where
+instance () => ITNamed (TH1K) where
         setName = xform1 c_th1k_setname
         setNameTitle = xform2 c_th1k_setnametitle
         setTitle = xform1 c_th1k_settitle
 
-instance ITAttLine TH1K where
+instance () => ITAttLine (TH1K) where
         getLineColor = xform0 c_th1k_getlinecolor
         getLineStyle = xform0 c_th1k_getlinestyle
         getLineWidth = xform0 c_th1k_getlinewidth
@@ -207,11 +212,11 @@
         setLineStyle = xform1 c_th1k_setlinestyle
         setLineWidth = xform1 c_th1k_setlinewidth
 
-instance ITAttFill TH1K where
+instance () => ITAttFill (TH1K) where
         setFillColor = xform1 c_th1k_setfillcolor
         setFillStyle = xform1 c_th1k_setfillstyle
 
-instance ITAttMarker TH1K where
+instance () => ITAttMarker (TH1K) where
         getMarkerColor = xform0 c_th1k_getmarkercolor
         getMarkerStyle = xform0 c_th1k_getmarkerstyle
         getMarkerSize = xform0 c_th1k_getmarkersize
@@ -221,7 +226,8 @@
         setMarkerStyle = xform1 c_th1k_setmarkerstyle
         setMarkerSize = xform1 c_th1k_setmarkersize
 
-instance ITObject TH1K where
+instance () => ITObject (TH1K) where
+        clear = xform1 c_th1k_clear
         draw = xform1 c_th1k_draw
         findObject = xform1 c_th1k_findobject
         getName = xform0 c_th1k_getname
@@ -230,8 +236,12 @@
         printObj = xform1 c_th1k_printobj
         saveAs = xform2 c_th1k_saveas
         write = xform3 c_th1k_write
+        write_ = xform0 c_th1k_write_
 
-instance IDeletable TH1K where
+instance () => IDeletable (TH1K) where
         delete = xform0 c_th1k_delete
 
-instance ITArray TH1K
+instance () => ITArray (TH1K) where
+        getAt = xform1 c_th1k_getat
+        setArray = xform1 c_th1k_setarray
+        setAt = xform2 c_th1k_setat
diff --git a/src/HROOT/Hist/TH1K/Interface.hs b/src/HROOT/Hist/TH1K/Interface.hs
--- a/src/HROOT/Hist/TH1K/Interface.hs
+++ b/src/HROOT/Hist/TH1K/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1K.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TArrayF.Interface
 
-class (ITH1 a, ITArrayF a) => ITH1K a
+class (ITH1 a, ITArrayF a) => ITH1K a where
 
 upcastTH1K :: forall a . (FPtr a, ITH1K a) => a -> TH1K
 upcastTH1K h
diff --git a/src/HROOT/Hist/TH1K/RawType.hs b/src/HROOT/Hist/TH1K/RawType.hs
--- a/src/HROOT/Hist/TH1K/RawType.hs
+++ b/src/HROOT/Hist/TH1K/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1K
 
 newtype TH1K = TH1K (Ptr RawTH1K)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH1K where
+instance () => FPtr (TH1K) where
         type Raw TH1K = RawTH1K
         get_fptr (TH1K ptr) = ptr
         cast_fptr_to_obj = TH1K
diff --git a/src/HROOT/Hist/TH1S/Cast.hs b/src/HROOT/Hist/TH1S/Cast.hs
--- a/src/HROOT/Hist/TH1S/Cast.hs
+++ b/src/HROOT/Hist/TH1S/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH1S.RawType
 import HROOT.Hist.TH1S.Interface
 
-instance (ITH1S a, FPtr a) => Castable a (Ptr RawTH1S) where
+instance (ITH1S a, FPtr a) => Castable (a) (Ptr RawTH1S) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH1S (Ptr RawTH1S) where
+instance () => Castable (TH1S) (Ptr RawTH1S) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH1S/FFI.hsc b/src/HROOT/Hist/TH1S/FFI.hsc
--- a/src/HROOT/Hist/TH1S/FFI.hsc
+++ b/src/HROOT/Hist/TH1S/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH1S.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH1S.RawType
+import HROOT.Hist.TH1S.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -11,524 +14,610 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Add" c_th1s_add ::
-               Ptr RawTH1S -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Add"
+               c_th1s_add :: Ptr RawTH1S -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_AddBinContent"
-               c_th1s_addbincontent :: Ptr RawTH1S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_AddBinContent" c_th1s_addbincontent ::
+               Ptr RawTH1S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Chi2Test"
                c_th1s_chi2test ::
-               Ptr RawTH1S -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1S.h TH1S_ComputeIntegral"
-               c_th1s_computeintegral :: Ptr RawTH1S -> IO CDouble
+               Ptr RawTH1S -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_DirectoryAutoAdd"
-               c_th1s_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_DirectoryAutoAdd" c_th1s_directoryautoadd ::
                Ptr RawTH1S -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Divide"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Divide"
                c_th1s_divide ::
                Ptr RawTH1S ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_drawCopyTH1"
-               c_th1s_drawcopyth1 :: Ptr RawTH1S -> CString -> IO (Ptr RawTH1S)
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_drawCopyTH1" c_th1s_drawcopyth1 ::
+               Ptr RawTH1S -> CString -> IO (Ptr RawTH1S)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_DrawNormalized"
-               c_th1s_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_DrawNormalized" c_th1s_drawnormalized ::
                Ptr RawTH1S -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_drawPanelTH1"
-               c_th1s_drawpanelth1 :: Ptr RawTH1S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_drawPanelTH1" c_th1s_drawpanelth1 ::
+               Ptr RawTH1S -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_BufferEmpty"
-               c_th1s_bufferempty :: Ptr RawTH1S -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_BufferEmpty" c_th1s_bufferempty ::
+               Ptr RawTH1S -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_evalF" c_th1s_evalf
-               :: Ptr RawTH1S -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_evalF"
+               c_th1s_evalf :: Ptr RawTH1S -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FFT" c_th1s_fft ::
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_FFT"
+               c_th1s_fft ::
                Ptr RawTH1S -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_fill1" c_th1s_fill1
-               :: Ptr RawTH1S -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_fill1"
+               c_th1s_fill1 :: Ptr RawTH1S -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_fill1w"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_fill1w"
                c_th1s_fill1w :: Ptr RawTH1S -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_fillN1"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_fillN1"
                c_th1s_filln1 ::
-               Ptr RawTH1S ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH1S -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FillRandom"
-               c_th1s_fillrandom :: Ptr RawTH1S -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_FillRandom" c_th1s_fillrandom ::
+               Ptr RawTH1S -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FindBin"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_FindBin"
                c_th1s_findbin ::
                Ptr RawTH1S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FindFixBin"
-               c_th1s_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_FindFixBin" c_th1s_findfixbin ::
                Ptr RawTH1S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FindFirstBinAbove"
-               c_th1s_findfirstbinabove ::
-               Ptr RawTH1S -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_FindFirstBinAbove" c_th1s_findfirstbinabove
+               :: Ptr RawTH1S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FindLastBinAbove"
-               c_th1s_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_FindLastBinAbove" c_th1s_findlastbinabove ::
                Ptr RawTH1S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Fit" c_th1s_fit ::
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Fit"
+               c_th1s_fit ::
                Ptr RawTH1S ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FitPanelTH1"
-               c_th1s_fitpanelth1 :: Ptr RawTH1S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_FitPanelTH1" c_th1s_fitpanelth1 ::
+               Ptr RawTH1S -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getNdivisionA"
-               c_th1s_getndivisiona :: Ptr RawTH1S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getNdivisionA" c_th1s_getndivisiona ::
+               Ptr RawTH1S -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getAxisColorA"
-               c_th1s_getaxiscolora :: Ptr RawTH1S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getAxisColorA" c_th1s_getaxiscolora ::
+               Ptr RawTH1S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getLabelColorA"
-               c_th1s_getlabelcolora :: Ptr RawTH1S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getLabelColorA" c_th1s_getlabelcolora ::
+               Ptr RawTH1S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getLabelFontA"
-               c_th1s_getlabelfonta :: Ptr RawTH1S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getLabelFontA" c_th1s_getlabelfonta ::
+               Ptr RawTH1S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getLabelOffsetA"
-               c_th1s_getlabeloffseta :: Ptr RawTH1S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getLabelOffsetA" c_th1s_getlabeloffseta ::
+               Ptr RawTH1S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getLabelSizeA"
-               c_th1s_getlabelsizea :: Ptr RawTH1S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getLabelSizeA" c_th1s_getlabelsizea ::
+               Ptr RawTH1S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getTitleFontA"
-               c_th1s_gettitlefonta :: Ptr RawTH1S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getTitleFontA" c_th1s_gettitlefonta ::
+               Ptr RawTH1S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getTitleOffsetA"
-               c_th1s_gettitleoffseta :: Ptr RawTH1S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getTitleOffsetA" c_th1s_gettitleoffseta ::
+               Ptr RawTH1S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getTitleSizeA"
-               c_th1s_gettitlesizea :: Ptr RawTH1S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getTitleSizeA" c_th1s_gettitlesizea ::
+               Ptr RawTH1S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getTickLengthA"
-               c_th1s_getticklengtha :: Ptr RawTH1S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getTickLengthA" c_th1s_getticklengtha ::
+               Ptr RawTH1S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBarOffset"
-               c_th1s_getbaroffset :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBarOffset" c_th1s_getbaroffset ::
+               Ptr RawTH1S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBarWidth"
-               c_th1s_getbarwidth :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBarWidth" c_th1s_getbarwidth ::
+               Ptr RawTH1S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetContour"
-               c_th1s_getcontour :: Ptr RawTH1S -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetContour" c_th1s_getcontour ::
+               Ptr RawTH1S -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetContourLevel"
-               c_th1s_getcontourlevel :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetContourLevel" c_th1s_getcontourlevel ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetContourLevelPad"
-               c_th1s_getcontourlevelpad :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetContourLevelPad" c_th1s_getcontourlevelpad
+               :: Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBin"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetBin"
                c_th1s_getbin :: Ptr RawTH1S -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinCenter"
-               c_th1s_getbincenter :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinCenter" c_th1s_getbincenter ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinContent1"
-               c_th1s_getbincontent1 :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinContent1" c_th1s_getbincontent1 ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinContent2"
-               c_th1s_getbincontent2 :: Ptr RawTH1S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinContent2" c_th1s_getbincontent2 ::
+               Ptr RawTH1S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinContent3"
-               c_th1s_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinContent3" c_th1s_getbincontent3 ::
                Ptr RawTH1S -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinError1"
-               c_th1s_getbinerror1 :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinError1" c_th1s_getbinerror1 ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinError2"
-               c_th1s_getbinerror2 :: Ptr RawTH1S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinError2" c_th1s_getbinerror2 ::
+               Ptr RawTH1S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinError3"
-               c_th1s_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinError3" c_th1s_getbinerror3 ::
                Ptr RawTH1S -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinLowEdge"
-               c_th1s_getbinlowedge :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinLowEdge" c_th1s_getbinlowedge ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetBinWidth"
-               c_th1s_getbinwidth :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetBinWidth" c_th1s_getbinwidth ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetCellContent"
-               c_th1s_getcellcontent :: Ptr RawTH1S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetCellContent" c_th1s_getcellcontent ::
+               Ptr RawTH1S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetCellError"
-               c_th1s_getcellerror :: Ptr RawTH1S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetCellError" c_th1s_getcellerror ::
+               Ptr RawTH1S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetEntries"
-               c_th1s_getentries :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetEntries" c_th1s_getentries ::
+               Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1S.h TH1S_GetEffectiveEntries"
                c_th1s_geteffectiveentries :: Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetFunction"
-               c_th1s_getfunction :: Ptr RawTH1S -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetFunction" c_th1s_getfunction ::
+               Ptr RawTH1S -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetDimension"
-               c_th1s_getdimension :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetDimension" c_th1s_getdimension ::
+               Ptr RawTH1S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetKurtosis"
-               c_th1s_getkurtosis :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetKurtosis" c_th1s_getkurtosis ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetLowEdge"
-               c_th1s_getlowedge :: Ptr RawTH1S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetLowEdge" c_th1s_getlowedge ::
+               Ptr RawTH1S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getMaximumTH1"
-               c_th1s_getmaximumth1 :: Ptr RawTH1S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getMaximumTH1" c_th1s_getmaximumth1 ::
+               Ptr RawTH1S -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMaximumBin"
-               c_th1s_getmaximumbin :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMaximumBin" c_th1s_getmaximumbin ::
+               Ptr RawTH1S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMaximumStored"
-               c_th1s_getmaximumstored :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMaximumStored" c_th1s_getmaximumstored ::
+               Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getMinimumTH1"
-               c_th1s_getminimumth1 :: Ptr RawTH1S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getMinimumTH1" c_th1s_getminimumth1 ::
+               Ptr RawTH1S -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMinimumBin"
-               c_th1s_getminimumbin :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMinimumBin" c_th1s_getminimumbin ::
+               Ptr RawTH1S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMinimumStored"
-               c_th1s_getminimumstored :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMinimumStored" c_th1s_getminimumstored ::
+               Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMean"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetMean"
                c_th1s_getmean :: Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMeanError"
-               c_th1s_getmeanerror :: Ptr RawTH1S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMeanError" c_th1s_getmeanerror ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetNbinsX"
                c_th1s_getnbinsx :: Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetNbinsY"
                c_th1s_getnbinsy :: Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetNbinsZ"
                c_th1s_getnbinsz :: Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_getQuantilesTH1"
-               c_th1s_getquantilesth1 ::
-               Ptr RawTH1S -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_getQuantilesTH1" c_th1s_getquantilesth1 ::
+               Ptr RawTH1S -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetRandom"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetRandom"
                c_th1s_getrandom :: Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetStats"
-               c_th1s_getstats :: Ptr RawTH1S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetStats"
+               c_th1s_getstats :: Ptr RawTH1S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetSumOfWeights"
-               c_th1s_getsumofweights :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetSumOfWeights" c_th1s_getsumofweights ::
+               Ptr RawTH1S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetSumw2"
                c_th1s_getsumw2 :: Ptr RawTH1S -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetSumw2N"
                c_th1s_getsumw2n :: Ptr RawTH1S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetRMS"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetRMS"
                c_th1s_getrms :: Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetRMSError"
-               c_th1s_getrmserror :: Ptr RawTH1S -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetSkewness"
-               c_th1s_getskewness :: Ptr RawTH1S -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1S.h TH1S_integral1"
-               c_th1s_integral1 ::
-               Ptr RawTH1S -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH1S.h TH1S_interpolate1"
-               c_th1s_interpolate1 :: Ptr RawTH1S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetRMSError" c_th1s_getrmserror ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_interpolate2"
-               c_th1s_interpolate2 ::
-               Ptr RawTH1S -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetSkewness" c_th1s_getskewness ::
+               Ptr RawTH1S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_interpolate3"
-               c_th1s_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_interpolate3" c_th1s_interpolate3 ::
                Ptr RawTH1S -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_KolmogorovTest"
-               c_th1s_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_KolmogorovTest" c_th1s_kolmogorovtest ::
                Ptr RawTH1S -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_LabelsDeflate"
-               c_th1s_labelsdeflate :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_LabelsDeflate" c_th1s_labelsdeflate ::
+               Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_LabelsInflate"
-               c_th1s_labelsinflate :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_LabelsInflate" c_th1s_labelsinflate ::
+               Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_LabelsOption"
-               c_th1s_labelsoption :: Ptr RawTH1S -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_LabelsOption" c_th1s_labelsoption ::
+               Ptr RawTH1S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_multiflyF"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_multiflyF"
                c_th1s_multiflyf :: Ptr RawTH1S -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Multiply"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Multiply"
                c_th1s_multiply ::
                Ptr RawTH1S ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_PutStats"
-               c_th1s_putstats :: Ptr RawTH1S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_PutStats"
+               c_th1s_putstats :: Ptr RawTH1S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Rebin" c_th1s_rebin
-               ::
-               Ptr RawTH1S -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Rebin"
+               c_th1s_rebin ::
+               Ptr RawTH1S -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_RebinAxis"
                c_th1s_rebinaxis :: Ptr RawTH1S -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Rebuild"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Rebuild"
                c_th1s_rebuild :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_RecursiveRemove"
-               c_th1s_recursiveremove :: Ptr RawTH1S -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_RecursiveRemove" c_th1s_recursiveremove ::
+               Ptr RawTH1S -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Reset" c_th1s_reset
-               :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Reset"
+               c_th1s_reset :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_ResetStats"
-               c_th1s_resetstats :: Ptr RawTH1S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_ResetStats" c_th1s_resetstats ::
+               Ptr RawTH1S -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Scale" c_th1s_scale
-               :: Ptr RawTH1S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Scale"
+               c_th1s_scale :: Ptr RawTH1S -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setAxisColorA"
-               c_th1s_setaxiscolora :: Ptr RawTH1S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setAxisColorA" c_th1s_setaxiscolora ::
+               Ptr RawTH1S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetAxisRange"
-               c_th1s_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetAxisRange" c_th1s_setaxisrange ::
                Ptr RawTH1S -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetBarOffset"
-               c_th1s_setbaroffset :: Ptr RawTH1S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetBarOffset" c_th1s_setbaroffset ::
+               Ptr RawTH1S -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetBarWidth"
-               c_th1s_setbarwidth :: Ptr RawTH1S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetBarWidth" c_th1s_setbarwidth ::
+               Ptr RawTH1S -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBinContent1"
-               c_th1s_setbincontent1 :: Ptr RawTH1S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setBinContent1" c_th1s_setbincontent1 ::
+               Ptr RawTH1S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBinContent2"
-               c_th1s_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setBinContent2" c_th1s_setbincontent2 ::
                Ptr RawTH1S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBinContent3"
-               c_th1s_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setBinContent3" c_th1s_setbincontent3 ::
                Ptr RawTH1S -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBinError1"
-               c_th1s_setbinerror1 :: Ptr RawTH1S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setBinError1" c_th1s_setbinerror1 ::
+               Ptr RawTH1S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBinError2"
-               c_th1s_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setBinError2" c_th1s_setbinerror2 ::
                Ptr RawTH1S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBinError3"
-               c_th1s_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setBinError3" c_th1s_setbinerror3 ::
                Ptr RawTH1S -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBins1"
-               c_th1s_setbins1 :: Ptr RawTH1S -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_setBins1"
+               c_th1s_setbins1 :: Ptr RawTH1S -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBins2"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_setBins2"
                c_th1s_setbins2 ::
-               Ptr RawTH1S ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH1S -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setBins3"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_setBins3"
                c_th1s_setbins3 ::
                Ptr RawTH1S ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetBinsLength"
-               c_th1s_setbinslength :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetBinsLength" c_th1s_setbinslength ::
+               Ptr RawTH1S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetBuffer"
                c_th1s_setbuffer :: Ptr RawTH1S -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetCellContent"
-               c_th1s_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetCellContent" c_th1s_setcellcontent ::
                Ptr RawTH1S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetContent"
-               c_th1s_setcontent :: Ptr RawTH1S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetContent" c_th1s_setcontent ::
+               Ptr RawTH1S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetContour"
-               c_th1s_setcontour :: Ptr RawTH1S -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetContour" c_th1s_setcontour ::
+               Ptr RawTH1S -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetContourLevel"
-               c_th1s_setcontourlevel :: Ptr RawTH1S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetContourLevel" c_th1s_setcontourlevel ::
+               Ptr RawTH1S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetDirectory"
-               c_th1s_setdirectory :: Ptr RawTH1S -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetDirectory" c_th1s_setdirectory ::
+               Ptr RawTH1S -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetEntries"
-               c_th1s_setentries :: Ptr RawTH1S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetEntries" c_th1s_setentries ::
+               Ptr RawTH1S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetError"
-               c_th1s_seterror :: Ptr RawTH1S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetError"
+               c_th1s_seterror :: Ptr RawTH1S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setLabelColorA"
-               c_th1s_setlabelcolora :: Ptr RawTH1S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setLabelColorA" c_th1s_setlabelcolora ::
+               Ptr RawTH1S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setLabelSizeA"
-               c_th1s_setlabelsizea :: Ptr RawTH1S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setLabelSizeA" c_th1s_setlabelsizea ::
+               Ptr RawTH1S -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setLabelFontA"
-               c_th1s_setlabelfonta :: Ptr RawTH1S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setLabelFontA" c_th1s_setlabelfonta ::
+               Ptr RawTH1S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_setLabelOffsetA"
-               c_th1s_setlabeloffseta ::
-               Ptr RawTH1S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_setLabelOffsetA" c_th1s_setlabeloffseta ::
+               Ptr RawTH1S -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetMaximum"
-               c_th1s_setmaximum :: Ptr RawTH1S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetMaximum" c_th1s_setmaximum ::
+               Ptr RawTH1S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetMinimum"
-               c_th1s_setminimum :: Ptr RawTH1S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetMinimum" c_th1s_setminimum ::
+               Ptr RawTH1S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetNormFactor"
-               c_th1s_setnormfactor :: Ptr RawTH1S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetNormFactor" c_th1s_setnormfactor ::
+               Ptr RawTH1S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetStats"
-               c_th1s_setstats :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetStats"
+               c_th1s_setstats :: Ptr RawTH1S -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetOption"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetOption"
                c_th1s_setoption :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetXTitle"
                c_th1s_setxtitle :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetYTitle"
                c_th1s_setytitle :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetZTitle"
                c_th1s_setztitle :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_ShowBackground"
-               c_th1s_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_ShowBackground" c_th1s_showbackground ::
                Ptr RawTH1S -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_ShowPeaks"
                c_th1s_showpeaks ::
                Ptr RawTH1S -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Smooth"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Smooth"
                c_th1s_smooth :: Ptr RawTH1S -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Sumw2" c_th1s_sumw2
-               :: Ptr RawTH1S -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Sumw2"
+               c_th1s_sumw2 :: Ptr RawTH1S -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetName"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetName"
                c_th1s_setname :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetNameTitle"
-               c_th1s_setnametitle :: Ptr RawTH1S -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetNameTitle" c_th1s_setnametitle ::
+               Ptr RawTH1S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetTitle"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetTitle"
                c_th1s_settitle :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetLineColor"
-               c_th1s_getlinecolor :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetLineColor" c_th1s_getlinecolor ::
+               Ptr RawTH1S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetLineStyle"
-               c_th1s_getlinestyle :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetLineStyle" c_th1s_getlinestyle ::
+               Ptr RawTH1S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetLineWidth"
-               c_th1s_getlinewidth :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetLineWidth" c_th1s_getlinewidth ::
+               Ptr RawTH1S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_ResetAttLine"
-               c_th1s_resetattline :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_ResetAttLine" c_th1s_resetattline ::
+               Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetLineAttributes"
-               c_th1s_setlineattributes :: Ptr RawTH1S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetLineAttributes" c_th1s_setlineattributes
+               :: Ptr RawTH1S -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetLineColor"
-               c_th1s_setlinecolor :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetLineColor" c_th1s_setlinecolor ::
+               Ptr RawTH1S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetLineStyle"
-               c_th1s_setlinestyle :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetLineStyle" c_th1s_setlinestyle ::
+               Ptr RawTH1S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetLineWidth"
-               c_th1s_setlinewidth :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetLineWidth" c_th1s_setlinewidth ::
+               Ptr RawTH1S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetFillColor"
-               c_th1s_setfillcolor :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetFillColor" c_th1s_setfillcolor ::
+               Ptr RawTH1S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetFillStyle"
-               c_th1s_setfillstyle :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetFillStyle" c_th1s_setfillstyle ::
+               Ptr RawTH1S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMarkerColor"
-               c_th1s_getmarkercolor :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMarkerColor" c_th1s_getmarkercolor ::
+               Ptr RawTH1S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMarkerStyle"
-               c_th1s_getmarkerstyle :: Ptr RawTH1S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMarkerStyle" c_th1s_getmarkerstyle ::
+               Ptr RawTH1S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetMarkerSize"
-               c_th1s_getmarkersize :: Ptr RawTH1S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_GetMarkerSize" c_th1s_getmarkersize ::
+               Ptr RawTH1S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_ResetAttMarker"
-               c_th1s_resetattmarker :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_ResetAttMarker" c_th1s_resetattmarker ::
+               Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH1S.h TH1S_SetMarkerAttributes"
                c_th1s_setmarkerattributes :: Ptr RawTH1S -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetMarkerColor"
-               c_th1s_setmarkercolor :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetMarkerColor" c_th1s_setmarkercolor ::
+               Ptr RawTH1S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetMarkerStyle"
-               c_th1s_setmarkerstyle :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetMarkerStyle" c_th1s_setmarkerstyle ::
+               Ptr RawTH1S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SetMarkerSize"
-               c_th1s_setmarkersize :: Ptr RawTH1S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_SetMarkerSize" c_th1s_setmarkersize ::
+               Ptr RawTH1S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Draw" c_th1s_draw
-               :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Clear"
+               c_th1s_clear :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_FindObject"
-               c_th1s_findobject :: Ptr RawTH1S -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Draw"
+               c_th1s_draw :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH1S.h TH1S_FindObject" c_th1s_findobject ::
+               Ptr RawTH1S -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetName"
                c_th1s_getname :: Ptr RawTH1S -> IO CString
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_IsA" c_th1s_isa ::
-               Ptr RawTH1S -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_IsA"
+               c_th1s_isa :: Ptr RawTH1S -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Paint" c_th1s_paint
-               :: Ptr RawTH1S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Paint"
+               c_th1s_paint :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_printObj"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_printObj"
                c_th1s_printobj :: Ptr RawTH1S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_SaveAs"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SaveAs"
                c_th1s_saveas :: Ptr RawTH1S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_Write" c_th1s_write
-               :: Ptr RawTH1S -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Write"
+               c_th1s_write :: Ptr RawTH1S -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH1S.h TH1S_delete"
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_Write_"
+               c_th1s_write_ :: Ptr RawTH1S -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_delete"
                c_th1s_delete :: Ptr RawTH1S -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_GetAt"
+               c_th1s_getat :: Ptr RawTH1S -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetArray"
+               c_th1s_setarray :: Ptr RawTH1S -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH1S.h TH1S_SetAt"
+               c_th1s_setat :: Ptr RawTH1S -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH1S/Implementation.hs b/src/HROOT/Hist/TH1S/Implementation.hs
--- a/src/HROOT/Hist/TH1S/Implementation.hs
+++ b/src/HROOT/Hist/TH1S/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH1S.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH1S.RawType
 import HROOT.Hist.TH1S.FFI
 import HROOT.Hist.TH1S.Interface
 import HROOT.Hist.TH1S.Cast
+import HROOT.Hist.TH1S.RawType
+import HROOT.Hist.TH1S.Cast
+import HROOT.Hist.TH1S.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -48,20 +57,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH1S TH1S
+instance () => ITH1S (TH1S) where
 
-instance ITH1 TH1S where
+instance () => ITH1 (TH1S) where
         add = xform2 c_th1s_add
         addBinContent = xform2 c_th1s_addbincontent
         chi2Test = xform3 c_th1s_chi2test
-        computeIntegral = xform0 c_th1s_computeintegral
         directoryAutoAdd = xform1 c_th1s_directoryautoadd
         divide = xform5 c_th1s_divide
         drawCopyTH1 = xform1 c_th1s_drawcopyth1
@@ -133,9 +141,6 @@
         getRMS = xform1 c_th1s_getrms
         getRMSError = xform1 c_th1s_getrmserror
         getSkewness = xform1 c_th1s_getskewness
-        integral1 = xform3 c_th1s_integral1
-        interpolate1 = xform1 c_th1s_interpolate1
-        interpolate2 = xform2 c_th1s_interpolate2
         interpolate3 = xform3 c_th1s_interpolate3
         kolmogorovTest = xform2 c_th1s_kolmogorovtest
         labelsDeflate = xform1 c_th1s_labelsdeflate
@@ -190,14 +195,14 @@
         smooth = xform2 c_th1s_smooth
         sumw2 = xform0 c_th1s_sumw2
 
-instance ITArrayS TH1S
+instance () => ITArrayS (TH1S) where
 
-instance ITNamed TH1S where
+instance () => ITNamed (TH1S) where
         setName = xform1 c_th1s_setname
         setNameTitle = xform2 c_th1s_setnametitle
         setTitle = xform1 c_th1s_settitle
 
-instance ITAttLine TH1S where
+instance () => ITAttLine (TH1S) where
         getLineColor = xform0 c_th1s_getlinecolor
         getLineStyle = xform0 c_th1s_getlinestyle
         getLineWidth = xform0 c_th1s_getlinewidth
@@ -207,11 +212,11 @@
         setLineStyle = xform1 c_th1s_setlinestyle
         setLineWidth = xform1 c_th1s_setlinewidth
 
-instance ITAttFill TH1S where
+instance () => ITAttFill (TH1S) where
         setFillColor = xform1 c_th1s_setfillcolor
         setFillStyle = xform1 c_th1s_setfillstyle
 
-instance ITAttMarker TH1S where
+instance () => ITAttMarker (TH1S) where
         getMarkerColor = xform0 c_th1s_getmarkercolor
         getMarkerStyle = xform0 c_th1s_getmarkerstyle
         getMarkerSize = xform0 c_th1s_getmarkersize
@@ -221,7 +226,8 @@
         setMarkerStyle = xform1 c_th1s_setmarkerstyle
         setMarkerSize = xform1 c_th1s_setmarkersize
 
-instance ITObject TH1S where
+instance () => ITObject (TH1S) where
+        clear = xform1 c_th1s_clear
         draw = xform1 c_th1s_draw
         findObject = xform1 c_th1s_findobject
         getName = xform0 c_th1s_getname
@@ -230,8 +236,12 @@
         printObj = xform1 c_th1s_printobj
         saveAs = xform2 c_th1s_saveas
         write = xform3 c_th1s_write
+        write_ = xform0 c_th1s_write_
 
-instance IDeletable TH1S where
+instance () => IDeletable (TH1S) where
         delete = xform0 c_th1s_delete
 
-instance ITArray TH1S
+instance () => ITArray (TH1S) where
+        getAt = xform1 c_th1s_getat
+        setArray = xform1 c_th1s_setarray
+        setAt = xform2 c_th1s_setat
diff --git a/src/HROOT/Hist/TH1S/Interface.hs b/src/HROOT/Hist/TH1S/Interface.hs
--- a/src/HROOT/Hist/TH1S/Interface.hs
+++ b/src/HROOT/Hist/TH1S/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH1S.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TArrayS.Interface
 
-class (ITH1 a, ITArrayS a) => ITH1S a
+class (ITH1 a, ITArrayS a) => ITH1S a where
 
 upcastTH1S :: forall a . (FPtr a, ITH1S a) => a -> TH1S
 upcastTH1S h
diff --git a/src/HROOT/Hist/TH1S/RawType.hs b/src/HROOT/Hist/TH1S/RawType.hs
--- a/src/HROOT/Hist/TH1S/RawType.hs
+++ b/src/HROOT/Hist/TH1S/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH1S
 
 newtype TH1S = TH1S (Ptr RawTH1S)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH1S where
+instance () => FPtr (TH1S) where
         type Raw TH1S = RawTH1S
         get_fptr (TH1S ptr) = ptr
         cast_fptr_to_obj = TH1S
diff --git a/src/HROOT/Hist/TH2.hs b/src/HROOT/Hist/TH2.hs
--- a/src/HROOT/Hist/TH2.hs
+++ b/src/HROOT/Hist/TH2.hs
@@ -1,6 +1,6 @@
 module HROOT.Hist.TH2
-       (TH2(..), ITH2(..), upcastTH2, downcastTH2, tH2ProjectionX,
-        tH2ProjectionY)
+       (TH2(..), ITH2(..), upcastTH2, downcastTH2, tH2_ProjectionX,
+        tH2_ProjectionY)
        where
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH2.Interface
diff --git a/src/HROOT/Hist/TH2/Cast.hs b/src/HROOT/Hist/TH2/Cast.hs
--- a/src/HROOT/Hist/TH2/Cast.hs
+++ b/src/HROOT/Hist/TH2/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH2.Interface
 
-instance (ITH2 a, FPtr a) => Castable a (Ptr RawTH2) where
+instance (ITH2 a, FPtr a) => Castable (a) (Ptr RawTH2) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2 (Ptr RawTH2) where
+instance () => Castable (TH2) (Ptr RawTH2) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2/FFI.hsc b/src/HROOT/Hist/TH2/FFI.hsc
--- a/src/HROOT/Hist/TH2/FFI.hsc
+++ b/src/HROOT/Hist/TH2/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2.RawType
+import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -13,589 +16,655 @@
 import HROOT.Hist.TH1D.RawType
 import HROOT.Core.TObjArray.RawType
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Add" c_th2_add ::
-               Ptr RawTH2 -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Add"
+               c_th2_add :: Ptr RawTH2 -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_AddBinContent"
-               c_th2_addbincontent :: Ptr RawTH2 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_AddBinContent" c_th2_addbincontent ::
+               Ptr RawTH2 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Chi2Test"
                c_th2_chi2test ::
-               Ptr RawTH2 -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2.h TH2_ComputeIntegral"
-               c_th2_computeintegral :: Ptr RawTH2 -> IO CDouble
+               Ptr RawTH2 -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_DirectoryAutoAdd"
-               c_th2_directoryautoadd :: Ptr RawTH2 -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_DirectoryAutoAdd" c_th2_directoryautoadd ::
+               Ptr RawTH2 -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Divide" c_th2_divide
-               ::
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Divide"
+               c_th2_divide ::
                Ptr RawTH2 ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_drawCopyTH1"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_drawCopyTH1"
                c_th2_drawcopyth1 :: Ptr RawTH2 -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_DrawNormalized"
-               c_th2_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_DrawNormalized" c_th2_drawnormalized ::
                Ptr RawTH2 -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_drawPanelTH1"
-               c_th2_drawpanelth1 :: Ptr RawTH2 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_drawPanelTH1" c_th2_drawpanelth1 ::
+               Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_BufferEmpty"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_BufferEmpty"
                c_th2_bufferempty :: Ptr RawTH2 -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_evalF" c_th2_evalf ::
-               Ptr RawTH2 -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_evalF"
+               c_th2_evalf :: Ptr RawTH2 -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FFT" c_th2_fft ::
-               Ptr RawTH2 -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FFT"
+               c_th2_fft :: Ptr RawTH2 -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fill1" c_th2_fill1 ::
-               Ptr RawTH2 -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fill1"
+               c_th2_fill1 :: Ptr RawTH2 -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fill1w" c_th2_fill1w
-               :: Ptr RawTH2 -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fill1w"
+               c_th2_fill1w :: Ptr RawTH2 -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fillN1" c_th2_filln1
-               ::
-               Ptr RawTH2 ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fillN1"
+               c_th2_filln1 ::
+               Ptr RawTH2 -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FillRandom"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FillRandom"
                c_th2_fillrandom :: Ptr RawTH2 -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FindBin"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FindBin"
                c_th2_findbin ::
                Ptr RawTH2 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FindFixBin"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FindFixBin"
                c_th2_findfixbin ::
                Ptr RawTH2 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FindFirstBinAbove"
-               c_th2_findfirstbinabove :: Ptr RawTH2 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_FindFirstBinAbove" c_th2_findfirstbinabove ::
+               Ptr RawTH2 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FindLastBinAbove"
-               c_th2_findlastbinabove :: Ptr RawTH2 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_FindLastBinAbove" c_th2_findlastbinabove ::
+               Ptr RawTH2 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Fit" c_th2_fit ::
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Fit"
+               c_th2_fit ::
                Ptr RawTH2 ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FitPanelTH1"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FitPanelTH1"
                c_th2_fitpanelth1 :: Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getNdivisionA"
-               c_th2_getndivisiona :: Ptr RawTH2 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getNdivisionA" c_th2_getndivisiona ::
+               Ptr RawTH2 -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getAxisColorA"
-               c_th2_getaxiscolora :: Ptr RawTH2 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getAxisColorA" c_th2_getaxiscolora ::
+               Ptr RawTH2 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getLabelColorA"
-               c_th2_getlabelcolora :: Ptr RawTH2 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getLabelColorA" c_th2_getlabelcolora ::
+               Ptr RawTH2 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getLabelFontA"
-               c_th2_getlabelfonta :: Ptr RawTH2 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getLabelFontA" c_th2_getlabelfonta ::
+               Ptr RawTH2 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getLabelOffsetA"
-               c_th2_getlabeloffseta :: Ptr RawTH2 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getLabelOffsetA" c_th2_getlabeloffseta ::
+               Ptr RawTH2 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getLabelSizeA"
-               c_th2_getlabelsizea :: Ptr RawTH2 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getLabelSizeA" c_th2_getlabelsizea ::
+               Ptr RawTH2 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getTitleFontA"
-               c_th2_gettitlefonta :: Ptr RawTH2 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getTitleFontA" c_th2_gettitlefonta ::
+               Ptr RawTH2 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getTitleOffsetA"
-               c_th2_gettitleoffseta :: Ptr RawTH2 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getTitleOffsetA" c_th2_gettitleoffseta ::
+               Ptr RawTH2 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getTitleSizeA"
-               c_th2_gettitlesizea :: Ptr RawTH2 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getTitleSizeA" c_th2_gettitlesizea ::
+               Ptr RawTH2 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getTickLengthA"
-               c_th2_getticklengtha :: Ptr RawTH2 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getTickLengthA" c_th2_getticklengtha ::
+               Ptr RawTH2 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBarOffset"
-               c_th2_getbaroffset :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBarOffset" c_th2_getbaroffset ::
+               Ptr RawTH2 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBarWidth"
-               c_th2_getbarwidth :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetBarWidth"
+               c_th2_getbarwidth :: Ptr RawTH2 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetContour"
-               c_th2_getcontour :: Ptr RawTH2 -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetContour"
+               c_th2_getcontour :: Ptr RawTH2 -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetContourLevel"
-               c_th2_getcontourlevel :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetContourLevel" c_th2_getcontourlevel ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetContourLevelPad"
-               c_th2_getcontourlevelpad :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetContourLevelPad" c_th2_getcontourlevelpad ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBin" c_th2_getbin
-               :: Ptr RawTH2 -> CInt -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetBin"
+               c_th2_getbin :: Ptr RawTH2 -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinCenter"
-               c_th2_getbincenter :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinCenter" c_th2_getbincenter ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinContent1"
-               c_th2_getbincontent1 :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinContent1" c_th2_getbincontent1 ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinContent2"
-               c_th2_getbincontent2 :: Ptr RawTH2 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinContent2" c_th2_getbincontent2 ::
+               Ptr RawTH2 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinContent3"
-               c_th2_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinContent3" c_th2_getbincontent3 ::
                Ptr RawTH2 -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinError1"
-               c_th2_getbinerror1 :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinError1" c_th2_getbinerror1 ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinError2"
-               c_th2_getbinerror2 :: Ptr RawTH2 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinError2" c_th2_getbinerror2 ::
+               Ptr RawTH2 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinError3"
-               c_th2_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinError3" c_th2_getbinerror3 ::
                Ptr RawTH2 -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinLowEdge"
-               c_th2_getbinlowedge :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetBinLowEdge" c_th2_getbinlowedge ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetBinWidth"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetBinWidth"
                c_th2_getbinwidth :: Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetCellContent"
-               c_th2_getcellcontent :: Ptr RawTH2 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetCellContent" c_th2_getcellcontent ::
+               Ptr RawTH2 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetCellError"
-               c_th2_getcellerror :: Ptr RawTH2 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetCellError" c_th2_getcellerror ::
+               Ptr RawTH2 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetEntries"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetEntries"
                c_th2_getentries :: Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetEffectiveEntries"
-               c_th2_geteffectiveentries :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetEffectiveEntries" c_th2_geteffectiveentries
+               :: Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetFunction"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetFunction"
                c_th2_getfunction :: Ptr RawTH2 -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetDimension"
-               c_th2_getdimension :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetDimension" c_th2_getdimension ::
+               Ptr RawTH2 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetKurtosis"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetKurtosis"
                c_th2_getkurtosis :: Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetLowEdge"
-               c_th2_getlowedge :: Ptr RawTH2 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetLowEdge"
+               c_th2_getlowedge :: Ptr RawTH2 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getMaximumTH1"
-               c_th2_getmaximumth1 :: Ptr RawTH2 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getMaximumTH1" c_th2_getmaximumth1 ::
+               Ptr RawTH2 -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMaximumBin"
-               c_th2_getmaximumbin :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMaximumBin" c_th2_getmaximumbin ::
+               Ptr RawTH2 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMaximumStored"
-               c_th2_getmaximumstored :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMaximumStored" c_th2_getmaximumstored ::
+               Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getMinimumTH1"
-               c_th2_getminimumth1 :: Ptr RawTH2 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getMinimumTH1" c_th2_getminimumth1 ::
+               Ptr RawTH2 -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMinimumBin"
-               c_th2_getminimumbin :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMinimumBin" c_th2_getminimumbin ::
+               Ptr RawTH2 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMinimumStored"
-               c_th2_getminimumstored :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMinimumStored" c_th2_getminimumstored ::
+               Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMean"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetMean"
                c_th2_getmean :: Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMeanError"
-               c_th2_getmeanerror :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMeanError" c_th2_getmeanerror ::
+               Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetNbinsX"
                c_th2_getnbinsx :: Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetNbinsY"
                c_th2_getnbinsy :: Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetNbinsZ"
                c_th2_getnbinsz :: Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getQuantilesTH1"
-               c_th2_getquantilesth1 ::
-               Ptr RawTH2 -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getQuantilesTH1" c_th2_getquantilesth1 ::
+               Ptr RawTH2 -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetRandom"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetRandom"
                c_th2_getrandom :: Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetStats"
-               c_th2_getstats :: Ptr RawTH2 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetStats"
+               c_th2_getstats :: Ptr RawTH2 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetSumOfWeights"
-               c_th2_getsumofweights :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetSumOfWeights" c_th2_getsumofweights ::
+               Ptr RawTH2 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetSumw2"
                c_th2_getsumw2 :: Ptr RawTH2 -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetSumw2N"
                c_th2_getsumw2n :: Ptr RawTH2 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetRMS" c_th2_getrms
-               :: Ptr RawTH2 -> CInt -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetRMS"
+               c_th2_getrms :: Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetRMSError"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetRMSError"
                c_th2_getrmserror :: Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetSkewness"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetSkewness"
                c_th2_getskewness :: Ptr RawTH2 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_integral1"
-               c_th2_integral1 ::
-               Ptr RawTH2 -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2.h TH2_interpolate1"
-               c_th2_interpolate1 :: Ptr RawTH2 -> CDouble -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2.h TH2_interpolate2"
-               c_th2_interpolate2 ::
-               Ptr RawTH2 -> CDouble -> CDouble -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2.h TH2_interpolate3"
-               c_th2_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_interpolate3" c_th2_interpolate3 ::
                Ptr RawTH2 -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_KolmogorovTest"
-               c_th2_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_KolmogorovTest" c_th2_kolmogorovtest ::
                Ptr RawTH2 -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_LabelsDeflate"
-               c_th2_labelsdeflate :: Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_LabelsDeflate" c_th2_labelsdeflate ::
+               Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_LabelsInflate"
-               c_th2_labelsinflate :: Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_LabelsInflate" c_th2_labelsinflate ::
+               Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_LabelsOption"
-               c_th2_labelsoption :: Ptr RawTH2 -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_LabelsOption" c_th2_labelsoption ::
+               Ptr RawTH2 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_multiflyF"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_multiflyF"
                c_th2_multiflyf :: Ptr RawTH2 -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Multiply"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Multiply"
                c_th2_multiply ::
                Ptr RawTH2 ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_PutStats"
-               c_th2_putstats :: Ptr RawTH2 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_PutStats"
+               c_th2_putstats :: Ptr RawTH2 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Rebin" c_th2_rebin ::
-               Ptr RawTH2 -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Rebin"
+               c_th2_rebin ::
+               Ptr RawTH2 -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_RebinAxis"
                c_th2_rebinaxis :: Ptr RawTH2 -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Rebuild"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Rebuild"
                c_th2_rebuild :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_RecursiveRemove"
-               c_th2_recursiveremove :: Ptr RawTH2 -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_RecursiveRemove" c_th2_recursiveremove ::
+               Ptr RawTH2 -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Reset" c_th2_reset ::
-               Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Reset"
+               c_th2_reset :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_ResetStats"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_ResetStats"
                c_th2_resetstats :: Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Scale" c_th2_scale ::
-               Ptr RawTH2 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Scale"
+               c_th2_scale :: Ptr RawTH2 -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setAxisColorA"
-               c_th2_setaxiscolora :: Ptr RawTH2 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setAxisColorA" c_th2_setaxiscolora ::
+               Ptr RawTH2 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetAxisRange"
-               c_th2_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetAxisRange" c_th2_setaxisrange ::
                Ptr RawTH2 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetBarOffset"
-               c_th2_setbaroffset :: Ptr RawTH2 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetBarOffset" c_th2_setbaroffset ::
+               Ptr RawTH2 -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetBarWidth"
-               c_th2_setbarwidth :: Ptr RawTH2 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetBarWidth"
+               c_th2_setbarwidth :: Ptr RawTH2 -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBinContent1"
-               c_th2_setbincontent1 :: Ptr RawTH2 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setBinContent1" c_th2_setbincontent1 ::
+               Ptr RawTH2 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBinContent2"
-               c_th2_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setBinContent2" c_th2_setbincontent2 ::
                Ptr RawTH2 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBinContent3"
-               c_th2_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setBinContent3" c_th2_setbincontent3 ::
                Ptr RawTH2 -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBinError1"
-               c_th2_setbinerror1 :: Ptr RawTH2 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setBinError1" c_th2_setbinerror1 ::
+               Ptr RawTH2 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBinError2"
-               c_th2_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setBinError2" c_th2_setbinerror2 ::
                Ptr RawTH2 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBinError3"
-               c_th2_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setBinError3" c_th2_setbinerror3 ::
                Ptr RawTH2 -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBins1"
-               c_th2_setbins1 :: Ptr RawTH2 -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_setBins1"
+               c_th2_setbins1 :: Ptr RawTH2 -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBins2"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_setBins2"
                c_th2_setbins2 ::
-               Ptr RawTH2 ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH2 -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setBins3"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_setBins3"
                c_th2_setbins3 ::
                Ptr RawTH2 ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetBinsLength"
-               c_th2_setbinslength :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetBinsLength" c_th2_setbinslength ::
+               Ptr RawTH2 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetBuffer"
                c_th2_setbuffer :: Ptr RawTH2 -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetCellContent"
-               c_th2_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetCellContent" c_th2_setcellcontent ::
                Ptr RawTH2 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetContent"
-               c_th2_setcontent :: Ptr RawTH2 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetContent"
+               c_th2_setcontent :: Ptr RawTH2 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetContour"
-               c_th2_setcontour :: Ptr RawTH2 -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetContour"
+               c_th2_setcontour :: Ptr RawTH2 -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetContourLevel"
-               c_th2_setcontourlevel :: Ptr RawTH2 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetContourLevel" c_th2_setcontourlevel ::
+               Ptr RawTH2 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetDirectory"
-               c_th2_setdirectory :: Ptr RawTH2 -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetDirectory" c_th2_setdirectory ::
+               Ptr RawTH2 -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetEntries"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetEntries"
                c_th2_setentries :: Ptr RawTH2 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetError"
-               c_th2_seterror :: Ptr RawTH2 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetError"
+               c_th2_seterror :: Ptr RawTH2 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setLabelColorA"
-               c_th2_setlabelcolora :: Ptr RawTH2 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setLabelColorA" c_th2_setlabelcolora ::
+               Ptr RawTH2 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setLabelSizeA"
-               c_th2_setlabelsizea :: Ptr RawTH2 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setLabelSizeA" c_th2_setlabelsizea ::
+               Ptr RawTH2 -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setLabelFontA"
-               c_th2_setlabelfonta :: Ptr RawTH2 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setLabelFontA" c_th2_setlabelfonta ::
+               Ptr RawTH2 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_setLabelOffsetA"
-               c_th2_setlabeloffseta :: Ptr RawTH2 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_setLabelOffsetA" c_th2_setlabeloffseta ::
+               Ptr RawTH2 -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetMaximum"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetMaximum"
                c_th2_setmaximum :: Ptr RawTH2 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetMinimum"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetMinimum"
                c_th2_setminimum :: Ptr RawTH2 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetNormFactor"
-               c_th2_setnormfactor :: Ptr RawTH2 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetNormFactor" c_th2_setnormfactor ::
+               Ptr RawTH2 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetStats"
-               c_th2_setstats :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetStats"
+               c_th2_setstats :: Ptr RawTH2 -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetOption"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetOption"
                c_th2_setoption :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetXTitle"
                c_th2_setxtitle :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetYTitle"
                c_th2_setytitle :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetZTitle"
                c_th2_setztitle :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_ShowBackground"
-               c_th2_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_ShowBackground" c_th2_showbackground ::
                Ptr RawTH2 -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_ShowPeaks"
                c_th2_showpeaks ::
                Ptr RawTH2 -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Smooth" c_th2_smooth
-               :: Ptr RawTH2 -> CInt -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Smooth"
+               c_th2_smooth :: Ptr RawTH2 -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Sumw2" c_th2_sumw2 ::
-               Ptr RawTH2 -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Sumw2"
+               c_th2_sumw2 :: Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetName"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetName"
                c_th2_setname :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetNameTitle"
-               c_th2_setnametitle :: Ptr RawTH2 -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetNameTitle" c_th2_setnametitle ::
+               Ptr RawTH2 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetTitle"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SetTitle"
                c_th2_settitle :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetLineColor"
-               c_th2_getlinecolor :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetLineColor" c_th2_getlinecolor ::
+               Ptr RawTH2 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetLineStyle"
-               c_th2_getlinestyle :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetLineStyle" c_th2_getlinestyle ::
+               Ptr RawTH2 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetLineWidth"
-               c_th2_getlinewidth :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetLineWidth" c_th2_getlinewidth ::
+               Ptr RawTH2 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_ResetAttLine"
-               c_th2_resetattline :: Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_ResetAttLine" c_th2_resetattline ::
+               Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetLineAttributes"
-               c_th2_setlineattributes :: Ptr RawTH2 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetLineAttributes" c_th2_setlineattributes ::
+               Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetLineColor"
-               c_th2_setlinecolor :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetLineColor" c_th2_setlinecolor ::
+               Ptr RawTH2 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetLineStyle"
-               c_th2_setlinestyle :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetLineStyle" c_th2_setlinestyle ::
+               Ptr RawTH2 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetLineWidth"
-               c_th2_setlinewidth :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetLineWidth" c_th2_setlinewidth ::
+               Ptr RawTH2 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetFillColor"
-               c_th2_setfillcolor :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetFillColor" c_th2_setfillcolor ::
+               Ptr RawTH2 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetFillStyle"
-               c_th2_setfillstyle :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetFillStyle" c_th2_setfillstyle ::
+               Ptr RawTH2 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMarkerColor"
-               c_th2_getmarkercolor :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMarkerColor" c_th2_getmarkercolor ::
+               Ptr RawTH2 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMarkerStyle"
-               c_th2_getmarkerstyle :: Ptr RawTH2 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMarkerStyle" c_th2_getmarkerstyle ::
+               Ptr RawTH2 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetMarkerSize"
-               c_th2_getmarkersize :: Ptr RawTH2 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_GetMarkerSize" c_th2_getmarkersize ::
+               Ptr RawTH2 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2.h TH2_ResetAttMarker"
-               c_th2_resetattmarker :: Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_ResetAttMarker" c_th2_resetattmarker ::
+               Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetMarkerAttributes"
-               c_th2_setmarkerattributes :: Ptr RawTH2 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetMarkerAttributes" c_th2_setmarkerattributes
+               :: Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetMarkerColor"
-               c_th2_setmarkercolor :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetMarkerColor" c_th2_setmarkercolor ::
+               Ptr RawTH2 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetMarkerStyle"
-               c_th2_setmarkerstyle :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetMarkerStyle" c_th2_setmarkerstyle ::
+               Ptr RawTH2 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetMarkerSize"
-               c_th2_setmarkersize :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetMarkerSize" c_th2_setmarkersize ::
+               Ptr RawTH2 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Draw" c_th2_draw ::
-               Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Clear"
+               c_th2_clear :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FindObject"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Draw"
+               c_th2_draw :: Ptr RawTH2 -> CString -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FindObject"
                c_th2_findobject :: Ptr RawTH2 -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_GetName"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_GetName"
                c_th2_getname :: Ptr RawTH2 -> IO CString
 
-foreign import ccall safe "HROOTHistTH2.h TH2_IsA" c_th2_isa ::
-               Ptr RawTH2 -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH2.h TH2_IsA"
+               c_th2_isa :: Ptr RawTH2 -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Paint" c_th2_paint ::
-               Ptr RawTH2 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Paint"
+               c_th2_paint :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_printObj"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_printObj"
                c_th2_printobj :: Ptr RawTH2 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SaveAs" c_th2_saveas
-               :: Ptr RawTH2 -> CString -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_SaveAs"
+               c_th2_saveas :: Ptr RawTH2 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Write" c_th2_write ::
-               Ptr RawTH2 -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Write"
+               c_th2_write :: Ptr RawTH2 -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_delete" c_th2_delete
-               :: Ptr RawTH2 -> IO ()
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Write_"
+               c_th2_write_ :: Ptr RawTH2 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fill2" c_th2_fill2 ::
-               Ptr RawTH2 -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_delete"
+               c_th2_delete :: Ptr RawTH2 -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fill2w" c_th2_fill2w
-               :: Ptr RawTH2 -> CDouble -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fill2"
+               c_th2_fill2 :: Ptr RawTH2 -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fillN2" c_th2_filln2
-               ::
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fill2w"
+               c_th2_fill2w ::
+               Ptr RawTH2 -> CDouble -> CDouble -> CDouble -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fillN2"
+               c_th2_filln2 ::
                Ptr RawTH2 ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_fillRandom2"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_fillRandom2"
                c_th2_fillrandom2 :: Ptr RawTH2 -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_findFirstBinAbove2"
-               c_th2_findfirstbinabove2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_findFirstBinAbove2" c_th2_findfirstbinabove2 ::
                Ptr RawTH2 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_findLastBinAbove2"
-               c_th2_findlastbinabove2 :: Ptr RawTH2 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_findLastBinAbove2" c_th2_findlastbinabove2 ::
+               Ptr RawTH2 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FitSlicesX"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FitSlicesX"
                c_th2_fitslicesx ::
                Ptr RawTH2 ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_FitSlicesY"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_FitSlicesY"
                c_th2_fitslicesy ::
                Ptr RawTH2 ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2.h TH2_getCorrelationFactor2"
                c_th2_getcorrelationfactor2 ::
                Ptr RawTH2 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_getCovariance2"
-               c_th2_getcovariance2 :: Ptr RawTH2 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_getCovariance2" c_th2_getcovariance2 ::
+               Ptr RawTH2 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_integral2"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_integral2"
                c_th2_integral2 ::
                Ptr RawTH2 -> CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2.h TH2_tH2ProjectionX"
-               c_th2_th2projectionx ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_tH2_ProjectionX" c_th2_th2_projectionx ::
                Ptr RawTH2 ->
                  CString -> CInt -> CInt -> CString -> IO (Ptr RawTH1D)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_tH2ProjectionY"
-               c_th2_th2projectiony ::
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_tH2_ProjectionY" c_th2_th2_projectiony ::
                Ptr RawTH2 ->
                  CString -> CInt -> CInt -> CString -> IO (Ptr RawTH1D)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_rebinX2"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_rebinX2"
                c_th2_rebinx2 :: Ptr RawTH2 -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_rebinY2"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_rebinY2"
                c_th2_rebiny2 :: Ptr RawTH2 -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_Rebin2D"
+foreign import ccall interruptible "HROOTHistTH2.h TH2_Rebin2D"
                c_th2_rebin2d ::
                Ptr RawTH2 -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetShowProjectionX"
-               c_th2_setshowprojectionx :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetShowProjectionX" c_th2_setshowprojectionx ::
+               Ptr RawTH2 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2.h TH2_SetShowProjectionY"
-               c_th2_setshowprojectiony :: Ptr RawTH2 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2.h TH2_SetShowProjectionY" c_th2_setshowprojectiony ::
+               Ptr RawTH2 -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH2/Implementation.hs b/src/HROOT/Hist/TH2/Implementation.hs
--- a/src/HROOT/Hist/TH2/Implementation.hs
+++ b/src/HROOT/Hist/TH2/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH2.FFI
 import HROOT.Hist.TH2.Interface
 import HROOT.Hist.TH2.Cast
+import HROOT.Hist.TH2.RawType
+import HROOT.Hist.TH2.Cast
+import HROOT.Hist.TH2.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -51,11 +60,11 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITH2 TH2 where
+instance () => ITH2 (TH2) where
         fill2 = xform2 c_th2_fill2
         fill2w = xform3 c_th2_fill2w
         fillN2 = xform5 c_th2_filln2
@@ -73,11 +82,10 @@
         setShowProjectionX = xform1 c_th2_setshowprojectionx
         setShowProjectionY = xform1 c_th2_setshowprojectiony
 
-instance ITH1 TH2 where
+instance () => ITH1 (TH2) where
         add = xform2 c_th2_add
         addBinContent = xform2 c_th2_addbincontent
         chi2Test = xform3 c_th2_chi2test
-        computeIntegral = xform0 c_th2_computeintegral
         directoryAutoAdd = xform1 c_th2_directoryautoadd
         divide = xform5 c_th2_divide
         drawCopyTH1 = xform1 c_th2_drawcopyth1
@@ -149,9 +157,6 @@
         getRMS = xform1 c_th2_getrms
         getRMSError = xform1 c_th2_getrmserror
         getSkewness = xform1 c_th2_getskewness
-        integral1 = xform3 c_th2_integral1
-        interpolate1 = xform1 c_th2_interpolate1
-        interpolate2 = xform2 c_th2_interpolate2
         interpolate3 = xform3 c_th2_interpolate3
         kolmogorovTest = xform2 c_th2_kolmogorovtest
         labelsDeflate = xform1 c_th2_labelsdeflate
@@ -206,12 +211,12 @@
         smooth = xform2 c_th2_smooth
         sumw2 = xform0 c_th2_sumw2
 
-instance ITNamed TH2 where
+instance () => ITNamed (TH2) where
         setName = xform1 c_th2_setname
         setNameTitle = xform2 c_th2_setnametitle
         setTitle = xform1 c_th2_settitle
 
-instance ITAttLine TH2 where
+instance () => ITAttLine (TH2) where
         getLineColor = xform0 c_th2_getlinecolor
         getLineStyle = xform0 c_th2_getlinestyle
         getLineWidth = xform0 c_th2_getlinewidth
@@ -221,11 +226,11 @@
         setLineStyle = xform1 c_th2_setlinestyle
         setLineWidth = xform1 c_th2_setlinewidth
 
-instance ITAttFill TH2 where
+instance () => ITAttFill (TH2) where
         setFillColor = xform1 c_th2_setfillcolor
         setFillStyle = xform1 c_th2_setfillstyle
 
-instance ITAttMarker TH2 where
+instance () => ITAttMarker (TH2) where
         getMarkerColor = xform0 c_th2_getmarkercolor
         getMarkerStyle = xform0 c_th2_getmarkerstyle
         getMarkerSize = xform0 c_th2_getmarkersize
@@ -235,7 +240,8 @@
         setMarkerStyle = xform1 c_th2_setmarkerstyle
         setMarkerSize = xform1 c_th2_setmarkersize
 
-instance ITObject TH2 where
+instance () => ITObject (TH2) where
+        clear = xform1 c_th2_clear
         draw = xform1 c_th2_draw
         findObject = xform1 c_th2_findobject
         getName = xform0 c_th2_getname
@@ -244,16 +250,17 @@
         printObj = xform1 c_th2_printobj
         saveAs = xform2 c_th2_saveas
         write = xform3 c_th2_write
+        write_ = xform0 c_th2_write_
 
-instance IDeletable TH2 where
+instance () => IDeletable (TH2) where
         delete = xform0 c_th2_delete
 
-tH2ProjectionX ::
-                 (Castable c1 CString, Castable c0 CString) =>
-                 TH2 -> c0 -> CInt -> CInt -> c1 -> IO TH1D
-tH2ProjectionX = xform4 c_th2_th2projectionx
+tH2_ProjectionX ::
+                  (Castable c1 CString, Castable c0 CString) =>
+                  TH2 -> c0 -> CInt -> CInt -> c1 -> IO TH1D
+tH2_ProjectionX = xform4 c_th2_th2_projectionx
 
-tH2ProjectionY ::
-                 (Castable c1 CString, Castable c0 CString) =>
-                 TH2 -> c0 -> CInt -> CInt -> c1 -> IO TH1D
-tH2ProjectionY = xform4 c_th2_th2projectiony
+tH2_ProjectionY ::
+                  (Castable c1 CString, Castable c0 CString) =>
+                  TH2 -> c0 -> CInt -> CInt -> c1 -> IO TH1D
+tH2_ProjectionY = xform4 c_th2_th2_projectiony
diff --git a/src/HROOT/Hist/TH2/Interface.hs b/src/HROOT/Hist/TH2/Interface.hs
--- a/src/HROOT/Hist/TH2/Interface.hs
+++ b/src/HROOT/Hist/TH2/Interface.hs
@@ -4,30 +4,30 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TH2.RawType
-import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TObjArray.Interface
-import {-# SOURCE #-} HROOT.Hist.TF1.Interface
+import HROOT.Hist.TF1.Interface
 
-class ITH1 a => ITH2 a where
-        fill2 :: a -> CDouble -> CDouble -> IO CInt
+class (ITH1 a) => ITH2 a where
+        fill2 :: () => a -> CDouble -> CDouble -> IO CInt
         
-        fill2w :: a -> CDouble -> CDouble -> CDouble -> IO CInt
+        fill2w :: () => a -> CDouble -> CDouble -> CDouble -> IO CInt
         
         fillN2 ::
+                 () =>
                  a ->
-                   CInt ->
-                     (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                   CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
         
         fillRandom2 :: (ITH1 c0, FPtr c0) => a -> c0 -> CInt -> IO ()
         
-        findFirstBinAbove2 :: a -> CDouble -> CInt -> IO CInt
+        findFirstBinAbove2 :: () => a -> CDouble -> CInt -> IO CInt
         
-        findLastBinAbove2 :: a -> CDouble -> CInt -> IO CInt
+        findLastBinAbove2 :: () => a -> CDouble -> CInt -> IO CInt
         
         fitSlicesX ::
                      (ITObjArray c2, FPtr c2, Castable c1 CString, ITF1 c0, FPtr c0) =>
@@ -37,23 +37,24 @@
                      (ITObjArray c2, FPtr c2, Castable c1 CString, ITF1 c0, FPtr c0) =>
                      a -> c0 -> CInt -> CInt -> CInt -> c1 -> c2 -> IO ()
         
-        getCorrelationFactor2 :: a -> CInt -> CInt -> IO CDouble
+        getCorrelationFactor2 :: () => a -> CInt -> CInt -> IO CDouble
         
-        getCovariance2 :: a -> CInt -> CInt -> IO CDouble
+        getCovariance2 :: () => a -> CInt -> CInt -> IO CDouble
         
         integral2 ::
-                    Castable c0 CString =>
+                    (Castable c0 CString) =>
                     a -> CInt -> CInt -> CInt -> CInt -> c0 -> IO CDouble
         
-        rebinX2 :: Castable c0 CString => a -> CInt -> c0 -> IO TH2
+        rebinX2 :: (Castable c0 CString) => a -> CInt -> c0 -> IO TH2
         
-        rebinY2 :: Castable c0 CString => a -> CInt -> c0 -> IO TH2
+        rebinY2 :: (Castable c0 CString) => a -> CInt -> c0 -> IO TH2
         
-        rebin2D :: Castable c0 CString => a -> CInt -> CInt -> c0 -> IO TH2
+        rebin2D ::
+                  (Castable c0 CString) => a -> CInt -> CInt -> c0 -> IO TH2
         
-        setShowProjectionX :: a -> CInt -> IO ()
+        setShowProjectionX :: () => a -> CInt -> IO ()
         
-        setShowProjectionY :: a -> CInt -> IO ()
+        setShowProjectionY :: () => a -> CInt -> IO ()
 
 upcastTH2 :: forall a . (FPtr a, ITH2 a) => a -> TH2
 upcastTH2 h
diff --git a/src/HROOT/Hist/TH2/RawType.hs b/src/HROOT/Hist/TH2/RawType.hs
--- a/src/HROOT/Hist/TH2/RawType.hs
+++ b/src/HROOT/Hist/TH2/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2
 
 newtype TH2 = TH2 (Ptr RawTH2)
-            deriving (Eq, Ord, Show)
+                deriving (Eq, Ord, Show)
 
-instance FPtr TH2 where
+instance () => FPtr (TH2) where
         type Raw TH2 = RawTH2
         get_fptr (TH2 ptr) = ptr
         cast_fptr_to_obj = TH2
diff --git a/src/HROOT/Hist/TH2C/Cast.hs b/src/HROOT/Hist/TH2C/Cast.hs
--- a/src/HROOT/Hist/TH2C/Cast.hs
+++ b/src/HROOT/Hist/TH2C/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH2C.RawType
 import HROOT.Hist.TH2C.Interface
 
-instance (ITH2C a, FPtr a) => Castable a (Ptr RawTH2C) where
+instance (ITH2C a, FPtr a) => Castable (a) (Ptr RawTH2C) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2C (Ptr RawTH2C) where
+instance () => Castable (TH2C) (Ptr RawTH2C) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2C/FFI.hsc b/src/HROOT/Hist/TH2C/FFI.hsc
--- a/src/HROOT/Hist/TH2C/FFI.hsc
+++ b/src/HROOT/Hist/TH2C/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2C.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2C.RawType
+import HROOT.Hist.TH2C.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
@@ -14,589 +17,678 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fill2" c_th2c_fill2
-               :: Ptr RawTH2C -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_fill2"
+               c_th2c_fill2 :: Ptr RawTH2C -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fill2w"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_fill2w"
                c_th2c_fill2w ::
                Ptr RawTH2C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fillN2"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_fillN2"
                c_th2c_filln2 ::
                Ptr RawTH2C ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fillRandom2"
-               c_th2c_fillrandom2 :: Ptr RawTH2C -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_fillRandom2" c_th2c_fillrandom2 ::
+               Ptr RawTH2C -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_findFirstBinAbove2"
-               c_th2c_findfirstbinabove2 ::
-               Ptr RawTH2C -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_findFirstBinAbove2" c_th2c_findfirstbinabove2
+               :: Ptr RawTH2C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_findLastBinAbove2"
-               c_th2c_findlastbinabove2 ::
-               Ptr RawTH2C -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_findLastBinAbove2" c_th2c_findlastbinabove2
+               :: Ptr RawTH2C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FitSlicesX"
-               c_th2c_fitslicesx ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FitSlicesX" c_th2c_fitslicesx ::
                Ptr RawTH2C ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FitSlicesY"
-               c_th2c_fitslicesy ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FitSlicesY" c_th2c_fitslicesy ::
                Ptr RawTH2C ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2C.h TH2C_getCorrelationFactor2"
                c_th2c_getcorrelationfactor2 ::
                Ptr RawTH2C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getCovariance2"
-               c_th2c_getcovariance2 :: Ptr RawTH2C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getCovariance2" c_th2c_getcovariance2 ::
+               Ptr RawTH2C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_integral2"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_integral2"
                c_th2c_integral2 ::
                Ptr RawTH2C ->
                  CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_rebinX2"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_rebinX2"
                c_th2c_rebinx2 :: Ptr RawTH2C -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_rebinY2"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_rebinY2"
                c_th2c_rebiny2 :: Ptr RawTH2C -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Rebin2D"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Rebin2D"
                c_th2c_rebin2d ::
                Ptr RawTH2C -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetShowProjectionX"
-               c_th2c_setshowprojectionx :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetShowProjectionX" c_th2c_setshowprojectionx
+               :: Ptr RawTH2C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetShowProjectionY"
-               c_th2c_setshowprojectiony :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetShowProjectionY" c_th2c_setshowprojectiony
+               :: Ptr RawTH2C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Add" c_th2c_add ::
-               Ptr RawTH2C -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Add"
+               c_th2c_add :: Ptr RawTH2C -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_AddBinContent"
-               c_th2c_addbincontent :: Ptr RawTH2C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_AddBinContent" c_th2c_addbincontent ::
+               Ptr RawTH2C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Chi2Test"
                c_th2c_chi2test ::
-               Ptr RawTH2C -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2C.h TH2C_ComputeIntegral"
-               c_th2c_computeintegral :: Ptr RawTH2C -> IO CDouble
+               Ptr RawTH2C -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_DirectoryAutoAdd"
-               c_th2c_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_DirectoryAutoAdd" c_th2c_directoryautoadd ::
                Ptr RawTH2C -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Divide"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Divide"
                c_th2c_divide ::
                Ptr RawTH2C ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_drawCopyTH1"
-               c_th2c_drawcopyth1 :: Ptr RawTH2C -> CString -> IO (Ptr RawTH2C)
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_drawCopyTH1" c_th2c_drawcopyth1 ::
+               Ptr RawTH2C -> CString -> IO (Ptr RawTH2C)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_DrawNormalized"
-               c_th2c_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_DrawNormalized" c_th2c_drawnormalized ::
                Ptr RawTH2C -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_drawPanelTH1"
-               c_th2c_drawpanelth1 :: Ptr RawTH2C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_drawPanelTH1" c_th2c_drawpanelth1 ::
+               Ptr RawTH2C -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_BufferEmpty"
-               c_th2c_bufferempty :: Ptr RawTH2C -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_BufferEmpty" c_th2c_bufferempty ::
+               Ptr RawTH2C -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_evalF" c_th2c_evalf
-               :: Ptr RawTH2C -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_evalF"
+               c_th2c_evalf :: Ptr RawTH2C -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FFT" c_th2c_fft ::
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_FFT"
+               c_th2c_fft ::
                Ptr RawTH2C -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fill1" c_th2c_fill1
-               :: Ptr RawTH2C -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_fill1"
+               c_th2c_fill1 :: Ptr RawTH2C -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fill1w"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_fill1w"
                c_th2c_fill1w :: Ptr RawTH2C -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_fillN1"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_fillN1"
                c_th2c_filln1 ::
-               Ptr RawTH2C ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH2C -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FillRandom"
-               c_th2c_fillrandom :: Ptr RawTH2C -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FillRandom" c_th2c_fillrandom ::
+               Ptr RawTH2C -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FindBin"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_FindBin"
                c_th2c_findbin ::
                Ptr RawTH2C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FindFixBin"
-               c_th2c_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FindFixBin" c_th2c_findfixbin ::
                Ptr RawTH2C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FindFirstBinAbove"
-               c_th2c_findfirstbinabove ::
-               Ptr RawTH2C -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FindFirstBinAbove" c_th2c_findfirstbinabove
+               :: Ptr RawTH2C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FindLastBinAbove"
-               c_th2c_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FindLastBinAbove" c_th2c_findlastbinabove ::
                Ptr RawTH2C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Fit" c_th2c_fit ::
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Fit"
+               c_th2c_fit ::
                Ptr RawTH2C ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FitPanelTH1"
-               c_th2c_fitpanelth1 :: Ptr RawTH2C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FitPanelTH1" c_th2c_fitpanelth1 ::
+               Ptr RawTH2C -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getNdivisionA"
-               c_th2c_getndivisiona :: Ptr RawTH2C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getNdivisionA" c_th2c_getndivisiona ::
+               Ptr RawTH2C -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getAxisColorA"
-               c_th2c_getaxiscolora :: Ptr RawTH2C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getAxisColorA" c_th2c_getaxiscolora ::
+               Ptr RawTH2C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getLabelColorA"
-               c_th2c_getlabelcolora :: Ptr RawTH2C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getLabelColorA" c_th2c_getlabelcolora ::
+               Ptr RawTH2C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getLabelFontA"
-               c_th2c_getlabelfonta :: Ptr RawTH2C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getLabelFontA" c_th2c_getlabelfonta ::
+               Ptr RawTH2C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getLabelOffsetA"
-               c_th2c_getlabeloffseta :: Ptr RawTH2C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getLabelOffsetA" c_th2c_getlabeloffseta ::
+               Ptr RawTH2C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getLabelSizeA"
-               c_th2c_getlabelsizea :: Ptr RawTH2C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getLabelSizeA" c_th2c_getlabelsizea ::
+               Ptr RawTH2C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getTitleFontA"
-               c_th2c_gettitlefonta :: Ptr RawTH2C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getTitleFontA" c_th2c_gettitlefonta ::
+               Ptr RawTH2C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getTitleOffsetA"
-               c_th2c_gettitleoffseta :: Ptr RawTH2C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getTitleOffsetA" c_th2c_gettitleoffseta ::
+               Ptr RawTH2C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getTitleSizeA"
-               c_th2c_gettitlesizea :: Ptr RawTH2C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getTitleSizeA" c_th2c_gettitlesizea ::
+               Ptr RawTH2C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getTickLengthA"
-               c_th2c_getticklengtha :: Ptr RawTH2C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getTickLengthA" c_th2c_getticklengtha ::
+               Ptr RawTH2C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBarOffset"
-               c_th2c_getbaroffset :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBarOffset" c_th2c_getbaroffset ::
+               Ptr RawTH2C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBarWidth"
-               c_th2c_getbarwidth :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBarWidth" c_th2c_getbarwidth ::
+               Ptr RawTH2C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetContour"
-               c_th2c_getcontour :: Ptr RawTH2C -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetContour" c_th2c_getcontour ::
+               Ptr RawTH2C -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetContourLevel"
-               c_th2c_getcontourlevel :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetContourLevel" c_th2c_getcontourlevel ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetContourLevelPad"
-               c_th2c_getcontourlevelpad :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetContourLevelPad" c_th2c_getcontourlevelpad
+               :: Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBin"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetBin"
                c_th2c_getbin :: Ptr RawTH2C -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinCenter"
-               c_th2c_getbincenter :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinCenter" c_th2c_getbincenter ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinContent1"
-               c_th2c_getbincontent1 :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinContent1" c_th2c_getbincontent1 ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinContent2"
-               c_th2c_getbincontent2 :: Ptr RawTH2C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinContent2" c_th2c_getbincontent2 ::
+               Ptr RawTH2C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinContent3"
-               c_th2c_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinContent3" c_th2c_getbincontent3 ::
                Ptr RawTH2C -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinError1"
-               c_th2c_getbinerror1 :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinError1" c_th2c_getbinerror1 ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinError2"
-               c_th2c_getbinerror2 :: Ptr RawTH2C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinError2" c_th2c_getbinerror2 ::
+               Ptr RawTH2C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinError3"
-               c_th2c_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinError3" c_th2c_getbinerror3 ::
                Ptr RawTH2C -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinLowEdge"
-               c_th2c_getbinlowedge :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinLowEdge" c_th2c_getbinlowedge ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetBinWidth"
-               c_th2c_getbinwidth :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetBinWidth" c_th2c_getbinwidth ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetCellContent"
-               c_th2c_getcellcontent :: Ptr RawTH2C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetCellContent" c_th2c_getcellcontent ::
+               Ptr RawTH2C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetCellError"
-               c_th2c_getcellerror :: Ptr RawTH2C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetCellError" c_th2c_getcellerror ::
+               Ptr RawTH2C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetEntries"
-               c_th2c_getentries :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetEntries" c_th2c_getentries ::
+               Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2C.h TH2C_GetEffectiveEntries"
                c_th2c_geteffectiveentries :: Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetFunction"
-               c_th2c_getfunction :: Ptr RawTH2C -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetFunction" c_th2c_getfunction ::
+               Ptr RawTH2C -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetDimension"
-               c_th2c_getdimension :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetDimension" c_th2c_getdimension ::
+               Ptr RawTH2C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetKurtosis"
-               c_th2c_getkurtosis :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetKurtosis" c_th2c_getkurtosis ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetLowEdge"
-               c_th2c_getlowedge :: Ptr RawTH2C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetLowEdge" c_th2c_getlowedge ::
+               Ptr RawTH2C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getMaximumTH1"
-               c_th2c_getmaximumth1 :: Ptr RawTH2C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getMaximumTH1" c_th2c_getmaximumth1 ::
+               Ptr RawTH2C -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMaximumBin"
-               c_th2c_getmaximumbin :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMaximumBin" c_th2c_getmaximumbin ::
+               Ptr RawTH2C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMaximumStored"
-               c_th2c_getmaximumstored :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMaximumStored" c_th2c_getmaximumstored ::
+               Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getMinimumTH1"
-               c_th2c_getminimumth1 :: Ptr RawTH2C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getMinimumTH1" c_th2c_getminimumth1 ::
+               Ptr RawTH2C -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMinimumBin"
-               c_th2c_getminimumbin :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMinimumBin" c_th2c_getminimumbin ::
+               Ptr RawTH2C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMinimumStored"
-               c_th2c_getminimumstored :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMinimumStored" c_th2c_getminimumstored ::
+               Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMean"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetMean"
                c_th2c_getmean :: Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMeanError"
-               c_th2c_getmeanerror :: Ptr RawTH2C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMeanError" c_th2c_getmeanerror ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetNbinsX"
                c_th2c_getnbinsx :: Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetNbinsY"
                c_th2c_getnbinsy :: Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetNbinsZ"
                c_th2c_getnbinsz :: Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_getQuantilesTH1"
-               c_th2c_getquantilesth1 ::
-               Ptr RawTH2C -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_getQuantilesTH1" c_th2c_getquantilesth1 ::
+               Ptr RawTH2C -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetRandom"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetRandom"
                c_th2c_getrandom :: Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetStats"
-               c_th2c_getstats :: Ptr RawTH2C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetStats"
+               c_th2c_getstats :: Ptr RawTH2C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetSumOfWeights"
-               c_th2c_getsumofweights :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetSumOfWeights" c_th2c_getsumofweights ::
+               Ptr RawTH2C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetSumw2"
                c_th2c_getsumw2 :: Ptr RawTH2C -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetSumw2N"
                c_th2c_getsumw2n :: Ptr RawTH2C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetRMS"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetRMS"
                c_th2c_getrms :: Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetRMSError"
-               c_th2c_getrmserror :: Ptr RawTH2C -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetSkewness"
-               c_th2c_getskewness :: Ptr RawTH2C -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2C.h TH2C_integral1"
-               c_th2c_integral1 ::
-               Ptr RawTH2C -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2C.h TH2C_interpolate1"
-               c_th2c_interpolate1 :: Ptr RawTH2C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetRMSError" c_th2c_getrmserror ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_interpolate2"
-               c_th2c_interpolate2 ::
-               Ptr RawTH2C -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetSkewness" c_th2c_getskewness ::
+               Ptr RawTH2C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_interpolate3"
-               c_th2c_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_interpolate3" c_th2c_interpolate3 ::
                Ptr RawTH2C -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_KolmogorovTest"
-               c_th2c_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_KolmogorovTest" c_th2c_kolmogorovtest ::
                Ptr RawTH2C -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_LabelsDeflate"
-               c_th2c_labelsdeflate :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_LabelsDeflate" c_th2c_labelsdeflate ::
+               Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_LabelsInflate"
-               c_th2c_labelsinflate :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_LabelsInflate" c_th2c_labelsinflate ::
+               Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_LabelsOption"
-               c_th2c_labelsoption :: Ptr RawTH2C -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_LabelsOption" c_th2c_labelsoption ::
+               Ptr RawTH2C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_multiflyF"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_multiflyF"
                c_th2c_multiflyf :: Ptr RawTH2C -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Multiply"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Multiply"
                c_th2c_multiply ::
                Ptr RawTH2C ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_PutStats"
-               c_th2c_putstats :: Ptr RawTH2C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_PutStats"
+               c_th2c_putstats :: Ptr RawTH2C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Rebin" c_th2c_rebin
-               ::
-               Ptr RawTH2C -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Rebin"
+               c_th2c_rebin ::
+               Ptr RawTH2C -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_RebinAxis"
                c_th2c_rebinaxis :: Ptr RawTH2C -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Rebuild"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Rebuild"
                c_th2c_rebuild :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_RecursiveRemove"
-               c_th2c_recursiveremove :: Ptr RawTH2C -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_RecursiveRemove" c_th2c_recursiveremove ::
+               Ptr RawTH2C -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Reset" c_th2c_reset
-               :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Reset"
+               c_th2c_reset :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_ResetStats"
-               c_th2c_resetstats :: Ptr RawTH2C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_ResetStats" c_th2c_resetstats ::
+               Ptr RawTH2C -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Scale" c_th2c_scale
-               :: Ptr RawTH2C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Scale"
+               c_th2c_scale :: Ptr RawTH2C -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setAxisColorA"
-               c_th2c_setaxiscolora :: Ptr RawTH2C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setAxisColorA" c_th2c_setaxiscolora ::
+               Ptr RawTH2C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetAxisRange"
-               c_th2c_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetAxisRange" c_th2c_setaxisrange ::
                Ptr RawTH2C -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetBarOffset"
-               c_th2c_setbaroffset :: Ptr RawTH2C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetBarOffset" c_th2c_setbaroffset ::
+               Ptr RawTH2C -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetBarWidth"
-               c_th2c_setbarwidth :: Ptr RawTH2C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetBarWidth" c_th2c_setbarwidth ::
+               Ptr RawTH2C -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBinContent1"
-               c_th2c_setbincontent1 :: Ptr RawTH2C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setBinContent1" c_th2c_setbincontent1 ::
+               Ptr RawTH2C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBinContent2"
-               c_th2c_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setBinContent2" c_th2c_setbincontent2 ::
                Ptr RawTH2C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBinContent3"
-               c_th2c_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setBinContent3" c_th2c_setbincontent3 ::
                Ptr RawTH2C -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBinError1"
-               c_th2c_setbinerror1 :: Ptr RawTH2C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setBinError1" c_th2c_setbinerror1 ::
+               Ptr RawTH2C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBinError2"
-               c_th2c_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setBinError2" c_th2c_setbinerror2 ::
                Ptr RawTH2C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBinError3"
-               c_th2c_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setBinError3" c_th2c_setbinerror3 ::
                Ptr RawTH2C -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBins1"
-               c_th2c_setbins1 :: Ptr RawTH2C -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_setBins1"
+               c_th2c_setbins1 :: Ptr RawTH2C -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBins2"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_setBins2"
                c_th2c_setbins2 ::
-               Ptr RawTH2C ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH2C -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setBins3"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_setBins3"
                c_th2c_setbins3 ::
                Ptr RawTH2C ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetBinsLength"
-               c_th2c_setbinslength :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetBinsLength" c_th2c_setbinslength ::
+               Ptr RawTH2C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetBuffer"
                c_th2c_setbuffer :: Ptr RawTH2C -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetCellContent"
-               c_th2c_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetCellContent" c_th2c_setcellcontent ::
                Ptr RawTH2C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetContent"
-               c_th2c_setcontent :: Ptr RawTH2C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetContent" c_th2c_setcontent ::
+               Ptr RawTH2C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetContour"
-               c_th2c_setcontour :: Ptr RawTH2C -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetContour" c_th2c_setcontour ::
+               Ptr RawTH2C -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetContourLevel"
-               c_th2c_setcontourlevel :: Ptr RawTH2C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetContourLevel" c_th2c_setcontourlevel ::
+               Ptr RawTH2C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetDirectory"
-               c_th2c_setdirectory :: Ptr RawTH2C -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetDirectory" c_th2c_setdirectory ::
+               Ptr RawTH2C -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetEntries"
-               c_th2c_setentries :: Ptr RawTH2C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetEntries" c_th2c_setentries ::
+               Ptr RawTH2C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetError"
-               c_th2c_seterror :: Ptr RawTH2C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetError"
+               c_th2c_seterror :: Ptr RawTH2C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setLabelColorA"
-               c_th2c_setlabelcolora :: Ptr RawTH2C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setLabelColorA" c_th2c_setlabelcolora ::
+               Ptr RawTH2C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setLabelSizeA"
-               c_th2c_setlabelsizea :: Ptr RawTH2C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setLabelSizeA" c_th2c_setlabelsizea ::
+               Ptr RawTH2C -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setLabelFontA"
-               c_th2c_setlabelfonta :: Ptr RawTH2C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setLabelFontA" c_th2c_setlabelfonta ::
+               Ptr RawTH2C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_setLabelOffsetA"
-               c_th2c_setlabeloffseta ::
-               Ptr RawTH2C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_setLabelOffsetA" c_th2c_setlabeloffseta ::
+               Ptr RawTH2C -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetMaximum"
-               c_th2c_setmaximum :: Ptr RawTH2C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetMaximum" c_th2c_setmaximum ::
+               Ptr RawTH2C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetMinimum"
-               c_th2c_setminimum :: Ptr RawTH2C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetMinimum" c_th2c_setminimum ::
+               Ptr RawTH2C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetNormFactor"
-               c_th2c_setnormfactor :: Ptr RawTH2C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetNormFactor" c_th2c_setnormfactor ::
+               Ptr RawTH2C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetStats"
-               c_th2c_setstats :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetStats"
+               c_th2c_setstats :: Ptr RawTH2C -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetOption"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetOption"
                c_th2c_setoption :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetXTitle"
                c_th2c_setxtitle :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetYTitle"
                c_th2c_setytitle :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetZTitle"
                c_th2c_setztitle :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_ShowBackground"
-               c_th2c_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_ShowBackground" c_th2c_showbackground ::
                Ptr RawTH2C -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_ShowPeaks"
                c_th2c_showpeaks ::
                Ptr RawTH2C -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Smooth"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Smooth"
                c_th2c_smooth :: Ptr RawTH2C -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Sumw2" c_th2c_sumw2
-               :: Ptr RawTH2C -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Sumw2"
+               c_th2c_sumw2 :: Ptr RawTH2C -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetName"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetName"
                c_th2c_setname :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetNameTitle"
-               c_th2c_setnametitle :: Ptr RawTH2C -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetNameTitle" c_th2c_setnametitle ::
+               Ptr RawTH2C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetTitle"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetTitle"
                c_th2c_settitle :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetLineColor"
-               c_th2c_getlinecolor :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetLineColor" c_th2c_getlinecolor ::
+               Ptr RawTH2C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetLineStyle"
-               c_th2c_getlinestyle :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetLineStyle" c_th2c_getlinestyle ::
+               Ptr RawTH2C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetLineWidth"
-               c_th2c_getlinewidth :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetLineWidth" c_th2c_getlinewidth ::
+               Ptr RawTH2C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_ResetAttLine"
-               c_th2c_resetattline :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_ResetAttLine" c_th2c_resetattline ::
+               Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetLineAttributes"
-               c_th2c_setlineattributes :: Ptr RawTH2C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetLineAttributes" c_th2c_setlineattributes
+               :: Ptr RawTH2C -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetLineColor"
-               c_th2c_setlinecolor :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetLineColor" c_th2c_setlinecolor ::
+               Ptr RawTH2C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetLineStyle"
-               c_th2c_setlinestyle :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetLineStyle" c_th2c_setlinestyle ::
+               Ptr RawTH2C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetLineWidth"
-               c_th2c_setlinewidth :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetLineWidth" c_th2c_setlinewidth ::
+               Ptr RawTH2C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetFillColor"
-               c_th2c_setfillcolor :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetFillColor" c_th2c_setfillcolor ::
+               Ptr RawTH2C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetFillStyle"
-               c_th2c_setfillstyle :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetFillStyle" c_th2c_setfillstyle ::
+               Ptr RawTH2C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMarkerColor"
-               c_th2c_getmarkercolor :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMarkerColor" c_th2c_getmarkercolor ::
+               Ptr RawTH2C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMarkerStyle"
-               c_th2c_getmarkerstyle :: Ptr RawTH2C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMarkerStyle" c_th2c_getmarkerstyle ::
+               Ptr RawTH2C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetMarkerSize"
-               c_th2c_getmarkersize :: Ptr RawTH2C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_GetMarkerSize" c_th2c_getmarkersize ::
+               Ptr RawTH2C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_ResetAttMarker"
-               c_th2c_resetattmarker :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_ResetAttMarker" c_th2c_resetattmarker ::
+               Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2C.h TH2C_SetMarkerAttributes"
                c_th2c_setmarkerattributes :: Ptr RawTH2C -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetMarkerColor"
-               c_th2c_setmarkercolor :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetMarkerColor" c_th2c_setmarkercolor ::
+               Ptr RawTH2C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetMarkerStyle"
-               c_th2c_setmarkerstyle :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetMarkerStyle" c_th2c_setmarkerstyle ::
+               Ptr RawTH2C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SetMarkerSize"
-               c_th2c_setmarkersize :: Ptr RawTH2C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_SetMarkerSize" c_th2c_setmarkersize ::
+               Ptr RawTH2C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Draw" c_th2c_draw
-               :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Clear"
+               c_th2c_clear :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_FindObject"
-               c_th2c_findobject :: Ptr RawTH2C -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Draw"
+               c_th2c_draw :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH2C.h TH2C_FindObject" c_th2c_findobject ::
+               Ptr RawTH2C -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetName"
                c_th2c_getname :: Ptr RawTH2C -> IO CString
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_IsA" c_th2c_isa ::
-               Ptr RawTH2C -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_IsA"
+               c_th2c_isa :: Ptr RawTH2C -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Paint" c_th2c_paint
-               :: Ptr RawTH2C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Paint"
+               c_th2c_paint :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_printObj"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_printObj"
                c_th2c_printobj :: Ptr RawTH2C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_SaveAs"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SaveAs"
                c_th2c_saveas :: Ptr RawTH2C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_Write" c_th2c_write
-               :: Ptr RawTH2C -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Write"
+               c_th2c_write :: Ptr RawTH2C -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2C.h TH2C_delete"
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_Write_"
+               c_th2c_write_ :: Ptr RawTH2C -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_delete"
                c_th2c_delete :: Ptr RawTH2C -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_GetAt"
+               c_th2c_getat :: Ptr RawTH2C -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetArray"
+               c_th2c_setarray :: Ptr RawTH2C -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2C.h TH2C_SetAt"
+               c_th2c_setat :: Ptr RawTH2C -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH2C/Implementation.hs b/src/HROOT/Hist/TH2C/Implementation.hs
--- a/src/HROOT/Hist/TH2C/Implementation.hs
+++ b/src/HROOT/Hist/TH2C/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2C.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2C.RawType
 import HROOT.Hist.TH2C.FFI
 import HROOT.Hist.TH2C.Interface
 import HROOT.Hist.TH2C.Cast
+import HROOT.Hist.TH2C.RawType
+import HROOT.Hist.TH2C.Cast
+import HROOT.Hist.TH2C.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH2C TH2C
+instance () => ITH2C (TH2C) where
 
-instance ITH2 TH2C where
+instance () => ITH2 (TH2C) where
         fill2 = xform2 c_th2c_fill2
         fill2w = xform3 c_th2c_fill2w
         fillN2 = xform5 c_th2c_filln2
@@ -84,13 +93,12 @@
         setShowProjectionX = xform1 c_th2c_setshowprojectionx
         setShowProjectionY = xform1 c_th2c_setshowprojectiony
 
-instance ITArrayC TH2C
+instance () => ITArrayC (TH2C) where
 
-instance ITH1 TH2C where
+instance () => ITH1 (TH2C) where
         add = xform2 c_th2c_add
         addBinContent = xform2 c_th2c_addbincontent
         chi2Test = xform3 c_th2c_chi2test
-        computeIntegral = xform0 c_th2c_computeintegral
         directoryAutoAdd = xform1 c_th2c_directoryautoadd
         divide = xform5 c_th2c_divide
         drawCopyTH1 = xform1 c_th2c_drawcopyth1
@@ -162,9 +170,6 @@
         getRMS = xform1 c_th2c_getrms
         getRMSError = xform1 c_th2c_getrmserror
         getSkewness = xform1 c_th2c_getskewness
-        integral1 = xform3 c_th2c_integral1
-        interpolate1 = xform1 c_th2c_interpolate1
-        interpolate2 = xform2 c_th2c_interpolate2
         interpolate3 = xform3 c_th2c_interpolate3
         kolmogorovTest = xform2 c_th2c_kolmogorovtest
         labelsDeflate = xform1 c_th2c_labelsdeflate
@@ -219,12 +224,12 @@
         smooth = xform2 c_th2c_smooth
         sumw2 = xform0 c_th2c_sumw2
 
-instance ITNamed TH2C where
+instance () => ITNamed (TH2C) where
         setName = xform1 c_th2c_setname
         setNameTitle = xform2 c_th2c_setnametitle
         setTitle = xform1 c_th2c_settitle
 
-instance ITAttLine TH2C where
+instance () => ITAttLine (TH2C) where
         getLineColor = xform0 c_th2c_getlinecolor
         getLineStyle = xform0 c_th2c_getlinestyle
         getLineWidth = xform0 c_th2c_getlinewidth
@@ -234,11 +239,11 @@
         setLineStyle = xform1 c_th2c_setlinestyle
         setLineWidth = xform1 c_th2c_setlinewidth
 
-instance ITAttFill TH2C where
+instance () => ITAttFill (TH2C) where
         setFillColor = xform1 c_th2c_setfillcolor
         setFillStyle = xform1 c_th2c_setfillstyle
 
-instance ITAttMarker TH2C where
+instance () => ITAttMarker (TH2C) where
         getMarkerColor = xform0 c_th2c_getmarkercolor
         getMarkerStyle = xform0 c_th2c_getmarkerstyle
         getMarkerSize = xform0 c_th2c_getmarkersize
@@ -248,7 +253,8 @@
         setMarkerStyle = xform1 c_th2c_setmarkerstyle
         setMarkerSize = xform1 c_th2c_setmarkersize
 
-instance ITObject TH2C where
+instance () => ITObject (TH2C) where
+        clear = xform1 c_th2c_clear
         draw = xform1 c_th2c_draw
         findObject = xform1 c_th2c_findobject
         getName = xform0 c_th2c_getname
@@ -257,8 +263,12 @@
         printObj = xform1 c_th2c_printobj
         saveAs = xform2 c_th2c_saveas
         write = xform3 c_th2c_write
+        write_ = xform0 c_th2c_write_
 
-instance IDeletable TH2C where
+instance () => IDeletable (TH2C) where
         delete = xform0 c_th2c_delete
 
-instance ITArray TH2C
+instance () => ITArray (TH2C) where
+        getAt = xform1 c_th2c_getat
+        setArray = xform1 c_th2c_setarray
+        setAt = xform2 c_th2c_setat
diff --git a/src/HROOT/Hist/TH2C/Interface.hs b/src/HROOT/Hist/TH2C/Interface.hs
--- a/src/HROOT/Hist/TH2C/Interface.hs
+++ b/src/HROOT/Hist/TH2C/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2C.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH2.Interface
 import HROOT.Core.TArrayC.Interface
 
-class (ITH2 a, ITArrayC a) => ITH2C a
+class (ITH2 a, ITArrayC a) => ITH2C a where
 
 upcastTH2C :: forall a . (FPtr a, ITH2C a) => a -> TH2C
 upcastTH2C h
diff --git a/src/HROOT/Hist/TH2C/RawType.hs b/src/HROOT/Hist/TH2C/RawType.hs
--- a/src/HROOT/Hist/TH2C/RawType.hs
+++ b/src/HROOT/Hist/TH2C/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2C
 
 newtype TH2C = TH2C (Ptr RawTH2C)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH2C where
+instance () => FPtr (TH2C) where
         type Raw TH2C = RawTH2C
         get_fptr (TH2C ptr) = ptr
         cast_fptr_to_obj = TH2C
diff --git a/src/HROOT/Hist/TH2D/Cast.hs b/src/HROOT/Hist/TH2D/Cast.hs
--- a/src/HROOT/Hist/TH2D/Cast.hs
+++ b/src/HROOT/Hist/TH2D/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH2D.RawType
 import HROOT.Hist.TH2D.Interface
 
-instance (ITH2D a, FPtr a) => Castable a (Ptr RawTH2D) where
+instance (ITH2D a, FPtr a) => Castable (a) (Ptr RawTH2D) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2D (Ptr RawTH2D) where
+instance () => Castable (TH2D) (Ptr RawTH2D) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2D/FFI.hsc b/src/HROOT/Hist/TH2D/FFI.hsc
--- a/src/HROOT/Hist/TH2D/FFI.hsc
+++ b/src/HROOT/Hist/TH2D/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2D.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2D.RawType
+import HROOT.Hist.TH2D.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
@@ -14,594 +17,683 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fill2" c_th2d_fill2
-               :: Ptr RawTH2D -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_fill2"
+               c_th2d_fill2 :: Ptr RawTH2D -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fill2w"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_fill2w"
                c_th2d_fill2w ::
                Ptr RawTH2D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fillN2"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_fillN2"
                c_th2d_filln2 ::
                Ptr RawTH2D ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fillRandom2"
-               c_th2d_fillrandom2 :: Ptr RawTH2D -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_fillRandom2" c_th2d_fillrandom2 ::
+               Ptr RawTH2D -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_findFirstBinAbove2"
-               c_th2d_findfirstbinabove2 ::
-               Ptr RawTH2D -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_findFirstBinAbove2" c_th2d_findfirstbinabove2
+               :: Ptr RawTH2D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_findLastBinAbove2"
-               c_th2d_findlastbinabove2 ::
-               Ptr RawTH2D -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_findLastBinAbove2" c_th2d_findlastbinabove2
+               :: Ptr RawTH2D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FitSlicesX"
-               c_th2d_fitslicesx ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FitSlicesX" c_th2d_fitslicesx ::
                Ptr RawTH2D ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FitSlicesY"
-               c_th2d_fitslicesy ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FitSlicesY" c_th2d_fitslicesy ::
                Ptr RawTH2D ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2D.h TH2D_getCorrelationFactor2"
                c_th2d_getcorrelationfactor2 ::
                Ptr RawTH2D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getCovariance2"
-               c_th2d_getcovariance2 :: Ptr RawTH2D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getCovariance2" c_th2d_getcovariance2 ::
+               Ptr RawTH2D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_integral2"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_integral2"
                c_th2d_integral2 ::
                Ptr RawTH2D ->
                  CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_rebinX2"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_rebinX2"
                c_th2d_rebinx2 :: Ptr RawTH2D -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_rebinY2"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_rebinY2"
                c_th2d_rebiny2 :: Ptr RawTH2D -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Rebin2D"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Rebin2D"
                c_th2d_rebin2d ::
                Ptr RawTH2D -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetShowProjectionX"
-               c_th2d_setshowprojectionx :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetShowProjectionX" c_th2d_setshowprojectionx
+               :: Ptr RawTH2D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetShowProjectionY"
-               c_th2d_setshowprojectiony :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetShowProjectionY" c_th2d_setshowprojectiony
+               :: Ptr RawTH2D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Add" c_th2d_add ::
-               Ptr RawTH2D -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Add"
+               c_th2d_add :: Ptr RawTH2D -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_AddBinContent"
-               c_th2d_addbincontent :: Ptr RawTH2D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_AddBinContent" c_th2d_addbincontent ::
+               Ptr RawTH2D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Chi2Test"
                c_th2d_chi2test ::
-               Ptr RawTH2D -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2D.h TH2D_ComputeIntegral"
-               c_th2d_computeintegral :: Ptr RawTH2D -> IO CDouble
+               Ptr RawTH2D -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_DirectoryAutoAdd"
-               c_th2d_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_DirectoryAutoAdd" c_th2d_directoryautoadd ::
                Ptr RawTH2D -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Divide"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Divide"
                c_th2d_divide ::
                Ptr RawTH2D ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_drawCopyTH1"
-               c_th2d_drawcopyth1 :: Ptr RawTH2D -> CString -> IO (Ptr RawTH2D)
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_drawCopyTH1" c_th2d_drawcopyth1 ::
+               Ptr RawTH2D -> CString -> IO (Ptr RawTH2D)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_DrawNormalized"
-               c_th2d_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_DrawNormalized" c_th2d_drawnormalized ::
                Ptr RawTH2D -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_drawPanelTH1"
-               c_th2d_drawpanelth1 :: Ptr RawTH2D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_drawPanelTH1" c_th2d_drawpanelth1 ::
+               Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_BufferEmpty"
-               c_th2d_bufferempty :: Ptr RawTH2D -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_BufferEmpty" c_th2d_bufferempty ::
+               Ptr RawTH2D -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_evalF" c_th2d_evalf
-               :: Ptr RawTH2D -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_evalF"
+               c_th2d_evalf :: Ptr RawTH2D -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FFT" c_th2d_fft ::
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_FFT"
+               c_th2d_fft ::
                Ptr RawTH2D -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fill1" c_th2d_fill1
-               :: Ptr RawTH2D -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_fill1"
+               c_th2d_fill1 :: Ptr RawTH2D -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fill1w"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_fill1w"
                c_th2d_fill1w :: Ptr RawTH2D -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_fillN1"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_fillN1"
                c_th2d_filln1 ::
-               Ptr RawTH2D ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH2D -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FillRandom"
-               c_th2d_fillrandom :: Ptr RawTH2D -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FillRandom" c_th2d_fillrandom ::
+               Ptr RawTH2D -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FindBin"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_FindBin"
                c_th2d_findbin ::
                Ptr RawTH2D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FindFixBin"
-               c_th2d_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FindFixBin" c_th2d_findfixbin ::
                Ptr RawTH2D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FindFirstBinAbove"
-               c_th2d_findfirstbinabove ::
-               Ptr RawTH2D -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FindFirstBinAbove" c_th2d_findfirstbinabove
+               :: Ptr RawTH2D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FindLastBinAbove"
-               c_th2d_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FindLastBinAbove" c_th2d_findlastbinabove ::
                Ptr RawTH2D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Fit" c_th2d_fit ::
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Fit"
+               c_th2d_fit ::
                Ptr RawTH2D ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FitPanelTH1"
-               c_th2d_fitpanelth1 :: Ptr RawTH2D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FitPanelTH1" c_th2d_fitpanelth1 ::
+               Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getNdivisionA"
-               c_th2d_getndivisiona :: Ptr RawTH2D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getNdivisionA" c_th2d_getndivisiona ::
+               Ptr RawTH2D -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getAxisColorA"
-               c_th2d_getaxiscolora :: Ptr RawTH2D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getAxisColorA" c_th2d_getaxiscolora ::
+               Ptr RawTH2D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getLabelColorA"
-               c_th2d_getlabelcolora :: Ptr RawTH2D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getLabelColorA" c_th2d_getlabelcolora ::
+               Ptr RawTH2D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getLabelFontA"
-               c_th2d_getlabelfonta :: Ptr RawTH2D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getLabelFontA" c_th2d_getlabelfonta ::
+               Ptr RawTH2D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getLabelOffsetA"
-               c_th2d_getlabeloffseta :: Ptr RawTH2D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getLabelOffsetA" c_th2d_getlabeloffseta ::
+               Ptr RawTH2D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getLabelSizeA"
-               c_th2d_getlabelsizea :: Ptr RawTH2D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getLabelSizeA" c_th2d_getlabelsizea ::
+               Ptr RawTH2D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getTitleFontA"
-               c_th2d_gettitlefonta :: Ptr RawTH2D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getTitleFontA" c_th2d_gettitlefonta ::
+               Ptr RawTH2D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getTitleOffsetA"
-               c_th2d_gettitleoffseta :: Ptr RawTH2D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getTitleOffsetA" c_th2d_gettitleoffseta ::
+               Ptr RawTH2D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getTitleSizeA"
-               c_th2d_gettitlesizea :: Ptr RawTH2D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getTitleSizeA" c_th2d_gettitlesizea ::
+               Ptr RawTH2D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getTickLengthA"
-               c_th2d_getticklengtha :: Ptr RawTH2D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getTickLengthA" c_th2d_getticklengtha ::
+               Ptr RawTH2D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBarOffset"
-               c_th2d_getbaroffset :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBarOffset" c_th2d_getbaroffset ::
+               Ptr RawTH2D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBarWidth"
-               c_th2d_getbarwidth :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBarWidth" c_th2d_getbarwidth ::
+               Ptr RawTH2D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetContour"
-               c_th2d_getcontour :: Ptr RawTH2D -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetContour" c_th2d_getcontour ::
+               Ptr RawTH2D -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetContourLevel"
-               c_th2d_getcontourlevel :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetContourLevel" c_th2d_getcontourlevel ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetContourLevelPad"
-               c_th2d_getcontourlevelpad :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetContourLevelPad" c_th2d_getcontourlevelpad
+               :: Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBin"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetBin"
                c_th2d_getbin :: Ptr RawTH2D -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinCenter"
-               c_th2d_getbincenter :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinCenter" c_th2d_getbincenter ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinContent1"
-               c_th2d_getbincontent1 :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinContent1" c_th2d_getbincontent1 ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinContent2"
-               c_th2d_getbincontent2 :: Ptr RawTH2D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinContent2" c_th2d_getbincontent2 ::
+               Ptr RawTH2D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinContent3"
-               c_th2d_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinContent3" c_th2d_getbincontent3 ::
                Ptr RawTH2D -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinError1"
-               c_th2d_getbinerror1 :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinError1" c_th2d_getbinerror1 ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinError2"
-               c_th2d_getbinerror2 :: Ptr RawTH2D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinError2" c_th2d_getbinerror2 ::
+               Ptr RawTH2D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinError3"
-               c_th2d_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinError3" c_th2d_getbinerror3 ::
                Ptr RawTH2D -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinLowEdge"
-               c_th2d_getbinlowedge :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinLowEdge" c_th2d_getbinlowedge ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetBinWidth"
-               c_th2d_getbinwidth :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetBinWidth" c_th2d_getbinwidth ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetCellContent"
-               c_th2d_getcellcontent :: Ptr RawTH2D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetCellContent" c_th2d_getcellcontent ::
+               Ptr RawTH2D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetCellError"
-               c_th2d_getcellerror :: Ptr RawTH2D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetCellError" c_th2d_getcellerror ::
+               Ptr RawTH2D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetEntries"
-               c_th2d_getentries :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetEntries" c_th2d_getentries ::
+               Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2D.h TH2D_GetEffectiveEntries"
                c_th2d_geteffectiveentries :: Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetFunction"
-               c_th2d_getfunction :: Ptr RawTH2D -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetFunction" c_th2d_getfunction ::
+               Ptr RawTH2D -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetDimension"
-               c_th2d_getdimension :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetDimension" c_th2d_getdimension ::
+               Ptr RawTH2D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetKurtosis"
-               c_th2d_getkurtosis :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetKurtosis" c_th2d_getkurtosis ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetLowEdge"
-               c_th2d_getlowedge :: Ptr RawTH2D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetLowEdge" c_th2d_getlowedge ::
+               Ptr RawTH2D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getMaximumTH1"
-               c_th2d_getmaximumth1 :: Ptr RawTH2D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getMaximumTH1" c_th2d_getmaximumth1 ::
+               Ptr RawTH2D -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMaximumBin"
-               c_th2d_getmaximumbin :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMaximumBin" c_th2d_getmaximumbin ::
+               Ptr RawTH2D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMaximumStored"
-               c_th2d_getmaximumstored :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMaximumStored" c_th2d_getmaximumstored ::
+               Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getMinimumTH1"
-               c_th2d_getminimumth1 :: Ptr RawTH2D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getMinimumTH1" c_th2d_getminimumth1 ::
+               Ptr RawTH2D -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMinimumBin"
-               c_th2d_getminimumbin :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMinimumBin" c_th2d_getminimumbin ::
+               Ptr RawTH2D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMinimumStored"
-               c_th2d_getminimumstored :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMinimumStored" c_th2d_getminimumstored ::
+               Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMean"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetMean"
                c_th2d_getmean :: Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMeanError"
-               c_th2d_getmeanerror :: Ptr RawTH2D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMeanError" c_th2d_getmeanerror ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetNbinsX"
                c_th2d_getnbinsx :: Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetNbinsY"
                c_th2d_getnbinsy :: Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetNbinsZ"
                c_th2d_getnbinsz :: Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_getQuantilesTH1"
-               c_th2d_getquantilesth1 ::
-               Ptr RawTH2D -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_getQuantilesTH1" c_th2d_getquantilesth1 ::
+               Ptr RawTH2D -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetRandom"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetRandom"
                c_th2d_getrandom :: Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetStats"
-               c_th2d_getstats :: Ptr RawTH2D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetStats"
+               c_th2d_getstats :: Ptr RawTH2D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetSumOfWeights"
-               c_th2d_getsumofweights :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetSumOfWeights" c_th2d_getsumofweights ::
+               Ptr RawTH2D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetSumw2"
                c_th2d_getsumw2 :: Ptr RawTH2D -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetSumw2N"
                c_th2d_getsumw2n :: Ptr RawTH2D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetRMS"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetRMS"
                c_th2d_getrms :: Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetRMSError"
-               c_th2d_getrmserror :: Ptr RawTH2D -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetSkewness"
-               c_th2d_getskewness :: Ptr RawTH2D -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2D.h TH2D_integral1"
-               c_th2d_integral1 ::
-               Ptr RawTH2D -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2D.h TH2D_interpolate1"
-               c_th2d_interpolate1 :: Ptr RawTH2D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetRMSError" c_th2d_getrmserror ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_interpolate2"
-               c_th2d_interpolate2 ::
-               Ptr RawTH2D -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetSkewness" c_th2d_getskewness ::
+               Ptr RawTH2D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_interpolate3"
-               c_th2d_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_interpolate3" c_th2d_interpolate3 ::
                Ptr RawTH2D -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_KolmogorovTest"
-               c_th2d_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_KolmogorovTest" c_th2d_kolmogorovtest ::
                Ptr RawTH2D -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_LabelsDeflate"
-               c_th2d_labelsdeflate :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_LabelsDeflate" c_th2d_labelsdeflate ::
+               Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_LabelsInflate"
-               c_th2d_labelsinflate :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_LabelsInflate" c_th2d_labelsinflate ::
+               Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_LabelsOption"
-               c_th2d_labelsoption :: Ptr RawTH2D -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_LabelsOption" c_th2d_labelsoption ::
+               Ptr RawTH2D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_multiflyF"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_multiflyF"
                c_th2d_multiflyf :: Ptr RawTH2D -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Multiply"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Multiply"
                c_th2d_multiply ::
                Ptr RawTH2D ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_PutStats"
-               c_th2d_putstats :: Ptr RawTH2D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_PutStats"
+               c_th2d_putstats :: Ptr RawTH2D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Rebin" c_th2d_rebin
-               ::
-               Ptr RawTH2D -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Rebin"
+               c_th2d_rebin ::
+               Ptr RawTH2D -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_RebinAxis"
                c_th2d_rebinaxis :: Ptr RawTH2D -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Rebuild"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Rebuild"
                c_th2d_rebuild :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_RecursiveRemove"
-               c_th2d_recursiveremove :: Ptr RawTH2D -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_RecursiveRemove" c_th2d_recursiveremove ::
+               Ptr RawTH2D -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Reset" c_th2d_reset
-               :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Reset"
+               c_th2d_reset :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_ResetStats"
-               c_th2d_resetstats :: Ptr RawTH2D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_ResetStats" c_th2d_resetstats ::
+               Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Scale" c_th2d_scale
-               :: Ptr RawTH2D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Scale"
+               c_th2d_scale :: Ptr RawTH2D -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setAxisColorA"
-               c_th2d_setaxiscolora :: Ptr RawTH2D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setAxisColorA" c_th2d_setaxiscolora ::
+               Ptr RawTH2D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetAxisRange"
-               c_th2d_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetAxisRange" c_th2d_setaxisrange ::
                Ptr RawTH2D -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetBarOffset"
-               c_th2d_setbaroffset :: Ptr RawTH2D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetBarOffset" c_th2d_setbaroffset ::
+               Ptr RawTH2D -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetBarWidth"
-               c_th2d_setbarwidth :: Ptr RawTH2D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetBarWidth" c_th2d_setbarwidth ::
+               Ptr RawTH2D -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBinContent1"
-               c_th2d_setbincontent1 :: Ptr RawTH2D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setBinContent1" c_th2d_setbincontent1 ::
+               Ptr RawTH2D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBinContent2"
-               c_th2d_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setBinContent2" c_th2d_setbincontent2 ::
                Ptr RawTH2D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBinContent3"
-               c_th2d_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setBinContent3" c_th2d_setbincontent3 ::
                Ptr RawTH2D -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBinError1"
-               c_th2d_setbinerror1 :: Ptr RawTH2D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setBinError1" c_th2d_setbinerror1 ::
+               Ptr RawTH2D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBinError2"
-               c_th2d_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setBinError2" c_th2d_setbinerror2 ::
                Ptr RawTH2D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBinError3"
-               c_th2d_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setBinError3" c_th2d_setbinerror3 ::
                Ptr RawTH2D -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBins1"
-               c_th2d_setbins1 :: Ptr RawTH2D -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_setBins1"
+               c_th2d_setbins1 :: Ptr RawTH2D -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBins2"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_setBins2"
                c_th2d_setbins2 ::
-               Ptr RawTH2D ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH2D -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setBins3"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_setBins3"
                c_th2d_setbins3 ::
                Ptr RawTH2D ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetBinsLength"
-               c_th2d_setbinslength :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetBinsLength" c_th2d_setbinslength ::
+               Ptr RawTH2D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetBuffer"
                c_th2d_setbuffer :: Ptr RawTH2D -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetCellContent"
-               c_th2d_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetCellContent" c_th2d_setcellcontent ::
                Ptr RawTH2D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetContent"
-               c_th2d_setcontent :: Ptr RawTH2D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetContent" c_th2d_setcontent ::
+               Ptr RawTH2D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetContour"
-               c_th2d_setcontour :: Ptr RawTH2D -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetContour" c_th2d_setcontour ::
+               Ptr RawTH2D -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetContourLevel"
-               c_th2d_setcontourlevel :: Ptr RawTH2D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetContourLevel" c_th2d_setcontourlevel ::
+               Ptr RawTH2D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetDirectory"
-               c_th2d_setdirectory :: Ptr RawTH2D -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetDirectory" c_th2d_setdirectory ::
+               Ptr RawTH2D -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetEntries"
-               c_th2d_setentries :: Ptr RawTH2D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetEntries" c_th2d_setentries ::
+               Ptr RawTH2D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetError"
-               c_th2d_seterror :: Ptr RawTH2D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetError"
+               c_th2d_seterror :: Ptr RawTH2D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setLabelColorA"
-               c_th2d_setlabelcolora :: Ptr RawTH2D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setLabelColorA" c_th2d_setlabelcolora ::
+               Ptr RawTH2D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setLabelSizeA"
-               c_th2d_setlabelsizea :: Ptr RawTH2D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setLabelSizeA" c_th2d_setlabelsizea ::
+               Ptr RawTH2D -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setLabelFontA"
-               c_th2d_setlabelfonta :: Ptr RawTH2D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setLabelFontA" c_th2d_setlabelfonta ::
+               Ptr RawTH2D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_setLabelOffsetA"
-               c_th2d_setlabeloffseta ::
-               Ptr RawTH2D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_setLabelOffsetA" c_th2d_setlabeloffseta ::
+               Ptr RawTH2D -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetMaximum"
-               c_th2d_setmaximum :: Ptr RawTH2D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetMaximum" c_th2d_setmaximum ::
+               Ptr RawTH2D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetMinimum"
-               c_th2d_setminimum :: Ptr RawTH2D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetMinimum" c_th2d_setminimum ::
+               Ptr RawTH2D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetNormFactor"
-               c_th2d_setnormfactor :: Ptr RawTH2D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetNormFactor" c_th2d_setnormfactor ::
+               Ptr RawTH2D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetStats"
-               c_th2d_setstats :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetStats"
+               c_th2d_setstats :: Ptr RawTH2D -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetOption"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetOption"
                c_th2d_setoption :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetXTitle"
                c_th2d_setxtitle :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetYTitle"
                c_th2d_setytitle :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetZTitle"
                c_th2d_setztitle :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_ShowBackground"
-               c_th2d_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_ShowBackground" c_th2d_showbackground ::
                Ptr RawTH2D -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_ShowPeaks"
                c_th2d_showpeaks ::
                Ptr RawTH2D -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Smooth"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Smooth"
                c_th2d_smooth :: Ptr RawTH2D -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Sumw2" c_th2d_sumw2
-               :: Ptr RawTH2D -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Sumw2"
+               c_th2d_sumw2 :: Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetName"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetName"
                c_th2d_setname :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetNameTitle"
-               c_th2d_setnametitle :: Ptr RawTH2D -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetNameTitle" c_th2d_setnametitle ::
+               Ptr RawTH2D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetTitle"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetTitle"
                c_th2d_settitle :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetLineColor"
-               c_th2d_getlinecolor :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetLineColor" c_th2d_getlinecolor ::
+               Ptr RawTH2D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetLineStyle"
-               c_th2d_getlinestyle :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetLineStyle" c_th2d_getlinestyle ::
+               Ptr RawTH2D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetLineWidth"
-               c_th2d_getlinewidth :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetLineWidth" c_th2d_getlinewidth ::
+               Ptr RawTH2D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_ResetAttLine"
-               c_th2d_resetattline :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_ResetAttLine" c_th2d_resetattline ::
+               Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetLineAttributes"
-               c_th2d_setlineattributes :: Ptr RawTH2D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetLineAttributes" c_th2d_setlineattributes
+               :: Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetLineColor"
-               c_th2d_setlinecolor :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetLineColor" c_th2d_setlinecolor ::
+               Ptr RawTH2D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetLineStyle"
-               c_th2d_setlinestyle :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetLineStyle" c_th2d_setlinestyle ::
+               Ptr RawTH2D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetLineWidth"
-               c_th2d_setlinewidth :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetLineWidth" c_th2d_setlinewidth ::
+               Ptr RawTH2D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetFillColor"
-               c_th2d_setfillcolor :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetFillColor" c_th2d_setfillcolor ::
+               Ptr RawTH2D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetFillStyle"
-               c_th2d_setfillstyle :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetFillStyle" c_th2d_setfillstyle ::
+               Ptr RawTH2D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMarkerColor"
-               c_th2d_getmarkercolor :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMarkerColor" c_th2d_getmarkercolor ::
+               Ptr RawTH2D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMarkerStyle"
-               c_th2d_getmarkerstyle :: Ptr RawTH2D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMarkerStyle" c_th2d_getmarkerstyle ::
+               Ptr RawTH2D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetMarkerSize"
-               c_th2d_getmarkersize :: Ptr RawTH2D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_GetMarkerSize" c_th2d_getmarkersize ::
+               Ptr RawTH2D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_ResetAttMarker"
-               c_th2d_resetattmarker :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_ResetAttMarker" c_th2d_resetattmarker ::
+               Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2D.h TH2D_SetMarkerAttributes"
                c_th2d_setmarkerattributes :: Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetMarkerColor"
-               c_th2d_setmarkercolor :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetMarkerColor" c_th2d_setmarkercolor ::
+               Ptr RawTH2D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetMarkerStyle"
-               c_th2d_setmarkerstyle :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetMarkerStyle" c_th2d_setmarkerstyle ::
+               Ptr RawTH2D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SetMarkerSize"
-               c_th2d_setmarkersize :: Ptr RawTH2D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_SetMarkerSize" c_th2d_setmarkersize ::
+               Ptr RawTH2D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Draw" c_th2d_draw
-               :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Clear"
+               c_th2d_clear :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_FindObject"
-               c_th2d_findobject :: Ptr RawTH2D -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Draw"
+               c_th2d_draw :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH2D.h TH2D_FindObject" c_th2d_findobject ::
+               Ptr RawTH2D -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetName"
                c_th2d_getname :: Ptr RawTH2D -> IO CString
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_IsA" c_th2d_isa ::
-               Ptr RawTH2D -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_IsA"
+               c_th2d_isa :: Ptr RawTH2D -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Paint" c_th2d_paint
-               :: Ptr RawTH2D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Paint"
+               c_th2d_paint :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_printObj"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_printObj"
                c_th2d_printobj :: Ptr RawTH2D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_SaveAs"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SaveAs"
                c_th2d_saveas :: Ptr RawTH2D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_Write" c_th2d_write
-               :: Ptr RawTH2D -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Write"
+               c_th2d_write :: Ptr RawTH2D -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_delete"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_Write_"
+               c_th2d_write_ :: Ptr RawTH2D -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_delete"
                c_th2d_delete :: Ptr RawTH2D -> IO ()
 
-foreign import ccall safe "HROOTHistTH2D.h TH2D_newTH2D"
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_GetAt"
+               c_th2d_getat :: Ptr RawTH2D -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetArray"
+               c_th2d_setarray :: Ptr RawTH2D -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_SetAt"
+               c_th2d_setat :: Ptr RawTH2D -> CDouble -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2D.h TH2D_newTH2D"
                c_th2d_newth2d ::
                CString ->
                  CString ->
diff --git a/src/HROOT/Hist/TH2D/Implementation.hs b/src/HROOT/Hist/TH2D/Implementation.hs
--- a/src/HROOT/Hist/TH2D/Implementation.hs
+++ b/src/HROOT/Hist/TH2D/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2D.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2D.RawType
 import HROOT.Hist.TH2D.FFI
 import HROOT.Hist.TH2D.Interface
 import HROOT.Hist.TH2D.Cast
+import HROOT.Hist.TH2D.RawType
+import HROOT.Hist.TH2D.Cast
+import HROOT.Hist.TH2D.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -54,16 +63,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH2D TH2D
+instance () => ITH2D (TH2D) where
 
-instance ITH2 TH2D where
+instance () => ITH2 (TH2D) where
         fill2 = xform2 c_th2d_fill2
         fill2w = xform3 c_th2d_fill2w
         fillN2 = xform5 c_th2d_filln2
@@ -81,13 +90,12 @@
         setShowProjectionX = xform1 c_th2d_setshowprojectionx
         setShowProjectionY = xform1 c_th2d_setshowprojectiony
 
-instance ITArrayD TH2D
+instance () => ITArrayD (TH2D) where
 
-instance ITH1 TH2D where
+instance () => ITH1 (TH2D) where
         add = xform2 c_th2d_add
         addBinContent = xform2 c_th2d_addbincontent
         chi2Test = xform3 c_th2d_chi2test
-        computeIntegral = xform0 c_th2d_computeintegral
         directoryAutoAdd = xform1 c_th2d_directoryautoadd
         divide = xform5 c_th2d_divide
         drawCopyTH1 = xform1 c_th2d_drawcopyth1
@@ -159,9 +167,6 @@
         getRMS = xform1 c_th2d_getrms
         getRMSError = xform1 c_th2d_getrmserror
         getSkewness = xform1 c_th2d_getskewness
-        integral1 = xform3 c_th2d_integral1
-        interpolate1 = xform1 c_th2d_interpolate1
-        interpolate2 = xform2 c_th2d_interpolate2
         interpolate3 = xform3 c_th2d_interpolate3
         kolmogorovTest = xform2 c_th2d_kolmogorovtest
         labelsDeflate = xform1 c_th2d_labelsdeflate
@@ -216,12 +221,12 @@
         smooth = xform2 c_th2d_smooth
         sumw2 = xform0 c_th2d_sumw2
 
-instance ITNamed TH2D where
+instance () => ITNamed (TH2D) where
         setName = xform1 c_th2d_setname
         setNameTitle = xform2 c_th2d_setnametitle
         setTitle = xform1 c_th2d_settitle
 
-instance ITAttLine TH2D where
+instance () => ITAttLine (TH2D) where
         getLineColor = xform0 c_th2d_getlinecolor
         getLineStyle = xform0 c_th2d_getlinestyle
         getLineWidth = xform0 c_th2d_getlinewidth
@@ -231,11 +236,11 @@
         setLineStyle = xform1 c_th2d_setlinestyle
         setLineWidth = xform1 c_th2d_setlinewidth
 
-instance ITAttFill TH2D where
+instance () => ITAttFill (TH2D) where
         setFillColor = xform1 c_th2d_setfillcolor
         setFillStyle = xform1 c_th2d_setfillstyle
 
-instance ITAttMarker TH2D where
+instance () => ITAttMarker (TH2D) where
         getMarkerColor = xform0 c_th2d_getmarkercolor
         getMarkerStyle = xform0 c_th2d_getmarkerstyle
         getMarkerSize = xform0 c_th2d_getmarkersize
@@ -245,7 +250,8 @@
         setMarkerStyle = xform1 c_th2d_setmarkerstyle
         setMarkerSize = xform1 c_th2d_setmarkersize
 
-instance ITObject TH2D where
+instance () => ITObject (TH2D) where
+        clear = xform1 c_th2d_clear
         draw = xform1 c_th2d_draw
         findObject = xform1 c_th2d_findobject
         getName = xform0 c_th2d_getname
@@ -254,11 +260,15 @@
         printObj = xform1 c_th2d_printobj
         saveAs = xform2 c_th2d_saveas
         write = xform3 c_th2d_write
+        write_ = xform0 c_th2d_write_
 
-instance IDeletable TH2D where
+instance () => IDeletable (TH2D) where
         delete = xform0 c_th2d_delete
 
-instance ITArray TH2D
+instance () => ITArray (TH2D) where
+        getAt = xform1 c_th2d_getat
+        setArray = xform1 c_th2d_setarray
+        setAt = xform2 c_th2d_setat
 
 newTH2D ::
           (Castable c1 CString, Castable c0 CString) =>
diff --git a/src/HROOT/Hist/TH2D/Interface.hs b/src/HROOT/Hist/TH2D/Interface.hs
--- a/src/HROOT/Hist/TH2D/Interface.hs
+++ b/src/HROOT/Hist/TH2D/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2D.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH2.Interface
 import HROOT.Core.TArrayD.Interface
 
-class (ITH2 a, ITArrayD a) => ITH2D a
+class (ITH2 a, ITArrayD a) => ITH2D a where
 
 upcastTH2D :: forall a . (FPtr a, ITH2D a) => a -> TH2D
 upcastTH2D h
diff --git a/src/HROOT/Hist/TH2D/RawType.hs b/src/HROOT/Hist/TH2D/RawType.hs
--- a/src/HROOT/Hist/TH2D/RawType.hs
+++ b/src/HROOT/Hist/TH2D/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2D
 
 newtype TH2D = TH2D (Ptr RawTH2D)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH2D where
+instance () => FPtr (TH2D) where
         type Raw TH2D = RawTH2D
         get_fptr (TH2D ptr) = ptr
         cast_fptr_to_obj = TH2D
diff --git a/src/HROOT/Hist/TH2F/Cast.hs b/src/HROOT/Hist/TH2F/Cast.hs
--- a/src/HROOT/Hist/TH2F/Cast.hs
+++ b/src/HROOT/Hist/TH2F/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH2F.RawType
 import HROOT.Hist.TH2F.Interface
 
-instance (ITH2F a, FPtr a) => Castable a (Ptr RawTH2F) where
+instance (ITH2F a, FPtr a) => Castable (a) (Ptr RawTH2F) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2F (Ptr RawTH2F) where
+instance () => Castable (TH2F) (Ptr RawTH2F) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2F/FFI.hsc b/src/HROOT/Hist/TH2F/FFI.hsc
--- a/src/HROOT/Hist/TH2F/FFI.hsc
+++ b/src/HROOT/Hist/TH2F/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2F.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2F.RawType
+import HROOT.Hist.TH2F.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
@@ -14,594 +17,683 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fill2" c_th2f_fill2
-               :: Ptr RawTH2F -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_fill2"
+               c_th2f_fill2 :: Ptr RawTH2F -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fill2w"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_fill2w"
                c_th2f_fill2w ::
                Ptr RawTH2F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fillN2"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_fillN2"
                c_th2f_filln2 ::
                Ptr RawTH2F ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fillRandom2"
-               c_th2f_fillrandom2 :: Ptr RawTH2F -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_fillRandom2" c_th2f_fillrandom2 ::
+               Ptr RawTH2F -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_findFirstBinAbove2"
-               c_th2f_findfirstbinabove2 ::
-               Ptr RawTH2F -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_findFirstBinAbove2" c_th2f_findfirstbinabove2
+               :: Ptr RawTH2F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_findLastBinAbove2"
-               c_th2f_findlastbinabove2 ::
-               Ptr RawTH2F -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_findLastBinAbove2" c_th2f_findlastbinabove2
+               :: Ptr RawTH2F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FitSlicesX"
-               c_th2f_fitslicesx ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FitSlicesX" c_th2f_fitslicesx ::
                Ptr RawTH2F ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FitSlicesY"
-               c_th2f_fitslicesy ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FitSlicesY" c_th2f_fitslicesy ::
                Ptr RawTH2F ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2F.h TH2F_getCorrelationFactor2"
                c_th2f_getcorrelationfactor2 ::
                Ptr RawTH2F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getCovariance2"
-               c_th2f_getcovariance2 :: Ptr RawTH2F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getCovariance2" c_th2f_getcovariance2 ::
+               Ptr RawTH2F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_integral2"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_integral2"
                c_th2f_integral2 ::
                Ptr RawTH2F ->
                  CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_rebinX2"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_rebinX2"
                c_th2f_rebinx2 :: Ptr RawTH2F -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_rebinY2"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_rebinY2"
                c_th2f_rebiny2 :: Ptr RawTH2F -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Rebin2D"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Rebin2D"
                c_th2f_rebin2d ::
                Ptr RawTH2F -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetShowProjectionX"
-               c_th2f_setshowprojectionx :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetShowProjectionX" c_th2f_setshowprojectionx
+               :: Ptr RawTH2F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetShowProjectionY"
-               c_th2f_setshowprojectiony :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetShowProjectionY" c_th2f_setshowprojectiony
+               :: Ptr RawTH2F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Add" c_th2f_add ::
-               Ptr RawTH2F -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Add"
+               c_th2f_add :: Ptr RawTH2F -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_AddBinContent"
-               c_th2f_addbincontent :: Ptr RawTH2F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_AddBinContent" c_th2f_addbincontent ::
+               Ptr RawTH2F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Chi2Test"
                c_th2f_chi2test ::
-               Ptr RawTH2F -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2F.h TH2F_ComputeIntegral"
-               c_th2f_computeintegral :: Ptr RawTH2F -> IO CDouble
+               Ptr RawTH2F -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_DirectoryAutoAdd"
-               c_th2f_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_DirectoryAutoAdd" c_th2f_directoryautoadd ::
                Ptr RawTH2F -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Divide"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Divide"
                c_th2f_divide ::
                Ptr RawTH2F ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_drawCopyTH1"
-               c_th2f_drawcopyth1 :: Ptr RawTH2F -> CString -> IO (Ptr RawTH2F)
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_drawCopyTH1" c_th2f_drawcopyth1 ::
+               Ptr RawTH2F -> CString -> IO (Ptr RawTH2F)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_DrawNormalized"
-               c_th2f_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_DrawNormalized" c_th2f_drawnormalized ::
                Ptr RawTH2F -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_drawPanelTH1"
-               c_th2f_drawpanelth1 :: Ptr RawTH2F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_drawPanelTH1" c_th2f_drawpanelth1 ::
+               Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_BufferEmpty"
-               c_th2f_bufferempty :: Ptr RawTH2F -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_BufferEmpty" c_th2f_bufferempty ::
+               Ptr RawTH2F -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_evalF" c_th2f_evalf
-               :: Ptr RawTH2F -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_evalF"
+               c_th2f_evalf :: Ptr RawTH2F -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FFT" c_th2f_fft ::
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_FFT"
+               c_th2f_fft ::
                Ptr RawTH2F -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fill1" c_th2f_fill1
-               :: Ptr RawTH2F -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_fill1"
+               c_th2f_fill1 :: Ptr RawTH2F -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fill1w"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_fill1w"
                c_th2f_fill1w :: Ptr RawTH2F -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_fillN1"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_fillN1"
                c_th2f_filln1 ::
-               Ptr RawTH2F ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH2F -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FillRandom"
-               c_th2f_fillrandom :: Ptr RawTH2F -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FillRandom" c_th2f_fillrandom ::
+               Ptr RawTH2F -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FindBin"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_FindBin"
                c_th2f_findbin ::
                Ptr RawTH2F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FindFixBin"
-               c_th2f_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FindFixBin" c_th2f_findfixbin ::
                Ptr RawTH2F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FindFirstBinAbove"
-               c_th2f_findfirstbinabove ::
-               Ptr RawTH2F -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FindFirstBinAbove" c_th2f_findfirstbinabove
+               :: Ptr RawTH2F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FindLastBinAbove"
-               c_th2f_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FindLastBinAbove" c_th2f_findlastbinabove ::
                Ptr RawTH2F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Fit" c_th2f_fit ::
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Fit"
+               c_th2f_fit ::
                Ptr RawTH2F ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FitPanelTH1"
-               c_th2f_fitpanelth1 :: Ptr RawTH2F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FitPanelTH1" c_th2f_fitpanelth1 ::
+               Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getNdivisionA"
-               c_th2f_getndivisiona :: Ptr RawTH2F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getNdivisionA" c_th2f_getndivisiona ::
+               Ptr RawTH2F -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getAxisColorA"
-               c_th2f_getaxiscolora :: Ptr RawTH2F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getAxisColorA" c_th2f_getaxiscolora ::
+               Ptr RawTH2F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getLabelColorA"
-               c_th2f_getlabelcolora :: Ptr RawTH2F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getLabelColorA" c_th2f_getlabelcolora ::
+               Ptr RawTH2F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getLabelFontA"
-               c_th2f_getlabelfonta :: Ptr RawTH2F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getLabelFontA" c_th2f_getlabelfonta ::
+               Ptr RawTH2F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getLabelOffsetA"
-               c_th2f_getlabeloffseta :: Ptr RawTH2F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getLabelOffsetA" c_th2f_getlabeloffseta ::
+               Ptr RawTH2F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getLabelSizeA"
-               c_th2f_getlabelsizea :: Ptr RawTH2F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getLabelSizeA" c_th2f_getlabelsizea ::
+               Ptr RawTH2F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getTitleFontA"
-               c_th2f_gettitlefonta :: Ptr RawTH2F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getTitleFontA" c_th2f_gettitlefonta ::
+               Ptr RawTH2F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getTitleOffsetA"
-               c_th2f_gettitleoffseta :: Ptr RawTH2F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getTitleOffsetA" c_th2f_gettitleoffseta ::
+               Ptr RawTH2F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getTitleSizeA"
-               c_th2f_gettitlesizea :: Ptr RawTH2F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getTitleSizeA" c_th2f_gettitlesizea ::
+               Ptr RawTH2F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getTickLengthA"
-               c_th2f_getticklengtha :: Ptr RawTH2F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getTickLengthA" c_th2f_getticklengtha ::
+               Ptr RawTH2F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBarOffset"
-               c_th2f_getbaroffset :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBarOffset" c_th2f_getbaroffset ::
+               Ptr RawTH2F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBarWidth"
-               c_th2f_getbarwidth :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBarWidth" c_th2f_getbarwidth ::
+               Ptr RawTH2F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetContour"
-               c_th2f_getcontour :: Ptr RawTH2F -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetContour" c_th2f_getcontour ::
+               Ptr RawTH2F -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetContourLevel"
-               c_th2f_getcontourlevel :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetContourLevel" c_th2f_getcontourlevel ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetContourLevelPad"
-               c_th2f_getcontourlevelpad :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetContourLevelPad" c_th2f_getcontourlevelpad
+               :: Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBin"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetBin"
                c_th2f_getbin :: Ptr RawTH2F -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinCenter"
-               c_th2f_getbincenter :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinCenter" c_th2f_getbincenter ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinContent1"
-               c_th2f_getbincontent1 :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinContent1" c_th2f_getbincontent1 ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinContent2"
-               c_th2f_getbincontent2 :: Ptr RawTH2F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinContent2" c_th2f_getbincontent2 ::
+               Ptr RawTH2F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinContent3"
-               c_th2f_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinContent3" c_th2f_getbincontent3 ::
                Ptr RawTH2F -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinError1"
-               c_th2f_getbinerror1 :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinError1" c_th2f_getbinerror1 ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinError2"
-               c_th2f_getbinerror2 :: Ptr RawTH2F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinError2" c_th2f_getbinerror2 ::
+               Ptr RawTH2F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinError3"
-               c_th2f_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinError3" c_th2f_getbinerror3 ::
                Ptr RawTH2F -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinLowEdge"
-               c_th2f_getbinlowedge :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinLowEdge" c_th2f_getbinlowedge ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetBinWidth"
-               c_th2f_getbinwidth :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetBinWidth" c_th2f_getbinwidth ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetCellContent"
-               c_th2f_getcellcontent :: Ptr RawTH2F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetCellContent" c_th2f_getcellcontent ::
+               Ptr RawTH2F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetCellError"
-               c_th2f_getcellerror :: Ptr RawTH2F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetCellError" c_th2f_getcellerror ::
+               Ptr RawTH2F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetEntries"
-               c_th2f_getentries :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetEntries" c_th2f_getentries ::
+               Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2F.h TH2F_GetEffectiveEntries"
                c_th2f_geteffectiveentries :: Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetFunction"
-               c_th2f_getfunction :: Ptr RawTH2F -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetFunction" c_th2f_getfunction ::
+               Ptr RawTH2F -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetDimension"
-               c_th2f_getdimension :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetDimension" c_th2f_getdimension ::
+               Ptr RawTH2F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetKurtosis"
-               c_th2f_getkurtosis :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetKurtosis" c_th2f_getkurtosis ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetLowEdge"
-               c_th2f_getlowedge :: Ptr RawTH2F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetLowEdge" c_th2f_getlowedge ::
+               Ptr RawTH2F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getMaximumTH1"
-               c_th2f_getmaximumth1 :: Ptr RawTH2F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getMaximumTH1" c_th2f_getmaximumth1 ::
+               Ptr RawTH2F -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMaximumBin"
-               c_th2f_getmaximumbin :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMaximumBin" c_th2f_getmaximumbin ::
+               Ptr RawTH2F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMaximumStored"
-               c_th2f_getmaximumstored :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMaximumStored" c_th2f_getmaximumstored ::
+               Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getMinimumTH1"
-               c_th2f_getminimumth1 :: Ptr RawTH2F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getMinimumTH1" c_th2f_getminimumth1 ::
+               Ptr RawTH2F -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMinimumBin"
-               c_th2f_getminimumbin :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMinimumBin" c_th2f_getminimumbin ::
+               Ptr RawTH2F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMinimumStored"
-               c_th2f_getminimumstored :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMinimumStored" c_th2f_getminimumstored ::
+               Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMean"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetMean"
                c_th2f_getmean :: Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMeanError"
-               c_th2f_getmeanerror :: Ptr RawTH2F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMeanError" c_th2f_getmeanerror ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetNbinsX"
                c_th2f_getnbinsx :: Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetNbinsY"
                c_th2f_getnbinsy :: Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetNbinsZ"
                c_th2f_getnbinsz :: Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_getQuantilesTH1"
-               c_th2f_getquantilesth1 ::
-               Ptr RawTH2F -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_getQuantilesTH1" c_th2f_getquantilesth1 ::
+               Ptr RawTH2F -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetRandom"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetRandom"
                c_th2f_getrandom :: Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetStats"
-               c_th2f_getstats :: Ptr RawTH2F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetStats"
+               c_th2f_getstats :: Ptr RawTH2F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetSumOfWeights"
-               c_th2f_getsumofweights :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetSumOfWeights" c_th2f_getsumofweights ::
+               Ptr RawTH2F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetSumw2"
                c_th2f_getsumw2 :: Ptr RawTH2F -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetSumw2N"
                c_th2f_getsumw2n :: Ptr RawTH2F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetRMS"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetRMS"
                c_th2f_getrms :: Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetRMSError"
-               c_th2f_getrmserror :: Ptr RawTH2F -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetSkewness"
-               c_th2f_getskewness :: Ptr RawTH2F -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2F.h TH2F_integral1"
-               c_th2f_integral1 ::
-               Ptr RawTH2F -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2F.h TH2F_interpolate1"
-               c_th2f_interpolate1 :: Ptr RawTH2F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetRMSError" c_th2f_getrmserror ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_interpolate2"
-               c_th2f_interpolate2 ::
-               Ptr RawTH2F -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetSkewness" c_th2f_getskewness ::
+               Ptr RawTH2F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_interpolate3"
-               c_th2f_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_interpolate3" c_th2f_interpolate3 ::
                Ptr RawTH2F -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_KolmogorovTest"
-               c_th2f_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_KolmogorovTest" c_th2f_kolmogorovtest ::
                Ptr RawTH2F -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_LabelsDeflate"
-               c_th2f_labelsdeflate :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_LabelsDeflate" c_th2f_labelsdeflate ::
+               Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_LabelsInflate"
-               c_th2f_labelsinflate :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_LabelsInflate" c_th2f_labelsinflate ::
+               Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_LabelsOption"
-               c_th2f_labelsoption :: Ptr RawTH2F -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_LabelsOption" c_th2f_labelsoption ::
+               Ptr RawTH2F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_multiflyF"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_multiflyF"
                c_th2f_multiflyf :: Ptr RawTH2F -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Multiply"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Multiply"
                c_th2f_multiply ::
                Ptr RawTH2F ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_PutStats"
-               c_th2f_putstats :: Ptr RawTH2F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_PutStats"
+               c_th2f_putstats :: Ptr RawTH2F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Rebin" c_th2f_rebin
-               ::
-               Ptr RawTH2F -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Rebin"
+               c_th2f_rebin ::
+               Ptr RawTH2F -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_RebinAxis"
                c_th2f_rebinaxis :: Ptr RawTH2F -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Rebuild"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Rebuild"
                c_th2f_rebuild :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_RecursiveRemove"
-               c_th2f_recursiveremove :: Ptr RawTH2F -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_RecursiveRemove" c_th2f_recursiveremove ::
+               Ptr RawTH2F -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Reset" c_th2f_reset
-               :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Reset"
+               c_th2f_reset :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_ResetStats"
-               c_th2f_resetstats :: Ptr RawTH2F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_ResetStats" c_th2f_resetstats ::
+               Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Scale" c_th2f_scale
-               :: Ptr RawTH2F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Scale"
+               c_th2f_scale :: Ptr RawTH2F -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setAxisColorA"
-               c_th2f_setaxiscolora :: Ptr RawTH2F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setAxisColorA" c_th2f_setaxiscolora ::
+               Ptr RawTH2F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetAxisRange"
-               c_th2f_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetAxisRange" c_th2f_setaxisrange ::
                Ptr RawTH2F -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetBarOffset"
-               c_th2f_setbaroffset :: Ptr RawTH2F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetBarOffset" c_th2f_setbaroffset ::
+               Ptr RawTH2F -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetBarWidth"
-               c_th2f_setbarwidth :: Ptr RawTH2F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetBarWidth" c_th2f_setbarwidth ::
+               Ptr RawTH2F -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBinContent1"
-               c_th2f_setbincontent1 :: Ptr RawTH2F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setBinContent1" c_th2f_setbincontent1 ::
+               Ptr RawTH2F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBinContent2"
-               c_th2f_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setBinContent2" c_th2f_setbincontent2 ::
                Ptr RawTH2F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBinContent3"
-               c_th2f_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setBinContent3" c_th2f_setbincontent3 ::
                Ptr RawTH2F -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBinError1"
-               c_th2f_setbinerror1 :: Ptr RawTH2F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setBinError1" c_th2f_setbinerror1 ::
+               Ptr RawTH2F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBinError2"
-               c_th2f_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setBinError2" c_th2f_setbinerror2 ::
                Ptr RawTH2F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBinError3"
-               c_th2f_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setBinError3" c_th2f_setbinerror3 ::
                Ptr RawTH2F -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBins1"
-               c_th2f_setbins1 :: Ptr RawTH2F -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_setBins1"
+               c_th2f_setbins1 :: Ptr RawTH2F -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBins2"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_setBins2"
                c_th2f_setbins2 ::
-               Ptr RawTH2F ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH2F -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setBins3"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_setBins3"
                c_th2f_setbins3 ::
                Ptr RawTH2F ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetBinsLength"
-               c_th2f_setbinslength :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetBinsLength" c_th2f_setbinslength ::
+               Ptr RawTH2F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetBuffer"
                c_th2f_setbuffer :: Ptr RawTH2F -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetCellContent"
-               c_th2f_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetCellContent" c_th2f_setcellcontent ::
                Ptr RawTH2F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetContent"
-               c_th2f_setcontent :: Ptr RawTH2F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetContent" c_th2f_setcontent ::
+               Ptr RawTH2F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetContour"
-               c_th2f_setcontour :: Ptr RawTH2F -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetContour" c_th2f_setcontour ::
+               Ptr RawTH2F -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetContourLevel"
-               c_th2f_setcontourlevel :: Ptr RawTH2F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetContourLevel" c_th2f_setcontourlevel ::
+               Ptr RawTH2F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetDirectory"
-               c_th2f_setdirectory :: Ptr RawTH2F -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetDirectory" c_th2f_setdirectory ::
+               Ptr RawTH2F -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetEntries"
-               c_th2f_setentries :: Ptr RawTH2F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetEntries" c_th2f_setentries ::
+               Ptr RawTH2F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetError"
-               c_th2f_seterror :: Ptr RawTH2F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetError"
+               c_th2f_seterror :: Ptr RawTH2F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setLabelColorA"
-               c_th2f_setlabelcolora :: Ptr RawTH2F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setLabelColorA" c_th2f_setlabelcolora ::
+               Ptr RawTH2F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setLabelSizeA"
-               c_th2f_setlabelsizea :: Ptr RawTH2F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setLabelSizeA" c_th2f_setlabelsizea ::
+               Ptr RawTH2F -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setLabelFontA"
-               c_th2f_setlabelfonta :: Ptr RawTH2F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setLabelFontA" c_th2f_setlabelfonta ::
+               Ptr RawTH2F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_setLabelOffsetA"
-               c_th2f_setlabeloffseta ::
-               Ptr RawTH2F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_setLabelOffsetA" c_th2f_setlabeloffseta ::
+               Ptr RawTH2F -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetMaximum"
-               c_th2f_setmaximum :: Ptr RawTH2F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetMaximum" c_th2f_setmaximum ::
+               Ptr RawTH2F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetMinimum"
-               c_th2f_setminimum :: Ptr RawTH2F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetMinimum" c_th2f_setminimum ::
+               Ptr RawTH2F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetNormFactor"
-               c_th2f_setnormfactor :: Ptr RawTH2F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetNormFactor" c_th2f_setnormfactor ::
+               Ptr RawTH2F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetStats"
-               c_th2f_setstats :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetStats"
+               c_th2f_setstats :: Ptr RawTH2F -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetOption"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetOption"
                c_th2f_setoption :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetXTitle"
                c_th2f_setxtitle :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetYTitle"
                c_th2f_setytitle :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetZTitle"
                c_th2f_setztitle :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_ShowBackground"
-               c_th2f_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_ShowBackground" c_th2f_showbackground ::
                Ptr RawTH2F -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_ShowPeaks"
                c_th2f_showpeaks ::
                Ptr RawTH2F -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Smooth"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Smooth"
                c_th2f_smooth :: Ptr RawTH2F -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Sumw2" c_th2f_sumw2
-               :: Ptr RawTH2F -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Sumw2"
+               c_th2f_sumw2 :: Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetName"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetName"
                c_th2f_setname :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetNameTitle"
-               c_th2f_setnametitle :: Ptr RawTH2F -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetNameTitle" c_th2f_setnametitle ::
+               Ptr RawTH2F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetTitle"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetTitle"
                c_th2f_settitle :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetLineColor"
-               c_th2f_getlinecolor :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetLineColor" c_th2f_getlinecolor ::
+               Ptr RawTH2F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetLineStyle"
-               c_th2f_getlinestyle :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetLineStyle" c_th2f_getlinestyle ::
+               Ptr RawTH2F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetLineWidth"
-               c_th2f_getlinewidth :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetLineWidth" c_th2f_getlinewidth ::
+               Ptr RawTH2F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_ResetAttLine"
-               c_th2f_resetattline :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_ResetAttLine" c_th2f_resetattline ::
+               Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetLineAttributes"
-               c_th2f_setlineattributes :: Ptr RawTH2F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetLineAttributes" c_th2f_setlineattributes
+               :: Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetLineColor"
-               c_th2f_setlinecolor :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetLineColor" c_th2f_setlinecolor ::
+               Ptr RawTH2F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetLineStyle"
-               c_th2f_setlinestyle :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetLineStyle" c_th2f_setlinestyle ::
+               Ptr RawTH2F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetLineWidth"
-               c_th2f_setlinewidth :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetLineWidth" c_th2f_setlinewidth ::
+               Ptr RawTH2F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetFillColor"
-               c_th2f_setfillcolor :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetFillColor" c_th2f_setfillcolor ::
+               Ptr RawTH2F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetFillStyle"
-               c_th2f_setfillstyle :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetFillStyle" c_th2f_setfillstyle ::
+               Ptr RawTH2F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMarkerColor"
-               c_th2f_getmarkercolor :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMarkerColor" c_th2f_getmarkercolor ::
+               Ptr RawTH2F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMarkerStyle"
-               c_th2f_getmarkerstyle :: Ptr RawTH2F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMarkerStyle" c_th2f_getmarkerstyle ::
+               Ptr RawTH2F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetMarkerSize"
-               c_th2f_getmarkersize :: Ptr RawTH2F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_GetMarkerSize" c_th2f_getmarkersize ::
+               Ptr RawTH2F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_ResetAttMarker"
-               c_th2f_resetattmarker :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_ResetAttMarker" c_th2f_resetattmarker ::
+               Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2F.h TH2F_SetMarkerAttributes"
                c_th2f_setmarkerattributes :: Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetMarkerColor"
-               c_th2f_setmarkercolor :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetMarkerColor" c_th2f_setmarkercolor ::
+               Ptr RawTH2F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetMarkerStyle"
-               c_th2f_setmarkerstyle :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetMarkerStyle" c_th2f_setmarkerstyle ::
+               Ptr RawTH2F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SetMarkerSize"
-               c_th2f_setmarkersize :: Ptr RawTH2F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_SetMarkerSize" c_th2f_setmarkersize ::
+               Ptr RawTH2F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Draw" c_th2f_draw
-               :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Clear"
+               c_th2f_clear :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_FindObject"
-               c_th2f_findobject :: Ptr RawTH2F -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Draw"
+               c_th2f_draw :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH2F.h TH2F_FindObject" c_th2f_findobject ::
+               Ptr RawTH2F -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetName"
                c_th2f_getname :: Ptr RawTH2F -> IO CString
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_IsA" c_th2f_isa ::
-               Ptr RawTH2F -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_IsA"
+               c_th2f_isa :: Ptr RawTH2F -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Paint" c_th2f_paint
-               :: Ptr RawTH2F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Paint"
+               c_th2f_paint :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_printObj"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_printObj"
                c_th2f_printobj :: Ptr RawTH2F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_SaveAs"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SaveAs"
                c_th2f_saveas :: Ptr RawTH2F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_Write" c_th2f_write
-               :: Ptr RawTH2F -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Write"
+               c_th2f_write :: Ptr RawTH2F -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_delete"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_Write_"
+               c_th2f_write_ :: Ptr RawTH2F -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_delete"
                c_th2f_delete :: Ptr RawTH2F -> IO ()
 
-foreign import ccall safe "HROOTHistTH2F.h TH2F_newTH2F"
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_GetAt"
+               c_th2f_getat :: Ptr RawTH2F -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetArray"
+               c_th2f_setarray :: Ptr RawTH2F -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_SetAt"
+               c_th2f_setat :: Ptr RawTH2F -> CDouble -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2F.h TH2F_newTH2F"
                c_th2f_newth2f ::
                CString ->
                  CString ->
diff --git a/src/HROOT/Hist/TH2F/Implementation.hs b/src/HROOT/Hist/TH2F/Implementation.hs
--- a/src/HROOT/Hist/TH2F/Implementation.hs
+++ b/src/HROOT/Hist/TH2F/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2F.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2F.RawType
 import HROOT.Hist.TH2F.FFI
 import HROOT.Hist.TH2F.Interface
 import HROOT.Hist.TH2F.Cast
+import HROOT.Hist.TH2F.RawType
+import HROOT.Hist.TH2F.Cast
+import HROOT.Hist.TH2F.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH2F TH2F
+instance () => ITH2F (TH2F) where
 
-instance ITH2 TH2F where
+instance () => ITH2 (TH2F) where
         fill2 = xform2 c_th2f_fill2
         fill2w = xform3 c_th2f_fill2w
         fillN2 = xform5 c_th2f_filln2
@@ -84,13 +93,12 @@
         setShowProjectionX = xform1 c_th2f_setshowprojectionx
         setShowProjectionY = xform1 c_th2f_setshowprojectiony
 
-instance ITArrayF TH2F
+instance () => ITArrayF (TH2F) where
 
-instance ITH1 TH2F where
+instance () => ITH1 (TH2F) where
         add = xform2 c_th2f_add
         addBinContent = xform2 c_th2f_addbincontent
         chi2Test = xform3 c_th2f_chi2test
-        computeIntegral = xform0 c_th2f_computeintegral
         directoryAutoAdd = xform1 c_th2f_directoryautoadd
         divide = xform5 c_th2f_divide
         drawCopyTH1 = xform1 c_th2f_drawcopyth1
@@ -162,9 +170,6 @@
         getRMS = xform1 c_th2f_getrms
         getRMSError = xform1 c_th2f_getrmserror
         getSkewness = xform1 c_th2f_getskewness
-        integral1 = xform3 c_th2f_integral1
-        interpolate1 = xform1 c_th2f_interpolate1
-        interpolate2 = xform2 c_th2f_interpolate2
         interpolate3 = xform3 c_th2f_interpolate3
         kolmogorovTest = xform2 c_th2f_kolmogorovtest
         labelsDeflate = xform1 c_th2f_labelsdeflate
@@ -219,12 +224,12 @@
         smooth = xform2 c_th2f_smooth
         sumw2 = xform0 c_th2f_sumw2
 
-instance ITNamed TH2F where
+instance () => ITNamed (TH2F) where
         setName = xform1 c_th2f_setname
         setNameTitle = xform2 c_th2f_setnametitle
         setTitle = xform1 c_th2f_settitle
 
-instance ITAttLine TH2F where
+instance () => ITAttLine (TH2F) where
         getLineColor = xform0 c_th2f_getlinecolor
         getLineStyle = xform0 c_th2f_getlinestyle
         getLineWidth = xform0 c_th2f_getlinewidth
@@ -234,11 +239,11 @@
         setLineStyle = xform1 c_th2f_setlinestyle
         setLineWidth = xform1 c_th2f_setlinewidth
 
-instance ITAttFill TH2F where
+instance () => ITAttFill (TH2F) where
         setFillColor = xform1 c_th2f_setfillcolor
         setFillStyle = xform1 c_th2f_setfillstyle
 
-instance ITAttMarker TH2F where
+instance () => ITAttMarker (TH2F) where
         getMarkerColor = xform0 c_th2f_getmarkercolor
         getMarkerStyle = xform0 c_th2f_getmarkerstyle
         getMarkerSize = xform0 c_th2f_getmarkersize
@@ -248,7 +253,8 @@
         setMarkerStyle = xform1 c_th2f_setmarkerstyle
         setMarkerSize = xform1 c_th2f_setmarkersize
 
-instance ITObject TH2F where
+instance () => ITObject (TH2F) where
+        clear = xform1 c_th2f_clear
         draw = xform1 c_th2f_draw
         findObject = xform1 c_th2f_findobject
         getName = xform0 c_th2f_getname
@@ -257,11 +263,15 @@
         printObj = xform1 c_th2f_printobj
         saveAs = xform2 c_th2f_saveas
         write = xform3 c_th2f_write
+        write_ = xform0 c_th2f_write_
 
-instance IDeletable TH2F where
+instance () => IDeletable (TH2F) where
         delete = xform0 c_th2f_delete
 
-instance ITArray TH2F
+instance () => ITArray (TH2F) where
+        getAt = xform1 c_th2f_getat
+        setArray = xform1 c_th2f_setarray
+        setAt = xform2 c_th2f_setat
 
 newTH2F ::
           (Castable c1 CString, Castable c0 CString) =>
diff --git a/src/HROOT/Hist/TH2F/Interface.hs b/src/HROOT/Hist/TH2F/Interface.hs
--- a/src/HROOT/Hist/TH2F/Interface.hs
+++ b/src/HROOT/Hist/TH2F/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2F.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH2.Interface
 import HROOT.Core.TArrayF.Interface
 
-class (ITH2 a, ITArrayF a) => ITH2F a
+class (ITH2 a, ITArrayF a) => ITH2F a where
 
 upcastTH2F :: forall a . (FPtr a, ITH2F a) => a -> TH2F
 upcastTH2F h
diff --git a/src/HROOT/Hist/TH2F/RawType.hs b/src/HROOT/Hist/TH2F/RawType.hs
--- a/src/HROOT/Hist/TH2F/RawType.hs
+++ b/src/HROOT/Hist/TH2F/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2F
 
 newtype TH2F = TH2F (Ptr RawTH2F)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH2F where
+instance () => FPtr (TH2F) where
         type Raw TH2F = RawTH2F
         get_fptr (TH2F ptr) = ptr
         cast_fptr_to_obj = TH2F
diff --git a/src/HROOT/Hist/TH2I/Cast.hs b/src/HROOT/Hist/TH2I/Cast.hs
--- a/src/HROOT/Hist/TH2I/Cast.hs
+++ b/src/HROOT/Hist/TH2I/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH2I.RawType
 import HROOT.Hist.TH2I.Interface
 
-instance (ITH2I a, FPtr a) => Castable a (Ptr RawTH2I) where
+instance (ITH2I a, FPtr a) => Castable (a) (Ptr RawTH2I) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2I (Ptr RawTH2I) where
+instance () => Castable (TH2I) (Ptr RawTH2I) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2I/FFI.hsc b/src/HROOT/Hist/TH2I/FFI.hsc
--- a/src/HROOT/Hist/TH2I/FFI.hsc
+++ b/src/HROOT/Hist/TH2I/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2I.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2I.RawType
+import HROOT.Hist.TH2I.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
@@ -14,589 +17,678 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fill2" c_th2i_fill2
-               :: Ptr RawTH2I -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_fill2"
+               c_th2i_fill2 :: Ptr RawTH2I -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fill2w"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_fill2w"
                c_th2i_fill2w ::
                Ptr RawTH2I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fillN2"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_fillN2"
                c_th2i_filln2 ::
                Ptr RawTH2I ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fillRandom2"
-               c_th2i_fillrandom2 :: Ptr RawTH2I -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_fillRandom2" c_th2i_fillrandom2 ::
+               Ptr RawTH2I -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_findFirstBinAbove2"
-               c_th2i_findfirstbinabove2 ::
-               Ptr RawTH2I -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_findFirstBinAbove2" c_th2i_findfirstbinabove2
+               :: Ptr RawTH2I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_findLastBinAbove2"
-               c_th2i_findlastbinabove2 ::
-               Ptr RawTH2I -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_findLastBinAbove2" c_th2i_findlastbinabove2
+               :: Ptr RawTH2I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FitSlicesX"
-               c_th2i_fitslicesx ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FitSlicesX" c_th2i_fitslicesx ::
                Ptr RawTH2I ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FitSlicesY"
-               c_th2i_fitslicesy ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FitSlicesY" c_th2i_fitslicesy ::
                Ptr RawTH2I ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2I.h TH2I_getCorrelationFactor2"
                c_th2i_getcorrelationfactor2 ::
                Ptr RawTH2I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getCovariance2"
-               c_th2i_getcovariance2 :: Ptr RawTH2I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getCovariance2" c_th2i_getcovariance2 ::
+               Ptr RawTH2I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_integral2"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_integral2"
                c_th2i_integral2 ::
                Ptr RawTH2I ->
                  CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_rebinX2"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_rebinX2"
                c_th2i_rebinx2 :: Ptr RawTH2I -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_rebinY2"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_rebinY2"
                c_th2i_rebiny2 :: Ptr RawTH2I -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Rebin2D"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Rebin2D"
                c_th2i_rebin2d ::
                Ptr RawTH2I -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetShowProjectionX"
-               c_th2i_setshowprojectionx :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetShowProjectionX" c_th2i_setshowprojectionx
+               :: Ptr RawTH2I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetShowProjectionY"
-               c_th2i_setshowprojectiony :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetShowProjectionY" c_th2i_setshowprojectiony
+               :: Ptr RawTH2I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Add" c_th2i_add ::
-               Ptr RawTH2I -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Add"
+               c_th2i_add :: Ptr RawTH2I -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_AddBinContent"
-               c_th2i_addbincontent :: Ptr RawTH2I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_AddBinContent" c_th2i_addbincontent ::
+               Ptr RawTH2I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Chi2Test"
                c_th2i_chi2test ::
-               Ptr RawTH2I -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2I.h TH2I_ComputeIntegral"
-               c_th2i_computeintegral :: Ptr RawTH2I -> IO CDouble
+               Ptr RawTH2I -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_DirectoryAutoAdd"
-               c_th2i_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_DirectoryAutoAdd" c_th2i_directoryautoadd ::
                Ptr RawTH2I -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Divide"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Divide"
                c_th2i_divide ::
                Ptr RawTH2I ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_drawCopyTH1"
-               c_th2i_drawcopyth1 :: Ptr RawTH2I -> CString -> IO (Ptr RawTH2I)
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_drawCopyTH1" c_th2i_drawcopyth1 ::
+               Ptr RawTH2I -> CString -> IO (Ptr RawTH2I)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_DrawNormalized"
-               c_th2i_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_DrawNormalized" c_th2i_drawnormalized ::
                Ptr RawTH2I -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_drawPanelTH1"
-               c_th2i_drawpanelth1 :: Ptr RawTH2I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_drawPanelTH1" c_th2i_drawpanelth1 ::
+               Ptr RawTH2I -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_BufferEmpty"
-               c_th2i_bufferempty :: Ptr RawTH2I -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_BufferEmpty" c_th2i_bufferempty ::
+               Ptr RawTH2I -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_evalF" c_th2i_evalf
-               :: Ptr RawTH2I -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_evalF"
+               c_th2i_evalf :: Ptr RawTH2I -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FFT" c_th2i_fft ::
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_FFT"
+               c_th2i_fft ::
                Ptr RawTH2I -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fill1" c_th2i_fill1
-               :: Ptr RawTH2I -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_fill1"
+               c_th2i_fill1 :: Ptr RawTH2I -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fill1w"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_fill1w"
                c_th2i_fill1w :: Ptr RawTH2I -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_fillN1"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_fillN1"
                c_th2i_filln1 ::
-               Ptr RawTH2I ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH2I -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FillRandom"
-               c_th2i_fillrandom :: Ptr RawTH2I -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FillRandom" c_th2i_fillrandom ::
+               Ptr RawTH2I -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FindBin"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_FindBin"
                c_th2i_findbin ::
                Ptr RawTH2I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FindFixBin"
-               c_th2i_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FindFixBin" c_th2i_findfixbin ::
                Ptr RawTH2I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FindFirstBinAbove"
-               c_th2i_findfirstbinabove ::
-               Ptr RawTH2I -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FindFirstBinAbove" c_th2i_findfirstbinabove
+               :: Ptr RawTH2I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FindLastBinAbove"
-               c_th2i_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FindLastBinAbove" c_th2i_findlastbinabove ::
                Ptr RawTH2I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Fit" c_th2i_fit ::
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Fit"
+               c_th2i_fit ::
                Ptr RawTH2I ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FitPanelTH1"
-               c_th2i_fitpanelth1 :: Ptr RawTH2I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FitPanelTH1" c_th2i_fitpanelth1 ::
+               Ptr RawTH2I -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getNdivisionA"
-               c_th2i_getndivisiona :: Ptr RawTH2I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getNdivisionA" c_th2i_getndivisiona ::
+               Ptr RawTH2I -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getAxisColorA"
-               c_th2i_getaxiscolora :: Ptr RawTH2I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getAxisColorA" c_th2i_getaxiscolora ::
+               Ptr RawTH2I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getLabelColorA"
-               c_th2i_getlabelcolora :: Ptr RawTH2I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getLabelColorA" c_th2i_getlabelcolora ::
+               Ptr RawTH2I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getLabelFontA"
-               c_th2i_getlabelfonta :: Ptr RawTH2I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getLabelFontA" c_th2i_getlabelfonta ::
+               Ptr RawTH2I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getLabelOffsetA"
-               c_th2i_getlabeloffseta :: Ptr RawTH2I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getLabelOffsetA" c_th2i_getlabeloffseta ::
+               Ptr RawTH2I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getLabelSizeA"
-               c_th2i_getlabelsizea :: Ptr RawTH2I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getLabelSizeA" c_th2i_getlabelsizea ::
+               Ptr RawTH2I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getTitleFontA"
-               c_th2i_gettitlefonta :: Ptr RawTH2I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getTitleFontA" c_th2i_gettitlefonta ::
+               Ptr RawTH2I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getTitleOffsetA"
-               c_th2i_gettitleoffseta :: Ptr RawTH2I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getTitleOffsetA" c_th2i_gettitleoffseta ::
+               Ptr RawTH2I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getTitleSizeA"
-               c_th2i_gettitlesizea :: Ptr RawTH2I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getTitleSizeA" c_th2i_gettitlesizea ::
+               Ptr RawTH2I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getTickLengthA"
-               c_th2i_getticklengtha :: Ptr RawTH2I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getTickLengthA" c_th2i_getticklengtha ::
+               Ptr RawTH2I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBarOffset"
-               c_th2i_getbaroffset :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBarOffset" c_th2i_getbaroffset ::
+               Ptr RawTH2I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBarWidth"
-               c_th2i_getbarwidth :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBarWidth" c_th2i_getbarwidth ::
+               Ptr RawTH2I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetContour"
-               c_th2i_getcontour :: Ptr RawTH2I -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetContour" c_th2i_getcontour ::
+               Ptr RawTH2I -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetContourLevel"
-               c_th2i_getcontourlevel :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetContourLevel" c_th2i_getcontourlevel ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetContourLevelPad"
-               c_th2i_getcontourlevelpad :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetContourLevelPad" c_th2i_getcontourlevelpad
+               :: Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBin"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetBin"
                c_th2i_getbin :: Ptr RawTH2I -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinCenter"
-               c_th2i_getbincenter :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinCenter" c_th2i_getbincenter ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinContent1"
-               c_th2i_getbincontent1 :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinContent1" c_th2i_getbincontent1 ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinContent2"
-               c_th2i_getbincontent2 :: Ptr RawTH2I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinContent2" c_th2i_getbincontent2 ::
+               Ptr RawTH2I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinContent3"
-               c_th2i_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinContent3" c_th2i_getbincontent3 ::
                Ptr RawTH2I -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinError1"
-               c_th2i_getbinerror1 :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinError1" c_th2i_getbinerror1 ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinError2"
-               c_th2i_getbinerror2 :: Ptr RawTH2I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinError2" c_th2i_getbinerror2 ::
+               Ptr RawTH2I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinError3"
-               c_th2i_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinError3" c_th2i_getbinerror3 ::
                Ptr RawTH2I -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinLowEdge"
-               c_th2i_getbinlowedge :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinLowEdge" c_th2i_getbinlowedge ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetBinWidth"
-               c_th2i_getbinwidth :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetBinWidth" c_th2i_getbinwidth ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetCellContent"
-               c_th2i_getcellcontent :: Ptr RawTH2I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetCellContent" c_th2i_getcellcontent ::
+               Ptr RawTH2I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetCellError"
-               c_th2i_getcellerror :: Ptr RawTH2I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetCellError" c_th2i_getcellerror ::
+               Ptr RawTH2I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetEntries"
-               c_th2i_getentries :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetEntries" c_th2i_getentries ::
+               Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2I.h TH2I_GetEffectiveEntries"
                c_th2i_geteffectiveentries :: Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetFunction"
-               c_th2i_getfunction :: Ptr RawTH2I -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetFunction" c_th2i_getfunction ::
+               Ptr RawTH2I -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetDimension"
-               c_th2i_getdimension :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetDimension" c_th2i_getdimension ::
+               Ptr RawTH2I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetKurtosis"
-               c_th2i_getkurtosis :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetKurtosis" c_th2i_getkurtosis ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetLowEdge"
-               c_th2i_getlowedge :: Ptr RawTH2I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetLowEdge" c_th2i_getlowedge ::
+               Ptr RawTH2I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getMaximumTH1"
-               c_th2i_getmaximumth1 :: Ptr RawTH2I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getMaximumTH1" c_th2i_getmaximumth1 ::
+               Ptr RawTH2I -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMaximumBin"
-               c_th2i_getmaximumbin :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMaximumBin" c_th2i_getmaximumbin ::
+               Ptr RawTH2I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMaximumStored"
-               c_th2i_getmaximumstored :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMaximumStored" c_th2i_getmaximumstored ::
+               Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getMinimumTH1"
-               c_th2i_getminimumth1 :: Ptr RawTH2I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getMinimumTH1" c_th2i_getminimumth1 ::
+               Ptr RawTH2I -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMinimumBin"
-               c_th2i_getminimumbin :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMinimumBin" c_th2i_getminimumbin ::
+               Ptr RawTH2I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMinimumStored"
-               c_th2i_getminimumstored :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMinimumStored" c_th2i_getminimumstored ::
+               Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMean"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetMean"
                c_th2i_getmean :: Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMeanError"
-               c_th2i_getmeanerror :: Ptr RawTH2I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMeanError" c_th2i_getmeanerror ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetNbinsX"
                c_th2i_getnbinsx :: Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetNbinsY"
                c_th2i_getnbinsy :: Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetNbinsZ"
                c_th2i_getnbinsz :: Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_getQuantilesTH1"
-               c_th2i_getquantilesth1 ::
-               Ptr RawTH2I -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_getQuantilesTH1" c_th2i_getquantilesth1 ::
+               Ptr RawTH2I -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetRandom"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetRandom"
                c_th2i_getrandom :: Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetStats"
-               c_th2i_getstats :: Ptr RawTH2I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetStats"
+               c_th2i_getstats :: Ptr RawTH2I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetSumOfWeights"
-               c_th2i_getsumofweights :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetSumOfWeights" c_th2i_getsumofweights ::
+               Ptr RawTH2I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetSumw2"
                c_th2i_getsumw2 :: Ptr RawTH2I -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetSumw2N"
                c_th2i_getsumw2n :: Ptr RawTH2I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetRMS"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetRMS"
                c_th2i_getrms :: Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetRMSError"
-               c_th2i_getrmserror :: Ptr RawTH2I -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetSkewness"
-               c_th2i_getskewness :: Ptr RawTH2I -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2I.h TH2I_integral1"
-               c_th2i_integral1 ::
-               Ptr RawTH2I -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2I.h TH2I_interpolate1"
-               c_th2i_interpolate1 :: Ptr RawTH2I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetRMSError" c_th2i_getrmserror ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_interpolate2"
-               c_th2i_interpolate2 ::
-               Ptr RawTH2I -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetSkewness" c_th2i_getskewness ::
+               Ptr RawTH2I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_interpolate3"
-               c_th2i_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_interpolate3" c_th2i_interpolate3 ::
                Ptr RawTH2I -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_KolmogorovTest"
-               c_th2i_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_KolmogorovTest" c_th2i_kolmogorovtest ::
                Ptr RawTH2I -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_LabelsDeflate"
-               c_th2i_labelsdeflate :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_LabelsDeflate" c_th2i_labelsdeflate ::
+               Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_LabelsInflate"
-               c_th2i_labelsinflate :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_LabelsInflate" c_th2i_labelsinflate ::
+               Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_LabelsOption"
-               c_th2i_labelsoption :: Ptr RawTH2I -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_LabelsOption" c_th2i_labelsoption ::
+               Ptr RawTH2I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_multiflyF"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_multiflyF"
                c_th2i_multiflyf :: Ptr RawTH2I -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Multiply"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Multiply"
                c_th2i_multiply ::
                Ptr RawTH2I ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_PutStats"
-               c_th2i_putstats :: Ptr RawTH2I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_PutStats"
+               c_th2i_putstats :: Ptr RawTH2I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Rebin" c_th2i_rebin
-               ::
-               Ptr RawTH2I -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Rebin"
+               c_th2i_rebin ::
+               Ptr RawTH2I -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_RebinAxis"
                c_th2i_rebinaxis :: Ptr RawTH2I -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Rebuild"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Rebuild"
                c_th2i_rebuild :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_RecursiveRemove"
-               c_th2i_recursiveremove :: Ptr RawTH2I -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_RecursiveRemove" c_th2i_recursiveremove ::
+               Ptr RawTH2I -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Reset" c_th2i_reset
-               :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Reset"
+               c_th2i_reset :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_ResetStats"
-               c_th2i_resetstats :: Ptr RawTH2I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_ResetStats" c_th2i_resetstats ::
+               Ptr RawTH2I -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Scale" c_th2i_scale
-               :: Ptr RawTH2I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Scale"
+               c_th2i_scale :: Ptr RawTH2I -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setAxisColorA"
-               c_th2i_setaxiscolora :: Ptr RawTH2I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setAxisColorA" c_th2i_setaxiscolora ::
+               Ptr RawTH2I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetAxisRange"
-               c_th2i_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetAxisRange" c_th2i_setaxisrange ::
                Ptr RawTH2I -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetBarOffset"
-               c_th2i_setbaroffset :: Ptr RawTH2I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetBarOffset" c_th2i_setbaroffset ::
+               Ptr RawTH2I -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetBarWidth"
-               c_th2i_setbarwidth :: Ptr RawTH2I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetBarWidth" c_th2i_setbarwidth ::
+               Ptr RawTH2I -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBinContent1"
-               c_th2i_setbincontent1 :: Ptr RawTH2I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setBinContent1" c_th2i_setbincontent1 ::
+               Ptr RawTH2I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBinContent2"
-               c_th2i_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setBinContent2" c_th2i_setbincontent2 ::
                Ptr RawTH2I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBinContent3"
-               c_th2i_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setBinContent3" c_th2i_setbincontent3 ::
                Ptr RawTH2I -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBinError1"
-               c_th2i_setbinerror1 :: Ptr RawTH2I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setBinError1" c_th2i_setbinerror1 ::
+               Ptr RawTH2I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBinError2"
-               c_th2i_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setBinError2" c_th2i_setbinerror2 ::
                Ptr RawTH2I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBinError3"
-               c_th2i_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setBinError3" c_th2i_setbinerror3 ::
                Ptr RawTH2I -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBins1"
-               c_th2i_setbins1 :: Ptr RawTH2I -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_setBins1"
+               c_th2i_setbins1 :: Ptr RawTH2I -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBins2"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_setBins2"
                c_th2i_setbins2 ::
-               Ptr RawTH2I ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH2I -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setBins3"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_setBins3"
                c_th2i_setbins3 ::
                Ptr RawTH2I ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetBinsLength"
-               c_th2i_setbinslength :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetBinsLength" c_th2i_setbinslength ::
+               Ptr RawTH2I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetBuffer"
                c_th2i_setbuffer :: Ptr RawTH2I -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetCellContent"
-               c_th2i_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetCellContent" c_th2i_setcellcontent ::
                Ptr RawTH2I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetContent"
-               c_th2i_setcontent :: Ptr RawTH2I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetContent" c_th2i_setcontent ::
+               Ptr RawTH2I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetContour"
-               c_th2i_setcontour :: Ptr RawTH2I -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetContour" c_th2i_setcontour ::
+               Ptr RawTH2I -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetContourLevel"
-               c_th2i_setcontourlevel :: Ptr RawTH2I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetContourLevel" c_th2i_setcontourlevel ::
+               Ptr RawTH2I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetDirectory"
-               c_th2i_setdirectory :: Ptr RawTH2I -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetDirectory" c_th2i_setdirectory ::
+               Ptr RawTH2I -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetEntries"
-               c_th2i_setentries :: Ptr RawTH2I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetEntries" c_th2i_setentries ::
+               Ptr RawTH2I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetError"
-               c_th2i_seterror :: Ptr RawTH2I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetError"
+               c_th2i_seterror :: Ptr RawTH2I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setLabelColorA"
-               c_th2i_setlabelcolora :: Ptr RawTH2I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setLabelColorA" c_th2i_setlabelcolora ::
+               Ptr RawTH2I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setLabelSizeA"
-               c_th2i_setlabelsizea :: Ptr RawTH2I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setLabelSizeA" c_th2i_setlabelsizea ::
+               Ptr RawTH2I -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setLabelFontA"
-               c_th2i_setlabelfonta :: Ptr RawTH2I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setLabelFontA" c_th2i_setlabelfonta ::
+               Ptr RawTH2I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_setLabelOffsetA"
-               c_th2i_setlabeloffseta ::
-               Ptr RawTH2I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_setLabelOffsetA" c_th2i_setlabeloffseta ::
+               Ptr RawTH2I -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetMaximum"
-               c_th2i_setmaximum :: Ptr RawTH2I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetMaximum" c_th2i_setmaximum ::
+               Ptr RawTH2I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetMinimum"
-               c_th2i_setminimum :: Ptr RawTH2I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetMinimum" c_th2i_setminimum ::
+               Ptr RawTH2I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetNormFactor"
-               c_th2i_setnormfactor :: Ptr RawTH2I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetNormFactor" c_th2i_setnormfactor ::
+               Ptr RawTH2I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetStats"
-               c_th2i_setstats :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetStats"
+               c_th2i_setstats :: Ptr RawTH2I -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetOption"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetOption"
                c_th2i_setoption :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetXTitle"
                c_th2i_setxtitle :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetYTitle"
                c_th2i_setytitle :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetZTitle"
                c_th2i_setztitle :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_ShowBackground"
-               c_th2i_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_ShowBackground" c_th2i_showbackground ::
                Ptr RawTH2I -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_ShowPeaks"
                c_th2i_showpeaks ::
                Ptr RawTH2I -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Smooth"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Smooth"
                c_th2i_smooth :: Ptr RawTH2I -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Sumw2" c_th2i_sumw2
-               :: Ptr RawTH2I -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Sumw2"
+               c_th2i_sumw2 :: Ptr RawTH2I -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetName"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetName"
                c_th2i_setname :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetNameTitle"
-               c_th2i_setnametitle :: Ptr RawTH2I -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetNameTitle" c_th2i_setnametitle ::
+               Ptr RawTH2I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetTitle"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetTitle"
                c_th2i_settitle :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetLineColor"
-               c_th2i_getlinecolor :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetLineColor" c_th2i_getlinecolor ::
+               Ptr RawTH2I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetLineStyle"
-               c_th2i_getlinestyle :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetLineStyle" c_th2i_getlinestyle ::
+               Ptr RawTH2I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetLineWidth"
-               c_th2i_getlinewidth :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetLineWidth" c_th2i_getlinewidth ::
+               Ptr RawTH2I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_ResetAttLine"
-               c_th2i_resetattline :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_ResetAttLine" c_th2i_resetattline ::
+               Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetLineAttributes"
-               c_th2i_setlineattributes :: Ptr RawTH2I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetLineAttributes" c_th2i_setlineattributes
+               :: Ptr RawTH2I -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetLineColor"
-               c_th2i_setlinecolor :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetLineColor" c_th2i_setlinecolor ::
+               Ptr RawTH2I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetLineStyle"
-               c_th2i_setlinestyle :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetLineStyle" c_th2i_setlinestyle ::
+               Ptr RawTH2I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetLineWidth"
-               c_th2i_setlinewidth :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetLineWidth" c_th2i_setlinewidth ::
+               Ptr RawTH2I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetFillColor"
-               c_th2i_setfillcolor :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetFillColor" c_th2i_setfillcolor ::
+               Ptr RawTH2I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetFillStyle"
-               c_th2i_setfillstyle :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetFillStyle" c_th2i_setfillstyle ::
+               Ptr RawTH2I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMarkerColor"
-               c_th2i_getmarkercolor :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMarkerColor" c_th2i_getmarkercolor ::
+               Ptr RawTH2I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMarkerStyle"
-               c_th2i_getmarkerstyle :: Ptr RawTH2I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMarkerStyle" c_th2i_getmarkerstyle ::
+               Ptr RawTH2I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetMarkerSize"
-               c_th2i_getmarkersize :: Ptr RawTH2I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_GetMarkerSize" c_th2i_getmarkersize ::
+               Ptr RawTH2I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_ResetAttMarker"
-               c_th2i_resetattmarker :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_ResetAttMarker" c_th2i_resetattmarker ::
+               Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2I.h TH2I_SetMarkerAttributes"
                c_th2i_setmarkerattributes :: Ptr RawTH2I -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetMarkerColor"
-               c_th2i_setmarkercolor :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetMarkerColor" c_th2i_setmarkercolor ::
+               Ptr RawTH2I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetMarkerStyle"
-               c_th2i_setmarkerstyle :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetMarkerStyle" c_th2i_setmarkerstyle ::
+               Ptr RawTH2I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SetMarkerSize"
-               c_th2i_setmarkersize :: Ptr RawTH2I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_SetMarkerSize" c_th2i_setmarkersize ::
+               Ptr RawTH2I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Draw" c_th2i_draw
-               :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Clear"
+               c_th2i_clear :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_FindObject"
-               c_th2i_findobject :: Ptr RawTH2I -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Draw"
+               c_th2i_draw :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH2I.h TH2I_FindObject" c_th2i_findobject ::
+               Ptr RawTH2I -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetName"
                c_th2i_getname :: Ptr RawTH2I -> IO CString
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_IsA" c_th2i_isa ::
-               Ptr RawTH2I -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_IsA"
+               c_th2i_isa :: Ptr RawTH2I -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Paint" c_th2i_paint
-               :: Ptr RawTH2I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Paint"
+               c_th2i_paint :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_printObj"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_printObj"
                c_th2i_printobj :: Ptr RawTH2I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_SaveAs"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SaveAs"
                c_th2i_saveas :: Ptr RawTH2I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_Write" c_th2i_write
-               :: Ptr RawTH2I -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Write"
+               c_th2i_write :: Ptr RawTH2I -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2I.h TH2I_delete"
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_Write_"
+               c_th2i_write_ :: Ptr RawTH2I -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_delete"
                c_th2i_delete :: Ptr RawTH2I -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_GetAt"
+               c_th2i_getat :: Ptr RawTH2I -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetArray"
+               c_th2i_setarray :: Ptr RawTH2I -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2I.h TH2I_SetAt"
+               c_th2i_setat :: Ptr RawTH2I -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH2I/Implementation.hs b/src/HROOT/Hist/TH2I/Implementation.hs
--- a/src/HROOT/Hist/TH2I/Implementation.hs
+++ b/src/HROOT/Hist/TH2I/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2I.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2I.RawType
 import HROOT.Hist.TH2I.FFI
 import HROOT.Hist.TH2I.Interface
 import HROOT.Hist.TH2I.Cast
+import HROOT.Hist.TH2I.RawType
+import HROOT.Hist.TH2I.Cast
+import HROOT.Hist.TH2I.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH2I TH2I
+instance () => ITH2I (TH2I) where
 
-instance ITH2 TH2I where
+instance () => ITH2 (TH2I) where
         fill2 = xform2 c_th2i_fill2
         fill2w = xform3 c_th2i_fill2w
         fillN2 = xform5 c_th2i_filln2
@@ -84,13 +93,12 @@
         setShowProjectionX = xform1 c_th2i_setshowprojectionx
         setShowProjectionY = xform1 c_th2i_setshowprojectiony
 
-instance ITArrayI TH2I
+instance () => ITArrayI (TH2I) where
 
-instance ITH1 TH2I where
+instance () => ITH1 (TH2I) where
         add = xform2 c_th2i_add
         addBinContent = xform2 c_th2i_addbincontent
         chi2Test = xform3 c_th2i_chi2test
-        computeIntegral = xform0 c_th2i_computeintegral
         directoryAutoAdd = xform1 c_th2i_directoryautoadd
         divide = xform5 c_th2i_divide
         drawCopyTH1 = xform1 c_th2i_drawcopyth1
@@ -162,9 +170,6 @@
         getRMS = xform1 c_th2i_getrms
         getRMSError = xform1 c_th2i_getrmserror
         getSkewness = xform1 c_th2i_getskewness
-        integral1 = xform3 c_th2i_integral1
-        interpolate1 = xform1 c_th2i_interpolate1
-        interpolate2 = xform2 c_th2i_interpolate2
         interpolate3 = xform3 c_th2i_interpolate3
         kolmogorovTest = xform2 c_th2i_kolmogorovtest
         labelsDeflate = xform1 c_th2i_labelsdeflate
@@ -219,12 +224,12 @@
         smooth = xform2 c_th2i_smooth
         sumw2 = xform0 c_th2i_sumw2
 
-instance ITNamed TH2I where
+instance () => ITNamed (TH2I) where
         setName = xform1 c_th2i_setname
         setNameTitle = xform2 c_th2i_setnametitle
         setTitle = xform1 c_th2i_settitle
 
-instance ITAttLine TH2I where
+instance () => ITAttLine (TH2I) where
         getLineColor = xform0 c_th2i_getlinecolor
         getLineStyle = xform0 c_th2i_getlinestyle
         getLineWidth = xform0 c_th2i_getlinewidth
@@ -234,11 +239,11 @@
         setLineStyle = xform1 c_th2i_setlinestyle
         setLineWidth = xform1 c_th2i_setlinewidth
 
-instance ITAttFill TH2I where
+instance () => ITAttFill (TH2I) where
         setFillColor = xform1 c_th2i_setfillcolor
         setFillStyle = xform1 c_th2i_setfillstyle
 
-instance ITAttMarker TH2I where
+instance () => ITAttMarker (TH2I) where
         getMarkerColor = xform0 c_th2i_getmarkercolor
         getMarkerStyle = xform0 c_th2i_getmarkerstyle
         getMarkerSize = xform0 c_th2i_getmarkersize
@@ -248,7 +253,8 @@
         setMarkerStyle = xform1 c_th2i_setmarkerstyle
         setMarkerSize = xform1 c_th2i_setmarkersize
 
-instance ITObject TH2I where
+instance () => ITObject (TH2I) where
+        clear = xform1 c_th2i_clear
         draw = xform1 c_th2i_draw
         findObject = xform1 c_th2i_findobject
         getName = xform0 c_th2i_getname
@@ -257,8 +263,12 @@
         printObj = xform1 c_th2i_printobj
         saveAs = xform2 c_th2i_saveas
         write = xform3 c_th2i_write
+        write_ = xform0 c_th2i_write_
 
-instance IDeletable TH2I where
+instance () => IDeletable (TH2I) where
         delete = xform0 c_th2i_delete
 
-instance ITArray TH2I
+instance () => ITArray (TH2I) where
+        getAt = xform1 c_th2i_getat
+        setArray = xform1 c_th2i_setarray
+        setAt = xform2 c_th2i_setat
diff --git a/src/HROOT/Hist/TH2I/Interface.hs b/src/HROOT/Hist/TH2I/Interface.hs
--- a/src/HROOT/Hist/TH2I/Interface.hs
+++ b/src/HROOT/Hist/TH2I/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2I.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH2.Interface
 import HROOT.Core.TArrayI.Interface
 
-class (ITH2 a, ITArrayI a) => ITH2I a
+class (ITH2 a, ITArrayI a) => ITH2I a where
 
 upcastTH2I :: forall a . (FPtr a, ITH2I a) => a -> TH2I
 upcastTH2I h
diff --git a/src/HROOT/Hist/TH2I/RawType.hs b/src/HROOT/Hist/TH2I/RawType.hs
--- a/src/HROOT/Hist/TH2I/RawType.hs
+++ b/src/HROOT/Hist/TH2I/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2I
 
 newtype TH2I = TH2I (Ptr RawTH2I)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH2I where
+instance () => FPtr (TH2I) where
         type Raw TH2I = RawTH2I
         get_fptr (TH2I ptr) = ptr
         cast_fptr_to_obj = TH2I
diff --git a/src/HROOT/Hist/TH2Poly.hs b/src/HROOT/Hist/TH2Poly.hs
--- a/src/HROOT/Hist/TH2Poly.hs
+++ b/src/HROOT/Hist/TH2Poly.hs
@@ -1,5 +1,7 @@
 module HROOT.Hist.TH2Poly
-       (TH2Poly(..), ITH2Poly, upcastTH2Poly, downcastTH2Poly) where
+       (TH2Poly(..), ITH2Poly(..), upcastTH2Poly, downcastTH2Poly,
+        newTH2Poly)
+       where
 import HROOT.Hist.TH2Poly.RawType
 import HROOT.Hist.TH2Poly.Interface
 import HROOT.Hist.TH2Poly.Implementation
diff --git a/src/HROOT/Hist/TH2Poly/Cast.hs b/src/HROOT/Hist/TH2Poly/Cast.hs
--- a/src/HROOT/Hist/TH2Poly/Cast.hs
+++ b/src/HROOT/Hist/TH2Poly/Cast.hs
@@ -8,10 +8,11 @@
 import HROOT.Hist.TH2Poly.RawType
 import HROOT.Hist.TH2Poly.Interface
 
-instance (ITH2Poly a, FPtr a) => Castable a (Ptr RawTH2Poly) where
+instance (ITH2Poly a, FPtr a) => Castable (a) (Ptr RawTH2Poly)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2Poly (Ptr RawTH2Poly) where
+instance () => Castable (TH2Poly) (Ptr RawTH2Poly) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2Poly/FFI.hsc b/src/HROOT/Hist/TH2Poly/FFI.hsc
--- a/src/HROOT/Hist/TH2Poly/FFI.hsc
+++ b/src/HROOT/Hist/TH2Poly/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2Poly.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2Poly.RawType
+import HROOT.Hist.TH2Poly.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
@@ -14,683 +17,751 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fill2"
-               c_th2poly_fill2 :: Ptr RawTH2Poly -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fill2" c_th2poly_fill2 ::
+               Ptr RawTH2Poly -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fill2w"
-               c_th2poly_fill2w ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fill2w" c_th2poly_fill2w ::
                Ptr RawTH2Poly -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fillN2"
-               c_th2poly_filln2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fillN2" c_th2poly_filln2 ::
                Ptr RawTH2Poly ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fillRandom2"
-               c_th2poly_fillrandom2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fillRandom2" c_th2poly_fillrandom2 ::
                Ptr RawTH2Poly -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_findFirstBinAbove2"
                c_th2poly_findfirstbinabove2 ::
                Ptr RawTH2Poly -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_findLastBinAbove2"
                c_th2poly_findlastbinabove2 ::
                Ptr RawTH2Poly -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FitSlicesX"
-               c_th2poly_fitslicesx ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FitSlicesX" c_th2poly_fitslicesx ::
                Ptr RawTH2Poly ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FitSlicesY"
-               c_th2poly_fitslicesy ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FitSlicesY" c_th2poly_fitslicesy ::
                Ptr RawTH2Poly ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getCorrelationFactor2"
                c_th2poly_getcorrelationfactor2 ::
                Ptr RawTH2Poly -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getCovariance2"
                c_th2poly_getcovariance2 ::
                Ptr RawTH2Poly -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_integral2"
-               c_th2poly_integral2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_integral2" c_th2poly_integral2 ::
                Ptr RawTH2Poly ->
                  CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_rebinX2"
-               c_th2poly_rebinx2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_rebinX2" c_th2poly_rebinx2 ::
                Ptr RawTH2Poly -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_rebinY2"
-               c_th2poly_rebiny2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_rebinY2" c_th2poly_rebiny2 ::
                Ptr RawTH2Poly -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Rebin2D"
-               c_th2poly_rebin2d ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Rebin2D" c_th2poly_rebin2d ::
                Ptr RawTH2Poly -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetShowProjectionX"
                c_th2poly_setshowprojectionx :: Ptr RawTH2Poly -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetShowProjectionY"
                c_th2poly_setshowprojectiony :: Ptr RawTH2Poly -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Add"
+foreign import ccall interruptible "HROOTHistTH2Poly.h TH2Poly_Add"
                c_th2poly_add :: Ptr RawTH2Poly -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_AddBinContent" c_th2poly_addbincontent
                :: Ptr RawTH2Poly -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Chi2Test"
-               c_th2poly_chi2test ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Chi2Test" c_th2poly_chi2test ::
                Ptr RawTH2Poly ->
-                 Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe
-               "HROOTHistTH2Poly.h TH2Poly_ComputeIntegral"
-               c_th2poly_computeintegral :: Ptr RawTH2Poly -> IO CDouble
+                 Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_DirectoryAutoAdd"
                c_th2poly_directoryautoadd ::
                Ptr RawTH2Poly -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Divide"
-               c_th2poly_divide ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Divide" c_th2poly_divide ::
                Ptr RawTH2Poly ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_drawCopyTH1"
-               c_th2poly_drawcopyth1 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_drawCopyTH1" c_th2poly_drawcopyth1 ::
                Ptr RawTH2Poly -> CString -> IO (Ptr RawTH2Poly)
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_DrawNormalized"
                c_th2poly_drawnormalized ::
                Ptr RawTH2Poly -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_drawPanelTH1"
-               c_th2poly_drawpanelth1 :: Ptr RawTH2Poly -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_drawPanelTH1" c_th2poly_drawpanelth1 ::
+               Ptr RawTH2Poly -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_BufferEmpty"
-               c_th2poly_bufferempty :: Ptr RawTH2Poly -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_BufferEmpty" c_th2poly_bufferempty ::
+               Ptr RawTH2Poly -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_evalF"
-               c_th2poly_evalf :: Ptr RawTH2Poly -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_evalF" c_th2poly_evalf ::
+               Ptr RawTH2Poly -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FFT"
+foreign import ccall interruptible "HROOTHistTH2Poly.h TH2Poly_FFT"
                c_th2poly_fft ::
                Ptr RawTH2Poly -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fill1"
-               c_th2poly_fill1 :: Ptr RawTH2Poly -> CDouble -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fill1" c_th2poly_fill1 ::
+               Ptr RawTH2Poly -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fill1w"
-               c_th2poly_fill1w :: Ptr RawTH2Poly -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fill1w" c_th2poly_fill1w ::
+               Ptr RawTH2Poly -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_fillN1"
-               c_th2poly_filln1 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_fillN1" c_th2poly_filln1 ::
                Ptr RawTH2Poly ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FillRandom"
-               c_th2poly_fillrandom ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FillRandom" c_th2poly_fillrandom ::
                Ptr RawTH2Poly -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FindBin"
-               c_th2poly_findbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FindBin" c_th2poly_findbin ::
                Ptr RawTH2Poly -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FindFixBin"
-               c_th2poly_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FindFixBin" c_th2poly_findfixbin ::
                Ptr RawTH2Poly -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_FindFirstBinAbove"
                c_th2poly_findfirstbinabove ::
                Ptr RawTH2Poly -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_FindLastBinAbove"
                c_th2poly_findlastbinabove ::
                Ptr RawTH2Poly -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Fit"
+foreign import ccall interruptible "HROOTHistTH2Poly.h TH2Poly_Fit"
                c_th2poly_fit ::
                Ptr RawTH2Poly ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FitPanelTH1"
-               c_th2poly_fitpanelth1 :: Ptr RawTH2Poly -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FitPanelTH1" c_th2poly_fitpanelth1 ::
+               Ptr RawTH2Poly -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getNdivisionA" c_th2poly_getndivisiona
                :: Ptr RawTH2Poly -> CString -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getAxisColorA" c_th2poly_getaxiscolora
-               :: Ptr RawTH2Poly -> CString -> IO CInt
+               :: Ptr RawTH2Poly -> CString -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getLabelColorA"
-               c_th2poly_getlabelcolora :: Ptr RawTH2Poly -> CString -> IO CInt
+               c_th2poly_getlabelcolora :: Ptr RawTH2Poly -> CString -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getLabelFontA" c_th2poly_getlabelfonta
-               :: Ptr RawTH2Poly -> CString -> IO CInt
+               :: Ptr RawTH2Poly -> CString -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getLabelOffsetA"
-               c_th2poly_getlabeloffseta ::
-               Ptr RawTH2Poly -> CString -> IO CDouble
+               c_th2poly_getlabeloffseta :: Ptr RawTH2Poly -> CString -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getLabelSizeA" c_th2poly_getlabelsizea
-               :: Ptr RawTH2Poly -> CString -> IO CDouble
+               :: Ptr RawTH2Poly -> CString -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getTitleFontA" c_th2poly_gettitlefonta
-               :: Ptr RawTH2Poly -> CString -> IO CInt
+               :: Ptr RawTH2Poly -> CString -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getTitleOffsetA"
-               c_th2poly_gettitleoffseta ::
-               Ptr RawTH2Poly -> CString -> IO CDouble
+               c_th2poly_gettitleoffseta :: Ptr RawTH2Poly -> CString -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getTitleSizeA" c_th2poly_gettitlesizea
-               :: Ptr RawTH2Poly -> CString -> IO CDouble
+               :: Ptr RawTH2Poly -> CString -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getTickLengthA"
-               c_th2poly_getticklengtha :: Ptr RawTH2Poly -> CString -> IO CDouble
+               c_th2poly_getticklengtha :: Ptr RawTH2Poly -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBarOffset"
-               c_th2poly_getbaroffset :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBarOffset" c_th2poly_getbaroffset ::
+               Ptr RawTH2Poly -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBarWidth"
-               c_th2poly_getbarwidth :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBarWidth" c_th2poly_getbarwidth ::
+               Ptr RawTH2Poly -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetContour"
-               c_th2poly_getcontour :: Ptr RawTH2Poly -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetContour" c_th2poly_getcontour ::
+               Ptr RawTH2Poly -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetContourLevel"
                c_th2poly_getcontourlevel :: Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetContourLevelPad"
                c_th2poly_getcontourlevelpad ::
                Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBin"
-               c_th2poly_getbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBin" c_th2poly_getbin ::
                Ptr RawTH2Poly -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBinCenter"
-               c_th2poly_getbincenter :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBinCenter" c_th2poly_getbincenter ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetBinContent1"
                c_th2poly_getbincontent1 :: Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetBinContent2"
                c_th2poly_getbincontent2 ::
                Ptr RawTH2Poly -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetBinContent3"
                c_th2poly_getbincontent3 ::
                Ptr RawTH2Poly -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBinError1"
-               c_th2poly_getbinerror1 :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBinError1" c_th2poly_getbinerror1 ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBinError2"
-               c_th2poly_getbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBinError2" c_th2poly_getbinerror2 ::
                Ptr RawTH2Poly -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBinError3"
-               c_th2poly_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBinError3" c_th2poly_getbinerror3 ::
                Ptr RawTH2Poly -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetBinLowEdge" c_th2poly_getbinlowedge
                :: Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetBinWidth"
-               c_th2poly_getbinwidth :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetBinWidth" c_th2poly_getbinwidth ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetCellContent"
                c_th2poly_getcellcontent ::
                Ptr RawTH2Poly -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetCellError"
-               c_th2poly_getcellerror ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetCellError" c_th2poly_getcellerror ::
                Ptr RawTH2Poly -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetEntries"
-               c_th2poly_getentries :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetEntries" c_th2poly_getentries ::
+               Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetEffectiveEntries"
                c_th2poly_geteffectiveentries :: Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetFunction"
-               c_th2poly_getfunction ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetFunction" c_th2poly_getfunction ::
                Ptr RawTH2Poly -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetDimension"
-               c_th2poly_getdimension :: Ptr RawTH2Poly -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetDimension" c_th2poly_getdimension ::
+               Ptr RawTH2Poly -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetKurtosis"
-               c_th2poly_getkurtosis :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetKurtosis" c_th2poly_getkurtosis ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetLowEdge"
-               c_th2poly_getlowedge :: Ptr RawTH2Poly -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetLowEdge" c_th2poly_getlowedge ::
+               Ptr RawTH2Poly -> Ptr CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getMaximumTH1" c_th2poly_getmaximumth1
                :: Ptr RawTH2Poly -> CDouble -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMaximumBin" c_th2poly_getmaximumbin
                :: Ptr RawTH2Poly -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMaximumStored"
                c_th2poly_getmaximumstored :: Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getMinimumTH1" c_th2poly_getminimumth1
                :: Ptr RawTH2Poly -> CDouble -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMinimumBin" c_th2poly_getminimumbin
                :: Ptr RawTH2Poly -> IO CInt
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMinimumStored"
                c_th2poly_getminimumstored :: Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetMean"
-               c_th2poly_getmean :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetMean" c_th2poly_getmean ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetMeanError"
-               c_th2poly_getmeanerror :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetMeanError" c_th2poly_getmeanerror ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetNbinsX"
-               c_th2poly_getnbinsx :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetNbinsX" c_th2poly_getnbinsx ::
+               Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetNbinsY"
-               c_th2poly_getnbinsy :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetNbinsY" c_th2poly_getnbinsy ::
+               Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetNbinsZ"
-               c_th2poly_getnbinsz :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetNbinsZ" c_th2poly_getnbinsz ::
+               Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_getQuantilesTH1"
                c_th2poly_getquantilesth1 ::
-               Ptr RawTH2Poly -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+               Ptr RawTH2Poly -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetRandom"
-               c_th2poly_getrandom :: Ptr RawTH2Poly -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetRandom" c_th2poly_getrandom ::
+               Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetStats"
-               c_th2poly_getstats :: Ptr RawTH2Poly -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetStats" c_th2poly_getstats ::
+               Ptr RawTH2Poly -> Ptr CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetSumOfWeights"
                c_th2poly_getsumofweights :: Ptr RawTH2Poly -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetSumw2"
-               c_th2poly_getsumw2 :: Ptr RawTH2Poly -> IO (Ptr RawTArrayD)
-
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetSumw2N"
-               c_th2poly_getsumw2n :: Ptr RawTH2Poly -> IO CInt
-
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetRMS"
-               c_th2poly_getrms :: Ptr RawTH2Poly -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetRMSError"
-               c_th2poly_getrmserror :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetSumw2" c_th2poly_getsumw2 ::
+               Ptr RawTH2Poly -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetSkewness"
-               c_th2poly_getskewness :: Ptr RawTH2Poly -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetSumw2N" c_th2poly_getsumw2n ::
+               Ptr RawTH2Poly -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_integral1"
-               c_th2poly_integral1 ::
-               Ptr RawTH2Poly -> CInt -> CInt -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetRMS" c_th2poly_getrms ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_interpolate1"
-               c_th2poly_interpolate1 :: Ptr RawTH2Poly -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetRMSError" c_th2poly_getrmserror ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_interpolate2"
-               c_th2poly_interpolate2 ::
-               Ptr RawTH2Poly -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetSkewness" c_th2poly_getskewness ::
+               Ptr RawTH2Poly -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_interpolate3"
-               c_th2poly_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_interpolate3" c_th2poly_interpolate3 ::
                Ptr RawTH2Poly -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_KolmogorovTest"
                c_th2poly_kolmogorovtest ::
                Ptr RawTH2Poly -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_LabelsDeflate" c_th2poly_labelsdeflate
                :: Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_LabelsInflate" c_th2poly_labelsinflate
                :: Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_LabelsOption"
-               c_th2poly_labelsoption ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_LabelsOption" c_th2poly_labelsoption ::
                Ptr RawTH2Poly -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_multiflyF"
-               c_th2poly_multiflyf ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_multiflyF" c_th2poly_multiflyf ::
                Ptr RawTH2Poly -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Multiply"
-               c_th2poly_multiply ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Multiply" c_th2poly_multiply ::
                Ptr RawTH2Poly ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_PutStats"
-               c_th2poly_putstats :: Ptr RawTH2Poly -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_PutStats" c_th2poly_putstats ::
+               Ptr RawTH2Poly -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Rebin"
-               c_th2poly_rebin ::
-               Ptr RawTH2Poly ->
-                 CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Rebin" c_th2poly_rebin ::
+               Ptr RawTH2Poly -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_RebinAxis"
-               c_th2poly_rebinaxis ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_RebinAxis" c_th2poly_rebinaxis ::
                Ptr RawTH2Poly -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Rebuild"
-               c_th2poly_rebuild :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Rebuild" c_th2poly_rebuild ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_RecursiveRemove"
                c_th2poly_recursiveremove ::
                Ptr RawTH2Poly -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Reset"
-               c_th2poly_reset :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Reset" c_th2poly_reset ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_ResetStats"
-               c_th2poly_resetstats :: Ptr RawTH2Poly -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_ResetStats" c_th2poly_resetstats ::
+               Ptr RawTH2Poly -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Scale"
-               c_th2poly_scale :: Ptr RawTH2Poly -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Scale" c_th2poly_scale ::
+               Ptr RawTH2Poly -> CDouble -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setAxisColorA" c_th2poly_setaxiscolora
-               :: Ptr RawTH2Poly -> CInt -> CString -> IO ()
+               :: Ptr RawTH2Poly -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetAxisRange"
-               c_th2poly_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetAxisRange" c_th2poly_setaxisrange ::
                Ptr RawTH2Poly -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetBarOffset"
-               c_th2poly_setbaroffset :: Ptr RawTH2Poly -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetBarOffset" c_th2poly_setbaroffset ::
+               Ptr RawTH2Poly -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetBarWidth"
-               c_th2poly_setbarwidth :: Ptr RawTH2Poly -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetBarWidth" c_th2poly_setbarwidth ::
+               Ptr RawTH2Poly -> CFloat -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setBinContent1"
                c_th2poly_setbincontent1 ::
                Ptr RawTH2Poly -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setBinContent2"
                c_th2poly_setbincontent2 ::
                Ptr RawTH2Poly -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setBinContent3"
                c_th2poly_setbincontent3 ::
                Ptr RawTH2Poly -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_setBinError1"
-               c_th2poly_setbinerror1 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_setBinError1" c_th2poly_setbinerror1 ::
                Ptr RawTH2Poly -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_setBinError2"
-               c_th2poly_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_setBinError2" c_th2poly_setbinerror2 ::
                Ptr RawTH2Poly -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_setBinError3"
-               c_th2poly_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_setBinError3" c_th2poly_setbinerror3 ::
                Ptr RawTH2Poly -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_setBins1"
-               c_th2poly_setbins1 ::
-               Ptr RawTH2Poly -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_setBins1" c_th2poly_setbins1 ::
+               Ptr RawTH2Poly -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_setBins2"
-               c_th2poly_setbins2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_setBins2" c_th2poly_setbins2 ::
                Ptr RawTH2Poly ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                 CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_setBins3"
-               c_th2poly_setbins3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_setBins3" c_th2poly_setbins3 ::
                Ptr RawTH2Poly ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetBinsLength" c_th2poly_setbinslength
                :: Ptr RawTH2Poly -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetBuffer"
-               c_th2poly_setbuffer :: Ptr RawTH2Poly -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetBuffer" c_th2poly_setbuffer ::
+               Ptr RawTH2Poly -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetCellContent"
                c_th2poly_setcellcontent ::
                Ptr RawTH2Poly -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetContent"
-               c_th2poly_setcontent :: Ptr RawTH2Poly -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetContent" c_th2poly_setcontent ::
+               Ptr RawTH2Poly -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetContour"
-               c_th2poly_setcontour ::
-               Ptr RawTH2Poly -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetContour" c_th2poly_setcontour ::
+               Ptr RawTH2Poly -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetContourLevel"
                c_th2poly_setcontourlevel ::
                Ptr RawTH2Poly -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetDirectory"
-               c_th2poly_setdirectory ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetDirectory" c_th2poly_setdirectory ::
                Ptr RawTH2Poly -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetEntries"
-               c_th2poly_setentries :: Ptr RawTH2Poly -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetEntries" c_th2poly_setentries ::
+               Ptr RawTH2Poly -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetError"
-               c_th2poly_seterror :: Ptr RawTH2Poly -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetError" c_th2poly_seterror ::
+               Ptr RawTH2Poly -> Ptr CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setLabelColorA"
                c_th2poly_setlabelcolora ::
-               Ptr RawTH2Poly -> CInt -> CString -> IO ()
+               Ptr RawTH2Poly -> CShort -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setLabelSizeA" c_th2poly_setlabelsizea
-               :: Ptr RawTH2Poly -> CDouble -> CString -> IO ()
+               :: Ptr RawTH2Poly -> CFloat -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setLabelFontA" c_th2poly_setlabelfonta
-               :: Ptr RawTH2Poly -> CInt -> CString -> IO ()
+               :: Ptr RawTH2Poly -> CShort -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_setLabelOffsetA"
                c_th2poly_setlabeloffseta ::
-               Ptr RawTH2Poly -> CDouble -> CString -> IO ()
+               Ptr RawTH2Poly -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetMaximum"
-               c_th2poly_setmaximum :: Ptr RawTH2Poly -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetMaximum" c_th2poly_setmaximum ::
+               Ptr RawTH2Poly -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetMinimum"
-               c_th2poly_setminimum :: Ptr RawTH2Poly -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetMinimum" c_th2poly_setminimum ::
+               Ptr RawTH2Poly -> CDouble -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetNormFactor" c_th2poly_setnormfactor
                :: Ptr RawTH2Poly -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetStats"
-               c_th2poly_setstats :: Ptr RawTH2Poly -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetStats" c_th2poly_setstats ::
+               Ptr RawTH2Poly -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetOption"
-               c_th2poly_setoption :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetOption" c_th2poly_setoption ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetXTitle"
-               c_th2poly_setxtitle :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetXTitle" c_th2poly_setxtitle ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetYTitle"
-               c_th2poly_setytitle :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetYTitle" c_th2poly_setytitle ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetZTitle"
-               c_th2poly_setztitle :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetZTitle" c_th2poly_setztitle ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_ShowBackground"
                c_th2poly_showbackground ::
                Ptr RawTH2Poly -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_ShowPeaks"
-               c_th2poly_showpeaks ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_ShowPeaks" c_th2poly_showpeaks ::
                Ptr RawTH2Poly -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Smooth"
-               c_th2poly_smooth :: Ptr RawTH2Poly -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Smooth" c_th2poly_smooth ::
+               Ptr RawTH2Poly -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Sumw2"
-               c_th2poly_sumw2 :: Ptr RawTH2Poly -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Sumw2" c_th2poly_sumw2 ::
+               Ptr RawTH2Poly -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetName"
-               c_th2poly_setname :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetName" c_th2poly_setname ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetNameTitle"
-               c_th2poly_setnametitle ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetNameTitle" c_th2poly_setnametitle ::
                Ptr RawTH2Poly -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetTitle"
-               c_th2poly_settitle :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetTitle" c_th2poly_settitle ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetLineColor"
-               c_th2poly_getlinecolor :: Ptr RawTH2Poly -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetLineColor" c_th2poly_getlinecolor ::
+               Ptr RawTH2Poly -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetLineStyle"
-               c_th2poly_getlinestyle :: Ptr RawTH2Poly -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetLineStyle" c_th2poly_getlinestyle ::
+               Ptr RawTH2Poly -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetLineWidth"
-               c_th2poly_getlinewidth :: Ptr RawTH2Poly -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetLineWidth" c_th2poly_getlinewidth ::
+               Ptr RawTH2Poly -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_ResetAttLine"
-               c_th2poly_resetattline :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_ResetAttLine" c_th2poly_resetattline ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetLineAttributes"
                c_th2poly_setlineattributes :: Ptr RawTH2Poly -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetLineColor"
-               c_th2poly_setlinecolor :: Ptr RawTH2Poly -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetLineColor" c_th2poly_setlinecolor ::
+               Ptr RawTH2Poly -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetLineStyle"
-               c_th2poly_setlinestyle :: Ptr RawTH2Poly -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetLineStyle" c_th2poly_setlinestyle ::
+               Ptr RawTH2Poly -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetLineWidth"
-               c_th2poly_setlinewidth :: Ptr RawTH2Poly -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetLineWidth" c_th2poly_setlinewidth ::
+               Ptr RawTH2Poly -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetFillColor"
-               c_th2poly_setfillcolor :: Ptr RawTH2Poly -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetFillColor" c_th2poly_setfillcolor ::
+               Ptr RawTH2Poly -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SetFillStyle"
-               c_th2poly_setfillstyle :: Ptr RawTH2Poly -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SetFillStyle" c_th2poly_setfillstyle ::
+               Ptr RawTH2Poly -> CInt -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMarkerColor"
-               c_th2poly_getmarkercolor :: Ptr RawTH2Poly -> IO CInt
+               c_th2poly_getmarkercolor :: Ptr RawTH2Poly -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMarkerStyle"
-               c_th2poly_getmarkerstyle :: Ptr RawTH2Poly -> IO CInt
+               c_th2poly_getmarkerstyle :: Ptr RawTH2Poly -> IO CShort
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_GetMarkerSize" c_th2poly_getmarkersize
-               :: Ptr RawTH2Poly -> IO CDouble
+               :: Ptr RawTH2Poly -> IO CFloat
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_ResetAttMarker"
                c_th2poly_resetattmarker :: Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetMarkerAttributes"
                c_th2poly_setmarkerattributes :: Ptr RawTH2Poly -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetMarkerColor"
-               c_th2poly_setmarkercolor :: Ptr RawTH2Poly -> CInt -> IO ()
+               c_th2poly_setmarkercolor :: Ptr RawTH2Poly -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetMarkerStyle"
-               c_th2poly_setmarkerstyle :: Ptr RawTH2Poly -> CInt -> IO ()
+               c_th2poly_setmarkerstyle :: Ptr RawTH2Poly -> CShort -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2Poly.h TH2Poly_SetMarkerSize" c_th2poly_setmarkersize
-               :: Ptr RawTH2Poly -> CInt -> IO ()
+               :: Ptr RawTH2Poly -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Draw"
-               c_th2poly_draw :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Clear" c_th2poly_clear ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_FindObject"
-               c_th2poly_findobject ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Draw" c_th2poly_draw ::
+               Ptr RawTH2Poly -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FindObject" c_th2poly_findobject ::
                Ptr RawTH2Poly -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_GetName"
-               c_th2poly_getname :: Ptr RawTH2Poly -> IO CString
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_GetName" c_th2poly_getname ::
+               Ptr RawTH2Poly -> IO CString
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_IsA"
+foreign import ccall interruptible "HROOTHistTH2Poly.h TH2Poly_IsA"
                c_th2poly_isa :: Ptr RawTH2Poly -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Paint"
-               c_th2poly_paint :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Paint" c_th2poly_paint ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_printObj"
-               c_th2poly_printobj :: Ptr RawTH2Poly -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_printObj" c_th2poly_printobj ::
+               Ptr RawTH2Poly -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_SaveAs"
-               c_th2poly_saveas :: Ptr RawTH2Poly -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_SaveAs" c_th2poly_saveas ::
+               Ptr RawTH2Poly -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_Write"
-               c_th2poly_write ::
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Write" c_th2poly_write ::
                Ptr RawTH2Poly -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2Poly.h TH2Poly_delete"
-               c_th2poly_delete :: Ptr RawTH2Poly -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_Write_" c_th2poly_write_ ::
+               Ptr RawTH2Poly -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_delete" c_th2poly_delete ::
+               Ptr RawTH2Poly -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_newTH2Poly" c_th2poly_newth2poly ::
+               CString ->
+                 CString ->
+                   CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr RawTH2Poly)
+
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_AddBin" c_th2poly_addbin ::
+               Ptr RawTH2Poly -> Ptr RawTObject -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTH2Poly.h TH2Poly_FillS" c_th2poly_fills ::
+               Ptr RawTH2Poly -> CString -> CDouble -> IO CInt
diff --git a/src/HROOT/Hist/TH2Poly/Implementation.hs b/src/HROOT/Hist/TH2Poly/Implementation.hs
--- a/src/HROOT/Hist/TH2Poly/Implementation.hs
+++ b/src/HROOT/Hist/TH2Poly/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2Poly.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2Poly.RawType
 import HROOT.Hist.TH2Poly.FFI
 import HROOT.Hist.TH2Poly.Interface
 import HROOT.Hist.TH2Poly.Cast
+import HROOT.Hist.TH2Poly.RawType
+import HROOT.Hist.TH2Poly.Cast
+import HROOT.Hist.TH2Poly.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -54,13 +63,15 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITH2Poly TH2Poly
+instance () => ITH2Poly (TH2Poly) where
+        addBin = xform1 c_th2poly_addbin
+        fillS = xform2 c_th2poly_fills
 
-instance ITH2 TH2Poly where
+instance () => ITH2 (TH2Poly) where
         fill2 = xform2 c_th2poly_fill2
         fill2w = xform3 c_th2poly_fill2w
         fillN2 = xform5 c_th2poly_filln2
@@ -78,11 +89,10 @@
         setShowProjectionX = xform1 c_th2poly_setshowprojectionx
         setShowProjectionY = xform1 c_th2poly_setshowprojectiony
 
-instance ITH1 TH2Poly where
+instance () => ITH1 (TH2Poly) where
         add = xform2 c_th2poly_add
         addBinContent = xform2 c_th2poly_addbincontent
         chi2Test = xform3 c_th2poly_chi2test
-        computeIntegral = xform0 c_th2poly_computeintegral
         directoryAutoAdd = xform1 c_th2poly_directoryautoadd
         divide = xform5 c_th2poly_divide
         drawCopyTH1 = xform1 c_th2poly_drawcopyth1
@@ -154,9 +164,6 @@
         getRMS = xform1 c_th2poly_getrms
         getRMSError = xform1 c_th2poly_getrmserror
         getSkewness = xform1 c_th2poly_getskewness
-        integral1 = xform3 c_th2poly_integral1
-        interpolate1 = xform1 c_th2poly_interpolate1
-        interpolate2 = xform2 c_th2poly_interpolate2
         interpolate3 = xform3 c_th2poly_interpolate3
         kolmogorovTest = xform2 c_th2poly_kolmogorovtest
         labelsDeflate = xform1 c_th2poly_labelsdeflate
@@ -211,12 +218,12 @@
         smooth = xform2 c_th2poly_smooth
         sumw2 = xform0 c_th2poly_sumw2
 
-instance ITNamed TH2Poly where
+instance () => ITNamed (TH2Poly) where
         setName = xform1 c_th2poly_setname
         setNameTitle = xform2 c_th2poly_setnametitle
         setTitle = xform1 c_th2poly_settitle
 
-instance ITAttLine TH2Poly where
+instance () => ITAttLine (TH2Poly) where
         getLineColor = xform0 c_th2poly_getlinecolor
         getLineStyle = xform0 c_th2poly_getlinestyle
         getLineWidth = xform0 c_th2poly_getlinewidth
@@ -226,11 +233,11 @@
         setLineStyle = xform1 c_th2poly_setlinestyle
         setLineWidth = xform1 c_th2poly_setlinewidth
 
-instance ITAttFill TH2Poly where
+instance () => ITAttFill (TH2Poly) where
         setFillColor = xform1 c_th2poly_setfillcolor
         setFillStyle = xform1 c_th2poly_setfillstyle
 
-instance ITAttMarker TH2Poly where
+instance () => ITAttMarker (TH2Poly) where
         getMarkerColor = xform0 c_th2poly_getmarkercolor
         getMarkerStyle = xform0 c_th2poly_getmarkerstyle
         getMarkerSize = xform0 c_th2poly_getmarkersize
@@ -240,7 +247,8 @@
         setMarkerStyle = xform1 c_th2poly_setmarkerstyle
         setMarkerSize = xform1 c_th2poly_setmarkersize
 
-instance ITObject TH2Poly where
+instance () => ITObject (TH2Poly) where
+        clear = xform1 c_th2poly_clear
         draw = xform1 c_th2poly_draw
         findObject = xform1 c_th2poly_findobject
         getName = xform0 c_th2poly_getname
@@ -249,6 +257,12 @@
         printObj = xform1 c_th2poly_printobj
         saveAs = xform2 c_th2poly_saveas
         write = xform3 c_th2poly_write
+        write_ = xform0 c_th2poly_write_
 
-instance IDeletable TH2Poly where
+instance () => IDeletable (TH2Poly) where
         delete = xform0 c_th2poly_delete
+
+newTH2Poly ::
+             (Castable c1 CString, Castable c0 CString) =>
+             c0 -> c1 -> CDouble -> CDouble -> CDouble -> CDouble -> IO TH2Poly
+newTH2Poly = xform5 c_th2poly_newth2poly
diff --git a/src/HROOT/Hist/TH2Poly/Interface.hs b/src/HROOT/Hist/TH2Poly/Interface.hs
--- a/src/HROOT/Hist/TH2Poly/Interface.hs
+++ b/src/HROOT/Hist/TH2Poly/Interface.hs
@@ -4,13 +4,18 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2Poly.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TH2Poly.RawType
 import HROOT.Hist.TH2.Interface
+import HROOT.Core.TObject.Interface
 
-class ITH2 a => ITH2Poly a
+class (ITH2 a) => ITH2Poly a where
+        addBin :: (ITObject c0, FPtr c0) => a -> c0 -> IO CInt
+        
+        fillS :: (Castable c0 CString) => a -> c0 -> CDouble -> IO CInt
 
 upcastTH2Poly :: forall a . (FPtr a, ITH2Poly a) => a -> TH2Poly
 upcastTH2Poly h
diff --git a/src/HROOT/Hist/TH2Poly/RawType.hs b/src/HROOT/Hist/TH2Poly/RawType.hs
--- a/src/HROOT/Hist/TH2Poly/RawType.hs
+++ b/src/HROOT/Hist/TH2Poly/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2Poly
 
 newtype TH2Poly = TH2Poly (Ptr RawTH2Poly)
-                deriving (Eq, Ord, Show)
+                    deriving (Eq, Ord, Show)
 
-instance FPtr TH2Poly where
+instance () => FPtr (TH2Poly) where
         type Raw TH2Poly = RawTH2Poly
         get_fptr (TH2Poly ptr) = ptr
         cast_fptr_to_obj = TH2Poly
diff --git a/src/HROOT/Hist/TH2S/Cast.hs b/src/HROOT/Hist/TH2S/Cast.hs
--- a/src/HROOT/Hist/TH2S/Cast.hs
+++ b/src/HROOT/Hist/TH2S/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH2S.RawType
 import HROOT.Hist.TH2S.Interface
 
-instance (ITH2S a, FPtr a) => Castable a (Ptr RawTH2S) where
+instance (ITH2S a, FPtr a) => Castable (a) (Ptr RawTH2S) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH2S (Ptr RawTH2S) where
+instance () => Castable (TH2S) (Ptr RawTH2S) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH2S/FFI.hsc b/src/HROOT/Hist/TH2S/FFI.hsc
--- a/src/HROOT/Hist/TH2S/FFI.hsc
+++ b/src/HROOT/Hist/TH2S/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH2S.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH2S.RawType
+import HROOT.Hist.TH2S.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH2.RawType
 import HROOT.Hist.TH1.RawType
@@ -14,589 +17,678 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fill2" c_th2s_fill2
-               :: Ptr RawTH2S -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_fill2"
+               c_th2s_fill2 :: Ptr RawTH2S -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fill2w"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_fill2w"
                c_th2s_fill2w ::
                Ptr RawTH2S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fillN2"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_fillN2"
                c_th2s_filln2 ::
                Ptr RawTH2S ->
-                 CInt ->
-                   (Ptr CDouble) -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+                 CInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fillRandom2"
-               c_th2s_fillrandom2 :: Ptr RawTH2S -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_fillRandom2" c_th2s_fillrandom2 ::
+               Ptr RawTH2S -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_findFirstBinAbove2"
-               c_th2s_findfirstbinabove2 ::
-               Ptr RawTH2S -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_findFirstBinAbove2" c_th2s_findfirstbinabove2
+               :: Ptr RawTH2S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_findLastBinAbove2"
-               c_th2s_findlastbinabove2 ::
-               Ptr RawTH2S -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_findLastBinAbove2" c_th2s_findlastbinabove2
+               :: Ptr RawTH2S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FitSlicesX"
-               c_th2s_fitslicesx ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FitSlicesX" c_th2s_fitslicesx ::
                Ptr RawTH2S ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FitSlicesY"
-               c_th2s_fitslicesy ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FitSlicesY" c_th2s_fitslicesy ::
                Ptr RawTH2S ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CString -> Ptr RawTObjArray -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2S.h TH2S_getCorrelationFactor2"
                c_th2s_getcorrelationfactor2 ::
                Ptr RawTH2S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getCovariance2"
-               c_th2s_getcovariance2 :: Ptr RawTH2S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getCovariance2" c_th2s_getcovariance2 ::
+               Ptr RawTH2S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_integral2"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_integral2"
                c_th2s_integral2 ::
                Ptr RawTH2S ->
                  CInt -> CInt -> CInt -> CInt -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_rebinX2"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_rebinX2"
                c_th2s_rebinx2 :: Ptr RawTH2S -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_rebinY2"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_rebinY2"
                c_th2s_rebiny2 :: Ptr RawTH2S -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Rebin2D"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Rebin2D"
                c_th2s_rebin2d ::
                Ptr RawTH2S -> CInt -> CInt -> CString -> IO (Ptr RawTH2)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetShowProjectionX"
-               c_th2s_setshowprojectionx :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetShowProjectionX" c_th2s_setshowprojectionx
+               :: Ptr RawTH2S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetShowProjectionY"
-               c_th2s_setshowprojectiony :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetShowProjectionY" c_th2s_setshowprojectiony
+               :: Ptr RawTH2S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Add" c_th2s_add ::
-               Ptr RawTH2S -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Add"
+               c_th2s_add :: Ptr RawTH2S -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_AddBinContent"
-               c_th2s_addbincontent :: Ptr RawTH2S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_AddBinContent" c_th2s_addbincontent ::
+               Ptr RawTH2S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Chi2Test"
                c_th2s_chi2test ::
-               Ptr RawTH2S -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2S.h TH2S_ComputeIntegral"
-               c_th2s_computeintegral :: Ptr RawTH2S -> IO CDouble
+               Ptr RawTH2S -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_DirectoryAutoAdd"
-               c_th2s_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_DirectoryAutoAdd" c_th2s_directoryautoadd ::
                Ptr RawTH2S -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Divide"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Divide"
                c_th2s_divide ::
                Ptr RawTH2S ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_drawCopyTH1"
-               c_th2s_drawcopyth1 :: Ptr RawTH2S -> CString -> IO (Ptr RawTH2S)
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_drawCopyTH1" c_th2s_drawcopyth1 ::
+               Ptr RawTH2S -> CString -> IO (Ptr RawTH2S)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_DrawNormalized"
-               c_th2s_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_DrawNormalized" c_th2s_drawnormalized ::
                Ptr RawTH2S -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_drawPanelTH1"
-               c_th2s_drawpanelth1 :: Ptr RawTH2S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_drawPanelTH1" c_th2s_drawpanelth1 ::
+               Ptr RawTH2S -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_BufferEmpty"
-               c_th2s_bufferempty :: Ptr RawTH2S -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_BufferEmpty" c_th2s_bufferempty ::
+               Ptr RawTH2S -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_evalF" c_th2s_evalf
-               :: Ptr RawTH2S -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_evalF"
+               c_th2s_evalf :: Ptr RawTH2S -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FFT" c_th2s_fft ::
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_FFT"
+               c_th2s_fft ::
                Ptr RawTH2S -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fill1" c_th2s_fill1
-               :: Ptr RawTH2S -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_fill1"
+               c_th2s_fill1 :: Ptr RawTH2S -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fill1w"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_fill1w"
                c_th2s_fill1w :: Ptr RawTH2S -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_fillN1"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_fillN1"
                c_th2s_filln1 ::
-               Ptr RawTH2S ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH2S -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FillRandom"
-               c_th2s_fillrandom :: Ptr RawTH2S -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FillRandom" c_th2s_fillrandom ::
+               Ptr RawTH2S -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FindBin"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_FindBin"
                c_th2s_findbin ::
                Ptr RawTH2S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FindFixBin"
-               c_th2s_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FindFixBin" c_th2s_findfixbin ::
                Ptr RawTH2S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FindFirstBinAbove"
-               c_th2s_findfirstbinabove ::
-               Ptr RawTH2S -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FindFirstBinAbove" c_th2s_findfirstbinabove
+               :: Ptr RawTH2S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FindLastBinAbove"
-               c_th2s_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FindLastBinAbove" c_th2s_findlastbinabove ::
                Ptr RawTH2S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Fit" c_th2s_fit ::
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Fit"
+               c_th2s_fit ::
                Ptr RawTH2S ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FitPanelTH1"
-               c_th2s_fitpanelth1 :: Ptr RawTH2S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FitPanelTH1" c_th2s_fitpanelth1 ::
+               Ptr RawTH2S -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getNdivisionA"
-               c_th2s_getndivisiona :: Ptr RawTH2S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getNdivisionA" c_th2s_getndivisiona ::
+               Ptr RawTH2S -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getAxisColorA"
-               c_th2s_getaxiscolora :: Ptr RawTH2S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getAxisColorA" c_th2s_getaxiscolora ::
+               Ptr RawTH2S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getLabelColorA"
-               c_th2s_getlabelcolora :: Ptr RawTH2S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getLabelColorA" c_th2s_getlabelcolora ::
+               Ptr RawTH2S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getLabelFontA"
-               c_th2s_getlabelfonta :: Ptr RawTH2S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getLabelFontA" c_th2s_getlabelfonta ::
+               Ptr RawTH2S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getLabelOffsetA"
-               c_th2s_getlabeloffseta :: Ptr RawTH2S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getLabelOffsetA" c_th2s_getlabeloffseta ::
+               Ptr RawTH2S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getLabelSizeA"
-               c_th2s_getlabelsizea :: Ptr RawTH2S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getLabelSizeA" c_th2s_getlabelsizea ::
+               Ptr RawTH2S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getTitleFontA"
-               c_th2s_gettitlefonta :: Ptr RawTH2S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getTitleFontA" c_th2s_gettitlefonta ::
+               Ptr RawTH2S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getTitleOffsetA"
-               c_th2s_gettitleoffseta :: Ptr RawTH2S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getTitleOffsetA" c_th2s_gettitleoffseta ::
+               Ptr RawTH2S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getTitleSizeA"
-               c_th2s_gettitlesizea :: Ptr RawTH2S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getTitleSizeA" c_th2s_gettitlesizea ::
+               Ptr RawTH2S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getTickLengthA"
-               c_th2s_getticklengtha :: Ptr RawTH2S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getTickLengthA" c_th2s_getticklengtha ::
+               Ptr RawTH2S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBarOffset"
-               c_th2s_getbaroffset :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBarOffset" c_th2s_getbaroffset ::
+               Ptr RawTH2S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBarWidth"
-               c_th2s_getbarwidth :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBarWidth" c_th2s_getbarwidth ::
+               Ptr RawTH2S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetContour"
-               c_th2s_getcontour :: Ptr RawTH2S -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetContour" c_th2s_getcontour ::
+               Ptr RawTH2S -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetContourLevel"
-               c_th2s_getcontourlevel :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetContourLevel" c_th2s_getcontourlevel ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetContourLevelPad"
-               c_th2s_getcontourlevelpad :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetContourLevelPad" c_th2s_getcontourlevelpad
+               :: Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBin"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetBin"
                c_th2s_getbin :: Ptr RawTH2S -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinCenter"
-               c_th2s_getbincenter :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinCenter" c_th2s_getbincenter ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinContent1"
-               c_th2s_getbincontent1 :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinContent1" c_th2s_getbincontent1 ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinContent2"
-               c_th2s_getbincontent2 :: Ptr RawTH2S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinContent2" c_th2s_getbincontent2 ::
+               Ptr RawTH2S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinContent3"
-               c_th2s_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinContent3" c_th2s_getbincontent3 ::
                Ptr RawTH2S -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinError1"
-               c_th2s_getbinerror1 :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinError1" c_th2s_getbinerror1 ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinError2"
-               c_th2s_getbinerror2 :: Ptr RawTH2S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinError2" c_th2s_getbinerror2 ::
+               Ptr RawTH2S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinError3"
-               c_th2s_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinError3" c_th2s_getbinerror3 ::
                Ptr RawTH2S -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinLowEdge"
-               c_th2s_getbinlowedge :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinLowEdge" c_th2s_getbinlowedge ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetBinWidth"
-               c_th2s_getbinwidth :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetBinWidth" c_th2s_getbinwidth ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetCellContent"
-               c_th2s_getcellcontent :: Ptr RawTH2S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetCellContent" c_th2s_getcellcontent ::
+               Ptr RawTH2S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetCellError"
-               c_th2s_getcellerror :: Ptr RawTH2S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetCellError" c_th2s_getcellerror ::
+               Ptr RawTH2S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetEntries"
-               c_th2s_getentries :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetEntries" c_th2s_getentries ::
+               Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2S.h TH2S_GetEffectiveEntries"
                c_th2s_geteffectiveentries :: Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetFunction"
-               c_th2s_getfunction :: Ptr RawTH2S -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetFunction" c_th2s_getfunction ::
+               Ptr RawTH2S -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetDimension"
-               c_th2s_getdimension :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetDimension" c_th2s_getdimension ::
+               Ptr RawTH2S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetKurtosis"
-               c_th2s_getkurtosis :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetKurtosis" c_th2s_getkurtosis ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetLowEdge"
-               c_th2s_getlowedge :: Ptr RawTH2S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetLowEdge" c_th2s_getlowedge ::
+               Ptr RawTH2S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getMaximumTH1"
-               c_th2s_getmaximumth1 :: Ptr RawTH2S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getMaximumTH1" c_th2s_getmaximumth1 ::
+               Ptr RawTH2S -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMaximumBin"
-               c_th2s_getmaximumbin :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMaximumBin" c_th2s_getmaximumbin ::
+               Ptr RawTH2S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMaximumStored"
-               c_th2s_getmaximumstored :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMaximumStored" c_th2s_getmaximumstored ::
+               Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getMinimumTH1"
-               c_th2s_getminimumth1 :: Ptr RawTH2S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getMinimumTH1" c_th2s_getminimumth1 ::
+               Ptr RawTH2S -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMinimumBin"
-               c_th2s_getminimumbin :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMinimumBin" c_th2s_getminimumbin ::
+               Ptr RawTH2S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMinimumStored"
-               c_th2s_getminimumstored :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMinimumStored" c_th2s_getminimumstored ::
+               Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMean"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetMean"
                c_th2s_getmean :: Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMeanError"
-               c_th2s_getmeanerror :: Ptr RawTH2S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMeanError" c_th2s_getmeanerror ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetNbinsX"
                c_th2s_getnbinsx :: Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetNbinsY"
                c_th2s_getnbinsy :: Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetNbinsZ"
                c_th2s_getnbinsz :: Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_getQuantilesTH1"
-               c_th2s_getquantilesth1 ::
-               Ptr RawTH2S -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_getQuantilesTH1" c_th2s_getquantilesth1 ::
+               Ptr RawTH2S -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetRandom"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetRandom"
                c_th2s_getrandom :: Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetStats"
-               c_th2s_getstats :: Ptr RawTH2S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetStats"
+               c_th2s_getstats :: Ptr RawTH2S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetSumOfWeights"
-               c_th2s_getsumofweights :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetSumOfWeights" c_th2s_getsumofweights ::
+               Ptr RawTH2S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetSumw2"
                c_th2s_getsumw2 :: Ptr RawTH2S -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetSumw2N"
                c_th2s_getsumw2n :: Ptr RawTH2S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetRMS"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetRMS"
                c_th2s_getrms :: Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetRMSError"
-               c_th2s_getrmserror :: Ptr RawTH2S -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetSkewness"
-               c_th2s_getskewness :: Ptr RawTH2S -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2S.h TH2S_integral1"
-               c_th2s_integral1 ::
-               Ptr RawTH2S -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH2S.h TH2S_interpolate1"
-               c_th2s_interpolate1 :: Ptr RawTH2S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetRMSError" c_th2s_getrmserror ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_interpolate2"
-               c_th2s_interpolate2 ::
-               Ptr RawTH2S -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetSkewness" c_th2s_getskewness ::
+               Ptr RawTH2S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_interpolate3"
-               c_th2s_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_interpolate3" c_th2s_interpolate3 ::
                Ptr RawTH2S -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_KolmogorovTest"
-               c_th2s_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_KolmogorovTest" c_th2s_kolmogorovtest ::
                Ptr RawTH2S -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_LabelsDeflate"
-               c_th2s_labelsdeflate :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_LabelsDeflate" c_th2s_labelsdeflate ::
+               Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_LabelsInflate"
-               c_th2s_labelsinflate :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_LabelsInflate" c_th2s_labelsinflate ::
+               Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_LabelsOption"
-               c_th2s_labelsoption :: Ptr RawTH2S -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_LabelsOption" c_th2s_labelsoption ::
+               Ptr RawTH2S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_multiflyF"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_multiflyF"
                c_th2s_multiflyf :: Ptr RawTH2S -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Multiply"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Multiply"
                c_th2s_multiply ::
                Ptr RawTH2S ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_PutStats"
-               c_th2s_putstats :: Ptr RawTH2S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_PutStats"
+               c_th2s_putstats :: Ptr RawTH2S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Rebin" c_th2s_rebin
-               ::
-               Ptr RawTH2S -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Rebin"
+               c_th2s_rebin ::
+               Ptr RawTH2S -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_RebinAxis"
                c_th2s_rebinaxis :: Ptr RawTH2S -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Rebuild"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Rebuild"
                c_th2s_rebuild :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_RecursiveRemove"
-               c_th2s_recursiveremove :: Ptr RawTH2S -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_RecursiveRemove" c_th2s_recursiveremove ::
+               Ptr RawTH2S -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Reset" c_th2s_reset
-               :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Reset"
+               c_th2s_reset :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_ResetStats"
-               c_th2s_resetstats :: Ptr RawTH2S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_ResetStats" c_th2s_resetstats ::
+               Ptr RawTH2S -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Scale" c_th2s_scale
-               :: Ptr RawTH2S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Scale"
+               c_th2s_scale :: Ptr RawTH2S -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setAxisColorA"
-               c_th2s_setaxiscolora :: Ptr RawTH2S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setAxisColorA" c_th2s_setaxiscolora ::
+               Ptr RawTH2S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetAxisRange"
-               c_th2s_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetAxisRange" c_th2s_setaxisrange ::
                Ptr RawTH2S -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetBarOffset"
-               c_th2s_setbaroffset :: Ptr RawTH2S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetBarOffset" c_th2s_setbaroffset ::
+               Ptr RawTH2S -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetBarWidth"
-               c_th2s_setbarwidth :: Ptr RawTH2S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetBarWidth" c_th2s_setbarwidth ::
+               Ptr RawTH2S -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBinContent1"
-               c_th2s_setbincontent1 :: Ptr RawTH2S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setBinContent1" c_th2s_setbincontent1 ::
+               Ptr RawTH2S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBinContent2"
-               c_th2s_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setBinContent2" c_th2s_setbincontent2 ::
                Ptr RawTH2S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBinContent3"
-               c_th2s_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setBinContent3" c_th2s_setbincontent3 ::
                Ptr RawTH2S -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBinError1"
-               c_th2s_setbinerror1 :: Ptr RawTH2S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setBinError1" c_th2s_setbinerror1 ::
+               Ptr RawTH2S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBinError2"
-               c_th2s_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setBinError2" c_th2s_setbinerror2 ::
                Ptr RawTH2S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBinError3"
-               c_th2s_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setBinError3" c_th2s_setbinerror3 ::
                Ptr RawTH2S -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBins1"
-               c_th2s_setbins1 :: Ptr RawTH2S -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_setBins1"
+               c_th2s_setbins1 :: Ptr RawTH2S -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBins2"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_setBins2"
                c_th2s_setbins2 ::
-               Ptr RawTH2S ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH2S -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setBins3"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_setBins3"
                c_th2s_setbins3 ::
                Ptr RawTH2S ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetBinsLength"
-               c_th2s_setbinslength :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetBinsLength" c_th2s_setbinslength ::
+               Ptr RawTH2S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetBuffer"
                c_th2s_setbuffer :: Ptr RawTH2S -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetCellContent"
-               c_th2s_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetCellContent" c_th2s_setcellcontent ::
                Ptr RawTH2S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetContent"
-               c_th2s_setcontent :: Ptr RawTH2S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetContent" c_th2s_setcontent ::
+               Ptr RawTH2S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetContour"
-               c_th2s_setcontour :: Ptr RawTH2S -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetContour" c_th2s_setcontour ::
+               Ptr RawTH2S -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetContourLevel"
-               c_th2s_setcontourlevel :: Ptr RawTH2S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetContourLevel" c_th2s_setcontourlevel ::
+               Ptr RawTH2S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetDirectory"
-               c_th2s_setdirectory :: Ptr RawTH2S -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetDirectory" c_th2s_setdirectory ::
+               Ptr RawTH2S -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetEntries"
-               c_th2s_setentries :: Ptr RawTH2S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetEntries" c_th2s_setentries ::
+               Ptr RawTH2S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetError"
-               c_th2s_seterror :: Ptr RawTH2S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetError"
+               c_th2s_seterror :: Ptr RawTH2S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setLabelColorA"
-               c_th2s_setlabelcolora :: Ptr RawTH2S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setLabelColorA" c_th2s_setlabelcolora ::
+               Ptr RawTH2S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setLabelSizeA"
-               c_th2s_setlabelsizea :: Ptr RawTH2S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setLabelSizeA" c_th2s_setlabelsizea ::
+               Ptr RawTH2S -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setLabelFontA"
-               c_th2s_setlabelfonta :: Ptr RawTH2S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setLabelFontA" c_th2s_setlabelfonta ::
+               Ptr RawTH2S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_setLabelOffsetA"
-               c_th2s_setlabeloffseta ::
-               Ptr RawTH2S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_setLabelOffsetA" c_th2s_setlabeloffseta ::
+               Ptr RawTH2S -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetMaximum"
-               c_th2s_setmaximum :: Ptr RawTH2S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetMaximum" c_th2s_setmaximum ::
+               Ptr RawTH2S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetMinimum"
-               c_th2s_setminimum :: Ptr RawTH2S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetMinimum" c_th2s_setminimum ::
+               Ptr RawTH2S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetNormFactor"
-               c_th2s_setnormfactor :: Ptr RawTH2S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetNormFactor" c_th2s_setnormfactor ::
+               Ptr RawTH2S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetStats"
-               c_th2s_setstats :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetStats"
+               c_th2s_setstats :: Ptr RawTH2S -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetOption"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetOption"
                c_th2s_setoption :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetXTitle"
                c_th2s_setxtitle :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetYTitle"
                c_th2s_setytitle :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetZTitle"
                c_th2s_setztitle :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_ShowBackground"
-               c_th2s_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_ShowBackground" c_th2s_showbackground ::
                Ptr RawTH2S -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_ShowPeaks"
                c_th2s_showpeaks ::
                Ptr RawTH2S -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Smooth"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Smooth"
                c_th2s_smooth :: Ptr RawTH2S -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Sumw2" c_th2s_sumw2
-               :: Ptr RawTH2S -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Sumw2"
+               c_th2s_sumw2 :: Ptr RawTH2S -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetName"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetName"
                c_th2s_setname :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetNameTitle"
-               c_th2s_setnametitle :: Ptr RawTH2S -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetNameTitle" c_th2s_setnametitle ::
+               Ptr RawTH2S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetTitle"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetTitle"
                c_th2s_settitle :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetLineColor"
-               c_th2s_getlinecolor :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetLineColor" c_th2s_getlinecolor ::
+               Ptr RawTH2S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetLineStyle"
-               c_th2s_getlinestyle :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetLineStyle" c_th2s_getlinestyle ::
+               Ptr RawTH2S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetLineWidth"
-               c_th2s_getlinewidth :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetLineWidth" c_th2s_getlinewidth ::
+               Ptr RawTH2S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_ResetAttLine"
-               c_th2s_resetattline :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_ResetAttLine" c_th2s_resetattline ::
+               Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetLineAttributes"
-               c_th2s_setlineattributes :: Ptr RawTH2S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetLineAttributes" c_th2s_setlineattributes
+               :: Ptr RawTH2S -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetLineColor"
-               c_th2s_setlinecolor :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetLineColor" c_th2s_setlinecolor ::
+               Ptr RawTH2S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetLineStyle"
-               c_th2s_setlinestyle :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetLineStyle" c_th2s_setlinestyle ::
+               Ptr RawTH2S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetLineWidth"
-               c_th2s_setlinewidth :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetLineWidth" c_th2s_setlinewidth ::
+               Ptr RawTH2S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetFillColor"
-               c_th2s_setfillcolor :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetFillColor" c_th2s_setfillcolor ::
+               Ptr RawTH2S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetFillStyle"
-               c_th2s_setfillstyle :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetFillStyle" c_th2s_setfillstyle ::
+               Ptr RawTH2S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMarkerColor"
-               c_th2s_getmarkercolor :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMarkerColor" c_th2s_getmarkercolor ::
+               Ptr RawTH2S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMarkerStyle"
-               c_th2s_getmarkerstyle :: Ptr RawTH2S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMarkerStyle" c_th2s_getmarkerstyle ::
+               Ptr RawTH2S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetMarkerSize"
-               c_th2s_getmarkersize :: Ptr RawTH2S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_GetMarkerSize" c_th2s_getmarkersize ::
+               Ptr RawTH2S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_ResetAttMarker"
-               c_th2s_resetattmarker :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_ResetAttMarker" c_th2s_resetattmarker ::
+               Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH2S.h TH2S_SetMarkerAttributes"
                c_th2s_setmarkerattributes :: Ptr RawTH2S -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetMarkerColor"
-               c_th2s_setmarkercolor :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetMarkerColor" c_th2s_setmarkercolor ::
+               Ptr RawTH2S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetMarkerStyle"
-               c_th2s_setmarkerstyle :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetMarkerStyle" c_th2s_setmarkerstyle ::
+               Ptr RawTH2S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SetMarkerSize"
-               c_th2s_setmarkersize :: Ptr RawTH2S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_SetMarkerSize" c_th2s_setmarkersize ::
+               Ptr RawTH2S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Draw" c_th2s_draw
-               :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Clear"
+               c_th2s_clear :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_FindObject"
-               c_th2s_findobject :: Ptr RawTH2S -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Draw"
+               c_th2s_draw :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH2S.h TH2S_FindObject" c_th2s_findobject ::
+               Ptr RawTH2S -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetName"
                c_th2s_getname :: Ptr RawTH2S -> IO CString
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_IsA" c_th2s_isa ::
-               Ptr RawTH2S -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_IsA"
+               c_th2s_isa :: Ptr RawTH2S -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Paint" c_th2s_paint
-               :: Ptr RawTH2S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Paint"
+               c_th2s_paint :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_printObj"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_printObj"
                c_th2s_printobj :: Ptr RawTH2S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_SaveAs"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SaveAs"
                c_th2s_saveas :: Ptr RawTH2S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_Write" c_th2s_write
-               :: Ptr RawTH2S -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Write"
+               c_th2s_write :: Ptr RawTH2S -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH2S.h TH2S_delete"
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_Write_"
+               c_th2s_write_ :: Ptr RawTH2S -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_delete"
                c_th2s_delete :: Ptr RawTH2S -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_GetAt"
+               c_th2s_getat :: Ptr RawTH2S -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetArray"
+               c_th2s_setarray :: Ptr RawTH2S -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH2S.h TH2S_SetAt"
+               c_th2s_setat :: Ptr RawTH2S -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH2S/Implementation.hs b/src/HROOT/Hist/TH2S/Implementation.hs
--- a/src/HROOT/Hist/TH2S/Implementation.hs
+++ b/src/HROOT/Hist/TH2S/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH2S.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH2S.RawType
 import HROOT.Hist.TH2S.FFI
 import HROOT.Hist.TH2S.Interface
 import HROOT.Hist.TH2S.Cast
+import HROOT.Hist.TH2S.RawType
+import HROOT.Hist.TH2S.Cast
+import HROOT.Hist.TH2S.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH2S TH2S
+instance () => ITH2S (TH2S) where
 
-instance ITH2 TH2S where
+instance () => ITH2 (TH2S) where
         fill2 = xform2 c_th2s_fill2
         fill2w = xform3 c_th2s_fill2w
         fillN2 = xform5 c_th2s_filln2
@@ -84,13 +93,12 @@
         setShowProjectionX = xform1 c_th2s_setshowprojectionx
         setShowProjectionY = xform1 c_th2s_setshowprojectiony
 
-instance ITArrayS TH2S
+instance () => ITArrayS (TH2S) where
 
-instance ITH1 TH2S where
+instance () => ITH1 (TH2S) where
         add = xform2 c_th2s_add
         addBinContent = xform2 c_th2s_addbincontent
         chi2Test = xform3 c_th2s_chi2test
-        computeIntegral = xform0 c_th2s_computeintegral
         directoryAutoAdd = xform1 c_th2s_directoryautoadd
         divide = xform5 c_th2s_divide
         drawCopyTH1 = xform1 c_th2s_drawcopyth1
@@ -162,9 +170,6 @@
         getRMS = xform1 c_th2s_getrms
         getRMSError = xform1 c_th2s_getrmserror
         getSkewness = xform1 c_th2s_getskewness
-        integral1 = xform3 c_th2s_integral1
-        interpolate1 = xform1 c_th2s_interpolate1
-        interpolate2 = xform2 c_th2s_interpolate2
         interpolate3 = xform3 c_th2s_interpolate3
         kolmogorovTest = xform2 c_th2s_kolmogorovtest
         labelsDeflate = xform1 c_th2s_labelsdeflate
@@ -219,12 +224,12 @@
         smooth = xform2 c_th2s_smooth
         sumw2 = xform0 c_th2s_sumw2
 
-instance ITNamed TH2S where
+instance () => ITNamed (TH2S) where
         setName = xform1 c_th2s_setname
         setNameTitle = xform2 c_th2s_setnametitle
         setTitle = xform1 c_th2s_settitle
 
-instance ITAttLine TH2S where
+instance () => ITAttLine (TH2S) where
         getLineColor = xform0 c_th2s_getlinecolor
         getLineStyle = xform0 c_th2s_getlinestyle
         getLineWidth = xform0 c_th2s_getlinewidth
@@ -234,11 +239,11 @@
         setLineStyle = xform1 c_th2s_setlinestyle
         setLineWidth = xform1 c_th2s_setlinewidth
 
-instance ITAttFill TH2S where
+instance () => ITAttFill (TH2S) where
         setFillColor = xform1 c_th2s_setfillcolor
         setFillStyle = xform1 c_th2s_setfillstyle
 
-instance ITAttMarker TH2S where
+instance () => ITAttMarker (TH2S) where
         getMarkerColor = xform0 c_th2s_getmarkercolor
         getMarkerStyle = xform0 c_th2s_getmarkerstyle
         getMarkerSize = xform0 c_th2s_getmarkersize
@@ -248,7 +253,8 @@
         setMarkerStyle = xform1 c_th2s_setmarkerstyle
         setMarkerSize = xform1 c_th2s_setmarkersize
 
-instance ITObject TH2S where
+instance () => ITObject (TH2S) where
+        clear = xform1 c_th2s_clear
         draw = xform1 c_th2s_draw
         findObject = xform1 c_th2s_findobject
         getName = xform0 c_th2s_getname
@@ -257,8 +263,12 @@
         printObj = xform1 c_th2s_printobj
         saveAs = xform2 c_th2s_saveas
         write = xform3 c_th2s_write
+        write_ = xform0 c_th2s_write_
 
-instance IDeletable TH2S where
+instance () => IDeletable (TH2S) where
         delete = xform0 c_th2s_delete
 
-instance ITArray TH2S
+instance () => ITArray (TH2S) where
+        getAt = xform1 c_th2s_getat
+        setArray = xform1 c_th2s_setarray
+        setAt = xform2 c_th2s_setat
diff --git a/src/HROOT/Hist/TH2S/Interface.hs b/src/HROOT/Hist/TH2S/Interface.hs
--- a/src/HROOT/Hist/TH2S/Interface.hs
+++ b/src/HROOT/Hist/TH2S/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH2S.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH2.Interface
 import HROOT.Core.TArrayS.Interface
 
-class (ITH2 a, ITArrayS a) => ITH2S a
+class (ITH2 a, ITArrayS a) => ITH2S a where
 
 upcastTH2S :: forall a . (FPtr a, ITH2S a) => a -> TH2S
 upcastTH2S h
diff --git a/src/HROOT/Hist/TH2S/RawType.hs b/src/HROOT/Hist/TH2S/RawType.hs
--- a/src/HROOT/Hist/TH2S/RawType.hs
+++ b/src/HROOT/Hist/TH2S/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH2S
 
 newtype TH2S = TH2S (Ptr RawTH2S)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH2S where
+instance () => FPtr (TH2S) where
         type Raw TH2S = RawTH2S
         get_fptr (TH2S ptr) = ptr
         cast_fptr_to_obj = TH2S
diff --git a/src/HROOT/Hist/TH3.hs b/src/HROOT/Hist/TH3.hs
--- a/src/HROOT/Hist/TH3.hs
+++ b/src/HROOT/Hist/TH3.hs
@@ -1,6 +1,6 @@
 module HROOT.Hist.TH3
-       (TH3(..), ITH3(..), upcastTH3, downcastTH3, tH3ProjectionX,
-        tH3ProjectionY, tH3ProjectionZ, tH3Project3D)
+       (TH3(..), ITH3(..), upcastTH3, downcastTH3, tH3_ProjectionX,
+        tH3_ProjectionY, tH3_ProjectionZ, tH3_Project3D)
        where
 import HROOT.Hist.TH3.RawType
 import HROOT.Hist.TH3.Interface
diff --git a/src/HROOT/Hist/TH3/Cast.hs b/src/HROOT/Hist/TH3/Cast.hs
--- a/src/HROOT/Hist/TH3/Cast.hs
+++ b/src/HROOT/Hist/TH3/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH3.RawType
 import HROOT.Hist.TH3.Interface
 
-instance (ITH3 a, FPtr a) => Castable a (Ptr RawTH3) where
+instance (ITH3 a, FPtr a) => Castable (a) (Ptr RawTH3) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH3 (Ptr RawTH3) where
+instance () => Castable (TH3) (Ptr RawTH3) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH3/FFI.hsc b/src/HROOT/Hist/TH3/FFI.hsc
--- a/src/HROOT/Hist/TH3/FFI.hsc
+++ b/src/HROOT/Hist/TH3/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH3.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH3.RawType
+import HROOT.Hist.TH3.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Core.TDirectory.RawType
 import HROOT.Hist.TF1.RawType
@@ -12,572 +15,637 @@
 import HROOT.Core.TClass.RawType
 import HROOT.Hist.TH1D.RawType
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Add" c_th3_add ::
-               Ptr RawTH3 -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Add"
+               c_th3_add :: Ptr RawTH3 -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_AddBinContent"
-               c_th3_addbincontent :: Ptr RawTH3 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_AddBinContent" c_th3_addbincontent ::
+               Ptr RawTH3 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Chi2Test"
                c_th3_chi2test ::
-               Ptr RawTH3 -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3.h TH3_ComputeIntegral"
-               c_th3_computeintegral :: Ptr RawTH3 -> IO CDouble
+               Ptr RawTH3 -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_DirectoryAutoAdd"
-               c_th3_directoryautoadd :: Ptr RawTH3 -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_DirectoryAutoAdd" c_th3_directoryautoadd ::
+               Ptr RawTH3 -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Divide" c_th3_divide
-               ::
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Divide"
+               c_th3_divide ::
                Ptr RawTH3 ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_drawCopyTH1"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_drawCopyTH1"
                c_th3_drawcopyth1 :: Ptr RawTH3 -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_DrawNormalized"
-               c_th3_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_DrawNormalized" c_th3_drawnormalized ::
                Ptr RawTH3 -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_drawPanelTH1"
-               c_th3_drawpanelth1 :: Ptr RawTH3 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_drawPanelTH1" c_th3_drawpanelth1 ::
+               Ptr RawTH3 -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_BufferEmpty"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_BufferEmpty"
                c_th3_bufferempty :: Ptr RawTH3 -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_evalF" c_th3_evalf ::
-               Ptr RawTH3 -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_evalF"
+               c_th3_evalf :: Ptr RawTH3 -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FFT" c_th3_fft ::
-               Ptr RawTH3 -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FFT"
+               c_th3_fft :: Ptr RawTH3 -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_fill1" c_th3_fill1 ::
-               Ptr RawTH3 -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3.h TH3_fill1"
+               c_th3_fill1 :: Ptr RawTH3 -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_fill1w" c_th3_fill1w
-               :: Ptr RawTH3 -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3.h TH3_fill1w"
+               c_th3_fill1w :: Ptr RawTH3 -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_fillN1" c_th3_filln1
-               ::
-               Ptr RawTH3 ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_fillN1"
+               c_th3_filln1 ::
+               Ptr RawTH3 -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FillRandom"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FillRandom"
                c_th3_fillrandom :: Ptr RawTH3 -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FindBin"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FindBin"
                c_th3_findbin ::
                Ptr RawTH3 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FindFixBin"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FindFixBin"
                c_th3_findfixbin ::
                Ptr RawTH3 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FindFirstBinAbove"
-               c_th3_findfirstbinabove :: Ptr RawTH3 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_FindFirstBinAbove" c_th3_findfirstbinabove ::
+               Ptr RawTH3 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FindLastBinAbove"
-               c_th3_findlastbinabove :: Ptr RawTH3 -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_FindLastBinAbove" c_th3_findlastbinabove ::
+               Ptr RawTH3 -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Fit" c_th3_fit ::
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Fit"
+               c_th3_fit ::
                Ptr RawTH3 ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FitPanelTH1"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FitPanelTH1"
                c_th3_fitpanelth1 :: Ptr RawTH3 -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getNdivisionA"
-               c_th3_getndivisiona :: Ptr RawTH3 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getNdivisionA" c_th3_getndivisiona ::
+               Ptr RawTH3 -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getAxisColorA"
-               c_th3_getaxiscolora :: Ptr RawTH3 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getAxisColorA" c_th3_getaxiscolora ::
+               Ptr RawTH3 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getLabelColorA"
-               c_th3_getlabelcolora :: Ptr RawTH3 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getLabelColorA" c_th3_getlabelcolora ::
+               Ptr RawTH3 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getLabelFontA"
-               c_th3_getlabelfonta :: Ptr RawTH3 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getLabelFontA" c_th3_getlabelfonta ::
+               Ptr RawTH3 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getLabelOffsetA"
-               c_th3_getlabeloffseta :: Ptr RawTH3 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getLabelOffsetA" c_th3_getlabeloffseta ::
+               Ptr RawTH3 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getLabelSizeA"
-               c_th3_getlabelsizea :: Ptr RawTH3 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getLabelSizeA" c_th3_getlabelsizea ::
+               Ptr RawTH3 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getTitleFontA"
-               c_th3_gettitlefonta :: Ptr RawTH3 -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getTitleFontA" c_th3_gettitlefonta ::
+               Ptr RawTH3 -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getTitleOffsetA"
-               c_th3_gettitleoffseta :: Ptr RawTH3 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getTitleOffsetA" c_th3_gettitleoffseta ::
+               Ptr RawTH3 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getTitleSizeA"
-               c_th3_gettitlesizea :: Ptr RawTH3 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getTitleSizeA" c_th3_gettitlesizea ::
+               Ptr RawTH3 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getTickLengthA"
-               c_th3_getticklengtha :: Ptr RawTH3 -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getTickLengthA" c_th3_getticklengtha ::
+               Ptr RawTH3 -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBarOffset"
-               c_th3_getbaroffset :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBarOffset" c_th3_getbaroffset ::
+               Ptr RawTH3 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBarWidth"
-               c_th3_getbarwidth :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetBarWidth"
+               c_th3_getbarwidth :: Ptr RawTH3 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetContour"
-               c_th3_getcontour :: Ptr RawTH3 -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetContour"
+               c_th3_getcontour :: Ptr RawTH3 -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetContourLevel"
-               c_th3_getcontourlevel :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetContourLevel" c_th3_getcontourlevel ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetContourLevelPad"
-               c_th3_getcontourlevelpad :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetContourLevelPad" c_th3_getcontourlevelpad ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBin" c_th3_getbin
-               :: Ptr RawTH3 -> CInt -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetBin"
+               c_th3_getbin :: Ptr RawTH3 -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinCenter"
-               c_th3_getbincenter :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinCenter" c_th3_getbincenter ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinContent1"
-               c_th3_getbincontent1 :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinContent1" c_th3_getbincontent1 ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinContent2"
-               c_th3_getbincontent2 :: Ptr RawTH3 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinContent2" c_th3_getbincontent2 ::
+               Ptr RawTH3 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinContent3"
-               c_th3_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinContent3" c_th3_getbincontent3 ::
                Ptr RawTH3 -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinError1"
-               c_th3_getbinerror1 :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinError1" c_th3_getbinerror1 ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinError2"
-               c_th3_getbinerror2 :: Ptr RawTH3 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinError2" c_th3_getbinerror2 ::
+               Ptr RawTH3 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinError3"
-               c_th3_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinError3" c_th3_getbinerror3 ::
                Ptr RawTH3 -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinLowEdge"
-               c_th3_getbinlowedge :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetBinLowEdge" c_th3_getbinlowedge ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetBinWidth"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetBinWidth"
                c_th3_getbinwidth :: Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetCellContent"
-               c_th3_getcellcontent :: Ptr RawTH3 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetCellContent" c_th3_getcellcontent ::
+               Ptr RawTH3 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetCellError"
-               c_th3_getcellerror :: Ptr RawTH3 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetCellError" c_th3_getcellerror ::
+               Ptr RawTH3 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetEntries"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetEntries"
                c_th3_getentries :: Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetEffectiveEntries"
-               c_th3_geteffectiveentries :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetEffectiveEntries" c_th3_geteffectiveentries
+               :: Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetFunction"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetFunction"
                c_th3_getfunction :: Ptr RawTH3 -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetDimension"
-               c_th3_getdimension :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetDimension" c_th3_getdimension ::
+               Ptr RawTH3 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetKurtosis"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetKurtosis"
                c_th3_getkurtosis :: Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetLowEdge"
-               c_th3_getlowedge :: Ptr RawTH3 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetLowEdge"
+               c_th3_getlowedge :: Ptr RawTH3 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getMaximumTH1"
-               c_th3_getmaximumth1 :: Ptr RawTH3 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getMaximumTH1" c_th3_getmaximumth1 ::
+               Ptr RawTH3 -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMaximumBin"
-               c_th3_getmaximumbin :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMaximumBin" c_th3_getmaximumbin ::
+               Ptr RawTH3 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMaximumStored"
-               c_th3_getmaximumstored :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMaximumStored" c_th3_getmaximumstored ::
+               Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getMinimumTH1"
-               c_th3_getminimumth1 :: Ptr RawTH3 -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getMinimumTH1" c_th3_getminimumth1 ::
+               Ptr RawTH3 -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMinimumBin"
-               c_th3_getminimumbin :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMinimumBin" c_th3_getminimumbin ::
+               Ptr RawTH3 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMinimumStored"
-               c_th3_getminimumstored :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMinimumStored" c_th3_getminimumstored ::
+               Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMean"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetMean"
                c_th3_getmean :: Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMeanError"
-               c_th3_getmeanerror :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMeanError" c_th3_getmeanerror ::
+               Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetNbinsX"
                c_th3_getnbinsx :: Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetNbinsY"
                c_th3_getnbinsy :: Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetNbinsZ"
                c_th3_getnbinsz :: Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getQuantilesTH1"
-               c_th3_getquantilesth1 ::
-               Ptr RawTH3 -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getQuantilesTH1" c_th3_getquantilesth1 ::
+               Ptr RawTH3 -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetRandom"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetRandom"
                c_th3_getrandom :: Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetStats"
-               c_th3_getstats :: Ptr RawTH3 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetStats"
+               c_th3_getstats :: Ptr RawTH3 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetSumOfWeights"
-               c_th3_getsumofweights :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetSumOfWeights" c_th3_getsumofweights ::
+               Ptr RawTH3 -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetSumw2"
                c_th3_getsumw2 :: Ptr RawTH3 -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetSumw2N"
                c_th3_getsumw2n :: Ptr RawTH3 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetRMS" c_th3_getrms
-               :: Ptr RawTH3 -> CInt -> IO CDouble
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetRMS"
+               c_th3_getrms :: Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetRMSError"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetRMSError"
                c_th3_getrmserror :: Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetSkewness"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetSkewness"
                c_th3_getskewness :: Ptr RawTH3 -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_integral1"
-               c_th3_integral1 ::
-               Ptr RawTH3 -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3.h TH3_interpolate1"
-               c_th3_interpolate1 :: Ptr RawTH3 -> CDouble -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3.h TH3_interpolate2"
-               c_th3_interpolate2 ::
-               Ptr RawTH3 -> CDouble -> CDouble -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3.h TH3_interpolate3"
-               c_th3_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_interpolate3" c_th3_interpolate3 ::
                Ptr RawTH3 -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_KolmogorovTest"
-               c_th3_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_KolmogorovTest" c_th3_kolmogorovtest ::
                Ptr RawTH3 -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_LabelsDeflate"
-               c_th3_labelsdeflate :: Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_LabelsDeflate" c_th3_labelsdeflate ::
+               Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_LabelsInflate"
-               c_th3_labelsinflate :: Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_LabelsInflate" c_th3_labelsinflate ::
+               Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_LabelsOption"
-               c_th3_labelsoption :: Ptr RawTH3 -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_LabelsOption" c_th3_labelsoption ::
+               Ptr RawTH3 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_multiflyF"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_multiflyF"
                c_th3_multiflyf :: Ptr RawTH3 -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Multiply"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Multiply"
                c_th3_multiply ::
                Ptr RawTH3 ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_PutStats"
-               c_th3_putstats :: Ptr RawTH3 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_PutStats"
+               c_th3_putstats :: Ptr RawTH3 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Rebin" c_th3_rebin ::
-               Ptr RawTH3 -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Rebin"
+               c_th3_rebin ::
+               Ptr RawTH3 -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_RebinAxis"
                c_th3_rebinaxis :: Ptr RawTH3 -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Rebuild"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Rebuild"
                c_th3_rebuild :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_RecursiveRemove"
-               c_th3_recursiveremove :: Ptr RawTH3 -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_RecursiveRemove" c_th3_recursiveremove ::
+               Ptr RawTH3 -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Reset" c_th3_reset ::
-               Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Reset"
+               c_th3_reset :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_ResetStats"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_ResetStats"
                c_th3_resetstats :: Ptr RawTH3 -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Scale" c_th3_scale ::
-               Ptr RawTH3 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Scale"
+               c_th3_scale :: Ptr RawTH3 -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setAxisColorA"
-               c_th3_setaxiscolora :: Ptr RawTH3 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setAxisColorA" c_th3_setaxiscolora ::
+               Ptr RawTH3 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetAxisRange"
-               c_th3_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetAxisRange" c_th3_setaxisrange ::
                Ptr RawTH3 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetBarOffset"
-               c_th3_setbaroffset :: Ptr RawTH3 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetBarOffset" c_th3_setbaroffset ::
+               Ptr RawTH3 -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetBarWidth"
-               c_th3_setbarwidth :: Ptr RawTH3 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetBarWidth"
+               c_th3_setbarwidth :: Ptr RawTH3 -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBinContent1"
-               c_th3_setbincontent1 :: Ptr RawTH3 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setBinContent1" c_th3_setbincontent1 ::
+               Ptr RawTH3 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBinContent2"
-               c_th3_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setBinContent2" c_th3_setbincontent2 ::
                Ptr RawTH3 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBinContent3"
-               c_th3_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setBinContent3" c_th3_setbincontent3 ::
                Ptr RawTH3 -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBinError1"
-               c_th3_setbinerror1 :: Ptr RawTH3 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setBinError1" c_th3_setbinerror1 ::
+               Ptr RawTH3 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBinError2"
-               c_th3_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setBinError2" c_th3_setbinerror2 ::
                Ptr RawTH3 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBinError3"
-               c_th3_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setBinError3" c_th3_setbinerror3 ::
                Ptr RawTH3 -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBins1"
-               c_th3_setbins1 :: Ptr RawTH3 -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_setBins1"
+               c_th3_setbins1 :: Ptr RawTH3 -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBins2"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_setBins2"
                c_th3_setbins2 ::
-               Ptr RawTH3 ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH3 -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setBins3"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_setBins3"
                c_th3_setbins3 ::
                Ptr RawTH3 ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetBinsLength"
-               c_th3_setbinslength :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetBinsLength" c_th3_setbinslength ::
+               Ptr RawTH3 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetBuffer"
                c_th3_setbuffer :: Ptr RawTH3 -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetCellContent"
-               c_th3_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetCellContent" c_th3_setcellcontent ::
                Ptr RawTH3 -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetContent"
-               c_th3_setcontent :: Ptr RawTH3 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetContent"
+               c_th3_setcontent :: Ptr RawTH3 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetContour"
-               c_th3_setcontour :: Ptr RawTH3 -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetContour"
+               c_th3_setcontour :: Ptr RawTH3 -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetContourLevel"
-               c_th3_setcontourlevel :: Ptr RawTH3 -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetContourLevel" c_th3_setcontourlevel ::
+               Ptr RawTH3 -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetDirectory"
-               c_th3_setdirectory :: Ptr RawTH3 -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetDirectory" c_th3_setdirectory ::
+               Ptr RawTH3 -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetEntries"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetEntries"
                c_th3_setentries :: Ptr RawTH3 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetError"
-               c_th3_seterror :: Ptr RawTH3 -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetError"
+               c_th3_seterror :: Ptr RawTH3 -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setLabelColorA"
-               c_th3_setlabelcolora :: Ptr RawTH3 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setLabelColorA" c_th3_setlabelcolora ::
+               Ptr RawTH3 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setLabelSizeA"
-               c_th3_setlabelsizea :: Ptr RawTH3 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setLabelSizeA" c_th3_setlabelsizea ::
+               Ptr RawTH3 -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setLabelFontA"
-               c_th3_setlabelfonta :: Ptr RawTH3 -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setLabelFontA" c_th3_setlabelfonta ::
+               Ptr RawTH3 -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_setLabelOffsetA"
-               c_th3_setlabeloffseta :: Ptr RawTH3 -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_setLabelOffsetA" c_th3_setlabeloffseta ::
+               Ptr RawTH3 -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetMaximum"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetMaximum"
                c_th3_setmaximum :: Ptr RawTH3 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetMinimum"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetMinimum"
                c_th3_setminimum :: Ptr RawTH3 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetNormFactor"
-               c_th3_setnormfactor :: Ptr RawTH3 -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetNormFactor" c_th3_setnormfactor ::
+               Ptr RawTH3 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetStats"
-               c_th3_setstats :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetStats"
+               c_th3_setstats :: Ptr RawTH3 -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetOption"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetOption"
                c_th3_setoption :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetXTitle"
                c_th3_setxtitle :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetYTitle"
                c_th3_setytitle :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetZTitle"
                c_th3_setztitle :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_ShowBackground"
-               c_th3_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_ShowBackground" c_th3_showbackground ::
                Ptr RawTH3 -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_ShowPeaks"
                c_th3_showpeaks ::
                Ptr RawTH3 -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Smooth" c_th3_smooth
-               :: Ptr RawTH3 -> CInt -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Smooth"
+               c_th3_smooth :: Ptr RawTH3 -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Sumw2" c_th3_sumw2 ::
-               Ptr RawTH3 -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Sumw2"
+               c_th3_sumw2 :: Ptr RawTH3 -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetName"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetName"
                c_th3_setname :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetNameTitle"
-               c_th3_setnametitle :: Ptr RawTH3 -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetNameTitle" c_th3_setnametitle ::
+               Ptr RawTH3 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetTitle"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SetTitle"
                c_th3_settitle :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetLineColor"
-               c_th3_getlinecolor :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetLineColor" c_th3_getlinecolor ::
+               Ptr RawTH3 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetLineStyle"
-               c_th3_getlinestyle :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetLineStyle" c_th3_getlinestyle ::
+               Ptr RawTH3 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetLineWidth"
-               c_th3_getlinewidth :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetLineWidth" c_th3_getlinewidth ::
+               Ptr RawTH3 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_ResetAttLine"
-               c_th3_resetattline :: Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_ResetAttLine" c_th3_resetattline ::
+               Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetLineAttributes"
-               c_th3_setlineattributes :: Ptr RawTH3 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetLineAttributes" c_th3_setlineattributes ::
+               Ptr RawTH3 -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetLineColor"
-               c_th3_setlinecolor :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetLineColor" c_th3_setlinecolor ::
+               Ptr RawTH3 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetLineStyle"
-               c_th3_setlinestyle :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetLineStyle" c_th3_setlinestyle ::
+               Ptr RawTH3 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetLineWidth"
-               c_th3_setlinewidth :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetLineWidth" c_th3_setlinewidth ::
+               Ptr RawTH3 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetFillColor"
-               c_th3_setfillcolor :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetFillColor" c_th3_setfillcolor ::
+               Ptr RawTH3 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetFillStyle"
-               c_th3_setfillstyle :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetFillStyle" c_th3_setfillstyle ::
+               Ptr RawTH3 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMarkerColor"
-               c_th3_getmarkercolor :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMarkerColor" c_th3_getmarkercolor ::
+               Ptr RawTH3 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMarkerStyle"
-               c_th3_getmarkerstyle :: Ptr RawTH3 -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMarkerStyle" c_th3_getmarkerstyle ::
+               Ptr RawTH3 -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetMarkerSize"
-               c_th3_getmarkersize :: Ptr RawTH3 -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_GetMarkerSize" c_th3_getmarkersize ::
+               Ptr RawTH3 -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3.h TH3_ResetAttMarker"
-               c_th3_resetattmarker :: Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_ResetAttMarker" c_th3_resetattmarker ::
+               Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetMarkerAttributes"
-               c_th3_setmarkerattributes :: Ptr RawTH3 -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetMarkerAttributes" c_th3_setmarkerattributes
+               :: Ptr RawTH3 -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetMarkerColor"
-               c_th3_setmarkercolor :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetMarkerColor" c_th3_setmarkercolor ::
+               Ptr RawTH3 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetMarkerStyle"
-               c_th3_setmarkerstyle :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetMarkerStyle" c_th3_setmarkerstyle ::
+               Ptr RawTH3 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SetMarkerSize"
-               c_th3_setmarkersize :: Ptr RawTH3 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_SetMarkerSize" c_th3_setmarkersize ::
+               Ptr RawTH3 -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Draw" c_th3_draw ::
-               Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Clear"
+               c_th3_clear :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FindObject"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Draw"
+               c_th3_draw :: Ptr RawTH3 -> CString -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FindObject"
                c_th3_findobject :: Ptr RawTH3 -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_GetName"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_GetName"
                c_th3_getname :: Ptr RawTH3 -> IO CString
 
-foreign import ccall safe "HROOTHistTH3.h TH3_IsA" c_th3_isa ::
-               Ptr RawTH3 -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH3.h TH3_IsA"
+               c_th3_isa :: Ptr RawTH3 -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Paint" c_th3_paint ::
-               Ptr RawTH3 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Paint"
+               c_th3_paint :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_printObj"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_printObj"
                c_th3_printobj :: Ptr RawTH3 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_SaveAs" c_th3_saveas
-               :: Ptr RawTH3 -> CString -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_SaveAs"
+               c_th3_saveas :: Ptr RawTH3 -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Write" c_th3_write ::
-               Ptr RawTH3 -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Write"
+               c_th3_write :: Ptr RawTH3 -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_delete" c_th3_delete
-               :: Ptr RawTH3 -> IO ()
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Write_"
+               c_th3_write_ :: Ptr RawTH3 -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_fill3" c_th3_fill3 ::
+foreign import ccall interruptible "HROOTHistTH3.h TH3_delete"
+               c_th3_delete :: Ptr RawTH3 -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3.h TH3_fill3"
+               c_th3_fill3 ::
                Ptr RawTH3 -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_fill3w" c_th3_fill3w
-               ::
+foreign import ccall interruptible "HROOTHistTH3.h TH3_fill3w"
+               c_th3_fill3w ::
                Ptr RawTH3 -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3.h TH3_FitSlicesZ"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_FitSlicesZ"
                c_th3_fitslicesz ::
                Ptr RawTH3 ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CInt -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3.h TH3_getCorrelationFactor3"
                c_th3_getcorrelationfactor3 ::
                Ptr RawTH3 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_getCovariance3"
-               c_th3_getcovariance3 :: Ptr RawTH3 -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_getCovariance3" c_th3_getcovariance3 ::
+               Ptr RawTH3 -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3.h TH3_tH3ProjectionX"
-               c_th3_th3projectionx ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_tH3_ProjectionX" c_th3_th3_projectionx ::
                Ptr RawTH3 ->
                  CString ->
                    CInt -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH1D)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_tH3ProjectionY"
-               c_th3_th3projectiony ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_tH3_ProjectionY" c_th3_th3_projectiony ::
                Ptr RawTH3 ->
                  CString ->
                    CInt -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH1D)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_tH3ProjectionZ"
-               c_th3_th3projectionz ::
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_tH3_ProjectionZ" c_th3_th3_projectionz ::
                Ptr RawTH3 ->
                  CString ->
                    CInt -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH1D)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_tH3Project3D"
-               c_th3_th3project3d :: Ptr RawTH3 -> CString -> IO (Ptr RawTH1)
+foreign import ccall interruptible
+               "HROOTHistTH3.h TH3_tH3_Project3D" c_th3_th3_project3d ::
+               Ptr RawTH3 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_rebinX3"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_rebinX3"
                c_th3_rebinx3 :: Ptr RawTH3 -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_rebinY3"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_rebinY3"
                c_th3_rebiny3 :: Ptr RawTH3 -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_rebinZ3"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_rebinZ3"
                c_th3_rebinz3 :: Ptr RawTH3 -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3.h TH3_Rebin3D"
+foreign import ccall interruptible "HROOTHistTH3.h TH3_Rebin3D"
                c_th3_rebin3d ::
                Ptr RawTH3 -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH3)
diff --git a/src/HROOT/Hist/TH3/Implementation.hs b/src/HROOT/Hist/TH3/Implementation.hs
--- a/src/HROOT/Hist/TH3/Implementation.hs
+++ b/src/HROOT/Hist/TH3/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH3.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH3.RawType
 import HROOT.Hist.TH3.FFI
 import HROOT.Hist.TH3.Interface
 import HROOT.Hist.TH3.Cast
+import HROOT.Hist.TH3.RawType
+import HROOT.Hist.TH3.Cast
+import HROOT.Hist.TH3.Interface
 import HROOT.Core.TDirectory.RawType
 import HROOT.Core.TDirectory.Cast
 import HROOT.Core.TDirectory.Interface
@@ -51,11 +60,11 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITH3 TH3 where
+instance () => ITH3 (TH3) where
         fill3 = xform3 c_th3_fill3
         fill3w = xform4 c_th3_fill3w
         fitSlicesZ = xform7 c_th3_fitslicesz
@@ -66,11 +75,10 @@
         rebinZ3 = xform2 c_th3_rebinz3
         rebin3D = xform4 c_th3_rebin3d
 
-instance ITH1 TH3 where
+instance () => ITH1 (TH3) where
         add = xform2 c_th3_add
         addBinContent = xform2 c_th3_addbincontent
         chi2Test = xform3 c_th3_chi2test
-        computeIntegral = xform0 c_th3_computeintegral
         directoryAutoAdd = xform1 c_th3_directoryautoadd
         divide = xform5 c_th3_divide
         drawCopyTH1 = xform1 c_th3_drawcopyth1
@@ -142,9 +150,6 @@
         getRMS = xform1 c_th3_getrms
         getRMSError = xform1 c_th3_getrmserror
         getSkewness = xform1 c_th3_getskewness
-        integral1 = xform3 c_th3_integral1
-        interpolate1 = xform1 c_th3_interpolate1
-        interpolate2 = xform2 c_th3_interpolate2
         interpolate3 = xform3 c_th3_interpolate3
         kolmogorovTest = xform2 c_th3_kolmogorovtest
         labelsDeflate = xform1 c_th3_labelsdeflate
@@ -199,14 +204,14 @@
         smooth = xform2 c_th3_smooth
         sumw2 = xform0 c_th3_sumw2
 
-instance ITAtt3D TH3
+instance () => ITAtt3D (TH3) where
 
-instance ITNamed TH3 where
+instance () => ITNamed (TH3) where
         setName = xform1 c_th3_setname
         setNameTitle = xform2 c_th3_setnametitle
         setTitle = xform1 c_th3_settitle
 
-instance ITAttLine TH3 where
+instance () => ITAttLine (TH3) where
         getLineColor = xform0 c_th3_getlinecolor
         getLineStyle = xform0 c_th3_getlinestyle
         getLineWidth = xform0 c_th3_getlinewidth
@@ -216,11 +221,11 @@
         setLineStyle = xform1 c_th3_setlinestyle
         setLineWidth = xform1 c_th3_setlinewidth
 
-instance ITAttFill TH3 where
+instance () => ITAttFill (TH3) where
         setFillColor = xform1 c_th3_setfillcolor
         setFillStyle = xform1 c_th3_setfillstyle
 
-instance ITAttMarker TH3 where
+instance () => ITAttMarker (TH3) where
         getMarkerColor = xform0 c_th3_getmarkercolor
         getMarkerStyle = xform0 c_th3_getmarkerstyle
         getMarkerSize = xform0 c_th3_getmarkersize
@@ -230,7 +235,8 @@
         setMarkerStyle = xform1 c_th3_setmarkerstyle
         setMarkerSize = xform1 c_th3_setmarkersize
 
-instance ITObject TH3 where
+instance () => ITObject (TH3) where
+        clear = xform1 c_th3_clear
         draw = xform1 c_th3_draw
         findObject = xform1 c_th3_findobject
         getName = xform0 c_th3_getname
@@ -239,24 +245,25 @@
         printObj = xform1 c_th3_printobj
         saveAs = xform2 c_th3_saveas
         write = xform3 c_th3_write
+        write_ = xform0 c_th3_write_
 
-instance IDeletable TH3 where
+instance () => IDeletable (TH3) where
         delete = xform0 c_th3_delete
 
-tH3ProjectionX ::
-                 (Castable c1 CString, Castable c0 CString) =>
-                 TH3 -> c0 -> CInt -> CInt -> CInt -> CInt -> c1 -> IO TH1D
-tH3ProjectionX = xform6 c_th3_th3projectionx
+tH3_ProjectionX ::
+                  (Castable c1 CString, Castable c0 CString) =>
+                  TH3 -> c0 -> CInt -> CInt -> CInt -> CInt -> c1 -> IO TH1D
+tH3_ProjectionX = xform6 c_th3_th3_projectionx
 
-tH3ProjectionY ::
-                 (Castable c1 CString, Castable c0 CString) =>
-                 TH3 -> c0 -> CInt -> CInt -> CInt -> CInt -> c1 -> IO TH1D
-tH3ProjectionY = xform6 c_th3_th3projectiony
+tH3_ProjectionY ::
+                  (Castable c1 CString, Castable c0 CString) =>
+                  TH3 -> c0 -> CInt -> CInt -> CInt -> CInt -> c1 -> IO TH1D
+tH3_ProjectionY = xform6 c_th3_th3_projectiony
 
-tH3ProjectionZ ::
-                 (Castable c1 CString, Castable c0 CString) =>
-                 TH3 -> c0 -> CInt -> CInt -> CInt -> CInt -> c1 -> IO TH1D
-tH3ProjectionZ = xform6 c_th3_th3projectionz
+tH3_ProjectionZ ::
+                  (Castable c1 CString, Castable c0 CString) =>
+                  TH3 -> c0 -> CInt -> CInt -> CInt -> CInt -> c1 -> IO TH1D
+tH3_ProjectionZ = xform6 c_th3_th3_projectionz
 
-tH3Project3D :: Castable c0 CString => TH3 -> c0 -> IO TH1
-tH3Project3D = xform1 c_th3_th3project3d
+tH3_Project3D :: (Castable c0 CString) => TH3 -> c0 -> IO TH1
+tH3_Project3D = xform1 c_th3_th3_project3d
diff --git a/src/HROOT/Hist/TH3/Interface.hs b/src/HROOT/Hist/TH3/Interface.hs
--- a/src/HROOT/Hist/TH3/Interface.hs
+++ b/src/HROOT/Hist/TH3/Interface.hs
@@ -4,37 +4,37 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH3.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.TH3.RawType
-import HROOT.Hist.TH1D.RawType
-import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH1.Interface
 import HROOT.Core.TAtt3D.Interface
-import {-# SOURCE #-} HROOT.Hist.TF1.Interface
+import HROOT.Hist.TF1.Interface
 
 class (ITH1 a, ITAtt3D a) => ITH3 a where
-        fill3 :: a -> CDouble -> CDouble -> CDouble -> IO CInt
+        fill3 :: () => a -> CDouble -> CDouble -> CDouble -> IO CInt
         
-        fill3w :: a -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
+        fill3w ::
+                 () => a -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
         
         fitSlicesZ ::
                      (Castable c1 CString, ITF1 c0, FPtr c0) =>
                      a -> c0 -> CInt -> CInt -> CInt -> CInt -> CInt -> c1 -> IO ()
         
-        getCorrelationFactor3 :: a -> CInt -> CInt -> IO CDouble
+        getCorrelationFactor3 :: () => a -> CInt -> CInt -> IO CDouble
         
-        getCovariance3 :: a -> CInt -> CInt -> IO CDouble
+        getCovariance3 :: () => a -> CInt -> CInt -> IO CDouble
         
-        rebinX3 :: Castable c0 CString => a -> CInt -> c0 -> IO TH3
+        rebinX3 :: (Castable c0 CString) => a -> CInt -> c0 -> IO TH3
         
-        rebinY3 :: Castable c0 CString => a -> CInt -> c0 -> IO TH3
+        rebinY3 :: (Castable c0 CString) => a -> CInt -> c0 -> IO TH3
         
-        rebinZ3 :: Castable c0 CString => a -> CInt -> c0 -> IO TH3
+        rebinZ3 :: (Castable c0 CString) => a -> CInt -> c0 -> IO TH3
         
         rebin3D ::
-                  Castable c0 CString => a -> CInt -> CInt -> CInt -> c0 -> IO TH3
+                  (Castable c0 CString) => a -> CInt -> CInt -> CInt -> c0 -> IO TH3
 
 upcastTH3 :: forall a . (FPtr a, ITH3 a) => a -> TH3
 upcastTH3 h
diff --git a/src/HROOT/Hist/TH3/RawType.hs b/src/HROOT/Hist/TH3/RawType.hs
--- a/src/HROOT/Hist/TH3/RawType.hs
+++ b/src/HROOT/Hist/TH3/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH3
 
 newtype TH3 = TH3 (Ptr RawTH3)
-            deriving (Eq, Ord, Show)
+                deriving (Eq, Ord, Show)
 
-instance FPtr TH3 where
+instance () => FPtr (TH3) where
         type Raw TH3 = RawTH3
         get_fptr (TH3 ptr) = ptr
         cast_fptr_to_obj = TH3
diff --git a/src/HROOT/Hist/TH3C/Cast.hs b/src/HROOT/Hist/TH3C/Cast.hs
--- a/src/HROOT/Hist/TH3C/Cast.hs
+++ b/src/HROOT/Hist/TH3C/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH3C.RawType
 import HROOT.Hist.TH3C.Interface
 
-instance (ITH3C a, FPtr a) => Castable a (Ptr RawTH3C) where
+instance (ITH3C a, FPtr a) => Castable (a) (Ptr RawTH3C) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH3C (Ptr RawTH3C) where
+instance () => Castable (TH3C) (Ptr RawTH3C) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH3C/FFI.hsc b/src/HROOT/Hist/TH3C/FFI.hsc
--- a/src/HROOT/Hist/TH3C/FFI.hsc
+++ b/src/HROOT/Hist/TH3C/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH3C.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH3C.RawType
+import HROOT.Hist.TH3C.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH3.RawType
@@ -13,558 +16,646 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_fill3" c_th3c_fill3
-               :: Ptr RawTH3C -> CDouble -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_fill3"
+               c_th3c_fill3 ::
+               Ptr RawTH3C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_fill3w"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_fill3w"
                c_th3c_fill3w ::
                Ptr RawTH3C -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FitSlicesZ"
-               c_th3c_fitslicesz ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FitSlicesZ" c_th3c_fitslicesz ::
                Ptr RawTH3C ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CInt -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3C.h TH3C_getCorrelationFactor3"
                c_th3c_getcorrelationfactor3 ::
                Ptr RawTH3C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getCovariance3"
-               c_th3c_getcovariance3 :: Ptr RawTH3C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getCovariance3" c_th3c_getcovariance3 ::
+               Ptr RawTH3C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_rebinX3"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_rebinX3"
                c_th3c_rebinx3 :: Ptr RawTH3C -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_rebinY3"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_rebinY3"
                c_th3c_rebiny3 :: Ptr RawTH3C -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_rebinZ3"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_rebinZ3"
                c_th3c_rebinz3 :: Ptr RawTH3C -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Rebin3D"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Rebin3D"
                c_th3c_rebin3d ::
                Ptr RawTH3C -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Add" c_th3c_add ::
-               Ptr RawTH3C -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Add"
+               c_th3c_add :: Ptr RawTH3C -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_AddBinContent"
-               c_th3c_addbincontent :: Ptr RawTH3C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_AddBinContent" c_th3c_addbincontent ::
+               Ptr RawTH3C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Chi2Test"
                c_th3c_chi2test ::
-               Ptr RawTH3C -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3C.h TH3C_ComputeIntegral"
-               c_th3c_computeintegral :: Ptr RawTH3C -> IO CDouble
+               Ptr RawTH3C -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_DirectoryAutoAdd"
-               c_th3c_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_DirectoryAutoAdd" c_th3c_directoryautoadd ::
                Ptr RawTH3C -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Divide"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Divide"
                c_th3c_divide ::
                Ptr RawTH3C ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_drawCopyTH1"
-               c_th3c_drawcopyth1 :: Ptr RawTH3C -> CString -> IO (Ptr RawTH3C)
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_drawCopyTH1" c_th3c_drawcopyth1 ::
+               Ptr RawTH3C -> CString -> IO (Ptr RawTH3C)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_DrawNormalized"
-               c_th3c_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_DrawNormalized" c_th3c_drawnormalized ::
                Ptr RawTH3C -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_drawPanelTH1"
-               c_th3c_drawpanelth1 :: Ptr RawTH3C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_drawPanelTH1" c_th3c_drawpanelth1 ::
+               Ptr RawTH3C -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_BufferEmpty"
-               c_th3c_bufferempty :: Ptr RawTH3C -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_BufferEmpty" c_th3c_bufferempty ::
+               Ptr RawTH3C -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_evalF" c_th3c_evalf
-               :: Ptr RawTH3C -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_evalF"
+               c_th3c_evalf :: Ptr RawTH3C -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FFT" c_th3c_fft ::
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_FFT"
+               c_th3c_fft ::
                Ptr RawTH3C -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_fill1" c_th3c_fill1
-               :: Ptr RawTH3C -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_fill1"
+               c_th3c_fill1 :: Ptr RawTH3C -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_fill1w"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_fill1w"
                c_th3c_fill1w :: Ptr RawTH3C -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_fillN1"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_fillN1"
                c_th3c_filln1 ::
-               Ptr RawTH3C ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH3C -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FillRandom"
-               c_th3c_fillrandom :: Ptr RawTH3C -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FillRandom" c_th3c_fillrandom ::
+               Ptr RawTH3C -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FindBin"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_FindBin"
                c_th3c_findbin ::
                Ptr RawTH3C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FindFixBin"
-               c_th3c_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FindFixBin" c_th3c_findfixbin ::
                Ptr RawTH3C -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FindFirstBinAbove"
-               c_th3c_findfirstbinabove ::
-               Ptr RawTH3C -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FindFirstBinAbove" c_th3c_findfirstbinabove
+               :: Ptr RawTH3C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FindLastBinAbove"
-               c_th3c_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FindLastBinAbove" c_th3c_findlastbinabove ::
                Ptr RawTH3C -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Fit" c_th3c_fit ::
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Fit"
+               c_th3c_fit ::
                Ptr RawTH3C ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FitPanelTH1"
-               c_th3c_fitpanelth1 :: Ptr RawTH3C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FitPanelTH1" c_th3c_fitpanelth1 ::
+               Ptr RawTH3C -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getNdivisionA"
-               c_th3c_getndivisiona :: Ptr RawTH3C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getNdivisionA" c_th3c_getndivisiona ::
+               Ptr RawTH3C -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getAxisColorA"
-               c_th3c_getaxiscolora :: Ptr RawTH3C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getAxisColorA" c_th3c_getaxiscolora ::
+               Ptr RawTH3C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getLabelColorA"
-               c_th3c_getlabelcolora :: Ptr RawTH3C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getLabelColorA" c_th3c_getlabelcolora ::
+               Ptr RawTH3C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getLabelFontA"
-               c_th3c_getlabelfonta :: Ptr RawTH3C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getLabelFontA" c_th3c_getlabelfonta ::
+               Ptr RawTH3C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getLabelOffsetA"
-               c_th3c_getlabeloffseta :: Ptr RawTH3C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getLabelOffsetA" c_th3c_getlabeloffseta ::
+               Ptr RawTH3C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getLabelSizeA"
-               c_th3c_getlabelsizea :: Ptr RawTH3C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getLabelSizeA" c_th3c_getlabelsizea ::
+               Ptr RawTH3C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getTitleFontA"
-               c_th3c_gettitlefonta :: Ptr RawTH3C -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getTitleFontA" c_th3c_gettitlefonta ::
+               Ptr RawTH3C -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getTitleOffsetA"
-               c_th3c_gettitleoffseta :: Ptr RawTH3C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getTitleOffsetA" c_th3c_gettitleoffseta ::
+               Ptr RawTH3C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getTitleSizeA"
-               c_th3c_gettitlesizea :: Ptr RawTH3C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getTitleSizeA" c_th3c_gettitlesizea ::
+               Ptr RawTH3C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getTickLengthA"
-               c_th3c_getticklengtha :: Ptr RawTH3C -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getTickLengthA" c_th3c_getticklengtha ::
+               Ptr RawTH3C -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBarOffset"
-               c_th3c_getbaroffset :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBarOffset" c_th3c_getbaroffset ::
+               Ptr RawTH3C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBarWidth"
-               c_th3c_getbarwidth :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBarWidth" c_th3c_getbarwidth ::
+               Ptr RawTH3C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetContour"
-               c_th3c_getcontour :: Ptr RawTH3C -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetContour" c_th3c_getcontour ::
+               Ptr RawTH3C -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetContourLevel"
-               c_th3c_getcontourlevel :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetContourLevel" c_th3c_getcontourlevel ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetContourLevelPad"
-               c_th3c_getcontourlevelpad :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetContourLevelPad" c_th3c_getcontourlevelpad
+               :: Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBin"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetBin"
                c_th3c_getbin :: Ptr RawTH3C -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinCenter"
-               c_th3c_getbincenter :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinCenter" c_th3c_getbincenter ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinContent1"
-               c_th3c_getbincontent1 :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinContent1" c_th3c_getbincontent1 ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinContent2"
-               c_th3c_getbincontent2 :: Ptr RawTH3C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinContent2" c_th3c_getbincontent2 ::
+               Ptr RawTH3C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinContent3"
-               c_th3c_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinContent3" c_th3c_getbincontent3 ::
                Ptr RawTH3C -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinError1"
-               c_th3c_getbinerror1 :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinError1" c_th3c_getbinerror1 ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinError2"
-               c_th3c_getbinerror2 :: Ptr RawTH3C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinError2" c_th3c_getbinerror2 ::
+               Ptr RawTH3C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinError3"
-               c_th3c_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinError3" c_th3c_getbinerror3 ::
                Ptr RawTH3C -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinLowEdge"
-               c_th3c_getbinlowedge :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinLowEdge" c_th3c_getbinlowedge ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetBinWidth"
-               c_th3c_getbinwidth :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetBinWidth" c_th3c_getbinwidth ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetCellContent"
-               c_th3c_getcellcontent :: Ptr RawTH3C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetCellContent" c_th3c_getcellcontent ::
+               Ptr RawTH3C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetCellError"
-               c_th3c_getcellerror :: Ptr RawTH3C -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetCellError" c_th3c_getcellerror ::
+               Ptr RawTH3C -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetEntries"
-               c_th3c_getentries :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetEntries" c_th3c_getentries ::
+               Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3C.h TH3C_GetEffectiveEntries"
                c_th3c_geteffectiveentries :: Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetFunction"
-               c_th3c_getfunction :: Ptr RawTH3C -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetFunction" c_th3c_getfunction ::
+               Ptr RawTH3C -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetDimension"
-               c_th3c_getdimension :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetDimension" c_th3c_getdimension ::
+               Ptr RawTH3C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetKurtosis"
-               c_th3c_getkurtosis :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetKurtosis" c_th3c_getkurtosis ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetLowEdge"
-               c_th3c_getlowedge :: Ptr RawTH3C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetLowEdge" c_th3c_getlowedge ::
+               Ptr RawTH3C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getMaximumTH1"
-               c_th3c_getmaximumth1 :: Ptr RawTH3C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getMaximumTH1" c_th3c_getmaximumth1 ::
+               Ptr RawTH3C -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMaximumBin"
-               c_th3c_getmaximumbin :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMaximumBin" c_th3c_getmaximumbin ::
+               Ptr RawTH3C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMaximumStored"
-               c_th3c_getmaximumstored :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMaximumStored" c_th3c_getmaximumstored ::
+               Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getMinimumTH1"
-               c_th3c_getminimumth1 :: Ptr RawTH3C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getMinimumTH1" c_th3c_getminimumth1 ::
+               Ptr RawTH3C -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMinimumBin"
-               c_th3c_getminimumbin :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMinimumBin" c_th3c_getminimumbin ::
+               Ptr RawTH3C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMinimumStored"
-               c_th3c_getminimumstored :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMinimumStored" c_th3c_getminimumstored ::
+               Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMean"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetMean"
                c_th3c_getmean :: Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMeanError"
-               c_th3c_getmeanerror :: Ptr RawTH3C -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMeanError" c_th3c_getmeanerror ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetNbinsX"
                c_th3c_getnbinsx :: Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetNbinsY"
                c_th3c_getnbinsy :: Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetNbinsZ"
                c_th3c_getnbinsz :: Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_getQuantilesTH1"
-               c_th3c_getquantilesth1 ::
-               Ptr RawTH3C -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_getQuantilesTH1" c_th3c_getquantilesth1 ::
+               Ptr RawTH3C -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetRandom"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetRandom"
                c_th3c_getrandom :: Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetStats"
-               c_th3c_getstats :: Ptr RawTH3C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetStats"
+               c_th3c_getstats :: Ptr RawTH3C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetSumOfWeights"
-               c_th3c_getsumofweights :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetSumOfWeights" c_th3c_getsumofweights ::
+               Ptr RawTH3C -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetSumw2"
                c_th3c_getsumw2 :: Ptr RawTH3C -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetSumw2N"
                c_th3c_getsumw2n :: Ptr RawTH3C -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetRMS"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetRMS"
                c_th3c_getrms :: Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetRMSError"
-               c_th3c_getrmserror :: Ptr RawTH3C -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetSkewness"
-               c_th3c_getskewness :: Ptr RawTH3C -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3C.h TH3C_integral1"
-               c_th3c_integral1 ::
-               Ptr RawTH3C -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3C.h TH3C_interpolate1"
-               c_th3c_interpolate1 :: Ptr RawTH3C -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetRMSError" c_th3c_getrmserror ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_interpolate2"
-               c_th3c_interpolate2 ::
-               Ptr RawTH3C -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetSkewness" c_th3c_getskewness ::
+               Ptr RawTH3C -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_interpolate3"
-               c_th3c_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_interpolate3" c_th3c_interpolate3 ::
                Ptr RawTH3C -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_KolmogorovTest"
-               c_th3c_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_KolmogorovTest" c_th3c_kolmogorovtest ::
                Ptr RawTH3C -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_LabelsDeflate"
-               c_th3c_labelsdeflate :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_LabelsDeflate" c_th3c_labelsdeflate ::
+               Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_LabelsInflate"
-               c_th3c_labelsinflate :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_LabelsInflate" c_th3c_labelsinflate ::
+               Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_LabelsOption"
-               c_th3c_labelsoption :: Ptr RawTH3C -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_LabelsOption" c_th3c_labelsoption ::
+               Ptr RawTH3C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_multiflyF"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_multiflyF"
                c_th3c_multiflyf :: Ptr RawTH3C -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Multiply"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Multiply"
                c_th3c_multiply ::
                Ptr RawTH3C ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_PutStats"
-               c_th3c_putstats :: Ptr RawTH3C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_PutStats"
+               c_th3c_putstats :: Ptr RawTH3C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Rebin" c_th3c_rebin
-               ::
-               Ptr RawTH3C -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Rebin"
+               c_th3c_rebin ::
+               Ptr RawTH3C -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_RebinAxis"
                c_th3c_rebinaxis :: Ptr RawTH3C -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Rebuild"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Rebuild"
                c_th3c_rebuild :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_RecursiveRemove"
-               c_th3c_recursiveremove :: Ptr RawTH3C -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_RecursiveRemove" c_th3c_recursiveremove ::
+               Ptr RawTH3C -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Reset" c_th3c_reset
-               :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Reset"
+               c_th3c_reset :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_ResetStats"
-               c_th3c_resetstats :: Ptr RawTH3C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_ResetStats" c_th3c_resetstats ::
+               Ptr RawTH3C -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Scale" c_th3c_scale
-               :: Ptr RawTH3C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Scale"
+               c_th3c_scale :: Ptr RawTH3C -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setAxisColorA"
-               c_th3c_setaxiscolora :: Ptr RawTH3C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setAxisColorA" c_th3c_setaxiscolora ::
+               Ptr RawTH3C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetAxisRange"
-               c_th3c_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetAxisRange" c_th3c_setaxisrange ::
                Ptr RawTH3C -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetBarOffset"
-               c_th3c_setbaroffset :: Ptr RawTH3C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetBarOffset" c_th3c_setbaroffset ::
+               Ptr RawTH3C -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetBarWidth"
-               c_th3c_setbarwidth :: Ptr RawTH3C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetBarWidth" c_th3c_setbarwidth ::
+               Ptr RawTH3C -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBinContent1"
-               c_th3c_setbincontent1 :: Ptr RawTH3C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setBinContent1" c_th3c_setbincontent1 ::
+               Ptr RawTH3C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBinContent2"
-               c_th3c_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setBinContent2" c_th3c_setbincontent2 ::
                Ptr RawTH3C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBinContent3"
-               c_th3c_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setBinContent3" c_th3c_setbincontent3 ::
                Ptr RawTH3C -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBinError1"
-               c_th3c_setbinerror1 :: Ptr RawTH3C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setBinError1" c_th3c_setbinerror1 ::
+               Ptr RawTH3C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBinError2"
-               c_th3c_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setBinError2" c_th3c_setbinerror2 ::
                Ptr RawTH3C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBinError3"
-               c_th3c_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setBinError3" c_th3c_setbinerror3 ::
                Ptr RawTH3C -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBins1"
-               c_th3c_setbins1 :: Ptr RawTH3C -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_setBins1"
+               c_th3c_setbins1 :: Ptr RawTH3C -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBins2"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_setBins2"
                c_th3c_setbins2 ::
-               Ptr RawTH3C ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH3C -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setBins3"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_setBins3"
                c_th3c_setbins3 ::
                Ptr RawTH3C ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetBinsLength"
-               c_th3c_setbinslength :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetBinsLength" c_th3c_setbinslength ::
+               Ptr RawTH3C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetBuffer"
                c_th3c_setbuffer :: Ptr RawTH3C -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetCellContent"
-               c_th3c_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetCellContent" c_th3c_setcellcontent ::
                Ptr RawTH3C -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetContent"
-               c_th3c_setcontent :: Ptr RawTH3C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetContent" c_th3c_setcontent ::
+               Ptr RawTH3C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetContour"
-               c_th3c_setcontour :: Ptr RawTH3C -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetContour" c_th3c_setcontour ::
+               Ptr RawTH3C -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetContourLevel"
-               c_th3c_setcontourlevel :: Ptr RawTH3C -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetContourLevel" c_th3c_setcontourlevel ::
+               Ptr RawTH3C -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetDirectory"
-               c_th3c_setdirectory :: Ptr RawTH3C -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetDirectory" c_th3c_setdirectory ::
+               Ptr RawTH3C -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetEntries"
-               c_th3c_setentries :: Ptr RawTH3C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetEntries" c_th3c_setentries ::
+               Ptr RawTH3C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetError"
-               c_th3c_seterror :: Ptr RawTH3C -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetError"
+               c_th3c_seterror :: Ptr RawTH3C -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setLabelColorA"
-               c_th3c_setlabelcolora :: Ptr RawTH3C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setLabelColorA" c_th3c_setlabelcolora ::
+               Ptr RawTH3C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setLabelSizeA"
-               c_th3c_setlabelsizea :: Ptr RawTH3C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setLabelSizeA" c_th3c_setlabelsizea ::
+               Ptr RawTH3C -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setLabelFontA"
-               c_th3c_setlabelfonta :: Ptr RawTH3C -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setLabelFontA" c_th3c_setlabelfonta ::
+               Ptr RawTH3C -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_setLabelOffsetA"
-               c_th3c_setlabeloffseta ::
-               Ptr RawTH3C -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_setLabelOffsetA" c_th3c_setlabeloffseta ::
+               Ptr RawTH3C -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetMaximum"
-               c_th3c_setmaximum :: Ptr RawTH3C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetMaximum" c_th3c_setmaximum ::
+               Ptr RawTH3C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetMinimum"
-               c_th3c_setminimum :: Ptr RawTH3C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetMinimum" c_th3c_setminimum ::
+               Ptr RawTH3C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetNormFactor"
-               c_th3c_setnormfactor :: Ptr RawTH3C -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetNormFactor" c_th3c_setnormfactor ::
+               Ptr RawTH3C -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetStats"
-               c_th3c_setstats :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetStats"
+               c_th3c_setstats :: Ptr RawTH3C -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetOption"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetOption"
                c_th3c_setoption :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetXTitle"
                c_th3c_setxtitle :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetYTitle"
                c_th3c_setytitle :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetZTitle"
                c_th3c_setztitle :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_ShowBackground"
-               c_th3c_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_ShowBackground" c_th3c_showbackground ::
                Ptr RawTH3C -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_ShowPeaks"
                c_th3c_showpeaks ::
                Ptr RawTH3C -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Smooth"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Smooth"
                c_th3c_smooth :: Ptr RawTH3C -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Sumw2" c_th3c_sumw2
-               :: Ptr RawTH3C -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Sumw2"
+               c_th3c_sumw2 :: Ptr RawTH3C -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetName"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetName"
                c_th3c_setname :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetNameTitle"
-               c_th3c_setnametitle :: Ptr RawTH3C -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetNameTitle" c_th3c_setnametitle ::
+               Ptr RawTH3C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetTitle"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetTitle"
                c_th3c_settitle :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetLineColor"
-               c_th3c_getlinecolor :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetLineColor" c_th3c_getlinecolor ::
+               Ptr RawTH3C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetLineStyle"
-               c_th3c_getlinestyle :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetLineStyle" c_th3c_getlinestyle ::
+               Ptr RawTH3C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetLineWidth"
-               c_th3c_getlinewidth :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetLineWidth" c_th3c_getlinewidth ::
+               Ptr RawTH3C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_ResetAttLine"
-               c_th3c_resetattline :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_ResetAttLine" c_th3c_resetattline ::
+               Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetLineAttributes"
-               c_th3c_setlineattributes :: Ptr RawTH3C -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetLineAttributes" c_th3c_setlineattributes
+               :: Ptr RawTH3C -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetLineColor"
-               c_th3c_setlinecolor :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetLineColor" c_th3c_setlinecolor ::
+               Ptr RawTH3C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetLineStyle"
-               c_th3c_setlinestyle :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetLineStyle" c_th3c_setlinestyle ::
+               Ptr RawTH3C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetLineWidth"
-               c_th3c_setlinewidth :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetLineWidth" c_th3c_setlinewidth ::
+               Ptr RawTH3C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetFillColor"
-               c_th3c_setfillcolor :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetFillColor" c_th3c_setfillcolor ::
+               Ptr RawTH3C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetFillStyle"
-               c_th3c_setfillstyle :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetFillStyle" c_th3c_setfillstyle ::
+               Ptr RawTH3C -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMarkerColor"
-               c_th3c_getmarkercolor :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMarkerColor" c_th3c_getmarkercolor ::
+               Ptr RawTH3C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMarkerStyle"
-               c_th3c_getmarkerstyle :: Ptr RawTH3C -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMarkerStyle" c_th3c_getmarkerstyle ::
+               Ptr RawTH3C -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetMarkerSize"
-               c_th3c_getmarkersize :: Ptr RawTH3C -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_GetMarkerSize" c_th3c_getmarkersize ::
+               Ptr RawTH3C -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_ResetAttMarker"
-               c_th3c_resetattmarker :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_ResetAttMarker" c_th3c_resetattmarker ::
+               Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3C.h TH3C_SetMarkerAttributes"
                c_th3c_setmarkerattributes :: Ptr RawTH3C -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetMarkerColor"
-               c_th3c_setmarkercolor :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetMarkerColor" c_th3c_setmarkercolor ::
+               Ptr RawTH3C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetMarkerStyle"
-               c_th3c_setmarkerstyle :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetMarkerStyle" c_th3c_setmarkerstyle ::
+               Ptr RawTH3C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SetMarkerSize"
-               c_th3c_setmarkersize :: Ptr RawTH3C -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_SetMarkerSize" c_th3c_setmarkersize ::
+               Ptr RawTH3C -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Draw" c_th3c_draw
-               :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Clear"
+               c_th3c_clear :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_FindObject"
-               c_th3c_findobject :: Ptr RawTH3C -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Draw"
+               c_th3c_draw :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH3C.h TH3C_FindObject" c_th3c_findobject ::
+               Ptr RawTH3C -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetName"
                c_th3c_getname :: Ptr RawTH3C -> IO CString
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_IsA" c_th3c_isa ::
-               Ptr RawTH3C -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_IsA"
+               c_th3c_isa :: Ptr RawTH3C -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Paint" c_th3c_paint
-               :: Ptr RawTH3C -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Paint"
+               c_th3c_paint :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_printObj"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_printObj"
                c_th3c_printobj :: Ptr RawTH3C -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_SaveAs"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SaveAs"
                c_th3c_saveas :: Ptr RawTH3C -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_Write" c_th3c_write
-               :: Ptr RawTH3C -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Write"
+               c_th3c_write :: Ptr RawTH3C -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3C.h TH3C_delete"
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_Write_"
+               c_th3c_write_ :: Ptr RawTH3C -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_delete"
                c_th3c_delete :: Ptr RawTH3C -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_GetAt"
+               c_th3c_getat :: Ptr RawTH3C -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetArray"
+               c_th3c_setarray :: Ptr RawTH3C -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3C.h TH3C_SetAt"
+               c_th3c_setat :: Ptr RawTH3C -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH3C/Implementation.hs b/src/HROOT/Hist/TH3C/Implementation.hs
--- a/src/HROOT/Hist/TH3C/Implementation.hs
+++ b/src/HROOT/Hist/TH3C/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH3C.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH3C.RawType
 import HROOT.Hist.TH3C.FFI
 import HROOT.Hist.TH3C.Interface
 import HROOT.Hist.TH3C.Cast
+import HROOT.Hist.TH3C.RawType
+import HROOT.Hist.TH3C.Cast
+import HROOT.Hist.TH3C.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH3C TH3C
+instance () => ITH3C (TH3C) where
 
-instance ITH3 TH3C where
+instance () => ITH3 (TH3C) where
         fill3 = xform3 c_th3c_fill3
         fill3w = xform4 c_th3c_fill3w
         fitSlicesZ = xform7 c_th3c_fitslicesz
@@ -77,13 +86,12 @@
         rebinZ3 = xform2 c_th3c_rebinz3
         rebin3D = xform4 c_th3c_rebin3d
 
-instance ITArrayC TH3C
+instance () => ITArrayC (TH3C) where
 
-instance ITH1 TH3C where
+instance () => ITH1 (TH3C) where
         add = xform2 c_th3c_add
         addBinContent = xform2 c_th3c_addbincontent
         chi2Test = xform3 c_th3c_chi2test
-        computeIntegral = xform0 c_th3c_computeintegral
         directoryAutoAdd = xform1 c_th3c_directoryautoadd
         divide = xform5 c_th3c_divide
         drawCopyTH1 = xform1 c_th3c_drawcopyth1
@@ -155,9 +163,6 @@
         getRMS = xform1 c_th3c_getrms
         getRMSError = xform1 c_th3c_getrmserror
         getSkewness = xform1 c_th3c_getskewness
-        integral1 = xform3 c_th3c_integral1
-        interpolate1 = xform1 c_th3c_interpolate1
-        interpolate2 = xform2 c_th3c_interpolate2
         interpolate3 = xform3 c_th3c_interpolate3
         kolmogorovTest = xform2 c_th3c_kolmogorovtest
         labelsDeflate = xform1 c_th3c_labelsdeflate
@@ -212,14 +217,14 @@
         smooth = xform2 c_th3c_smooth
         sumw2 = xform0 c_th3c_sumw2
 
-instance ITAtt3D TH3C
+instance () => ITAtt3D (TH3C) where
 
-instance ITNamed TH3C where
+instance () => ITNamed (TH3C) where
         setName = xform1 c_th3c_setname
         setNameTitle = xform2 c_th3c_setnametitle
         setTitle = xform1 c_th3c_settitle
 
-instance ITAttLine TH3C where
+instance () => ITAttLine (TH3C) where
         getLineColor = xform0 c_th3c_getlinecolor
         getLineStyle = xform0 c_th3c_getlinestyle
         getLineWidth = xform0 c_th3c_getlinewidth
@@ -229,11 +234,11 @@
         setLineStyle = xform1 c_th3c_setlinestyle
         setLineWidth = xform1 c_th3c_setlinewidth
 
-instance ITAttFill TH3C where
+instance () => ITAttFill (TH3C) where
         setFillColor = xform1 c_th3c_setfillcolor
         setFillStyle = xform1 c_th3c_setfillstyle
 
-instance ITAttMarker TH3C where
+instance () => ITAttMarker (TH3C) where
         getMarkerColor = xform0 c_th3c_getmarkercolor
         getMarkerStyle = xform0 c_th3c_getmarkerstyle
         getMarkerSize = xform0 c_th3c_getmarkersize
@@ -243,7 +248,8 @@
         setMarkerStyle = xform1 c_th3c_setmarkerstyle
         setMarkerSize = xform1 c_th3c_setmarkersize
 
-instance ITObject TH3C where
+instance () => ITObject (TH3C) where
+        clear = xform1 c_th3c_clear
         draw = xform1 c_th3c_draw
         findObject = xform1 c_th3c_findobject
         getName = xform0 c_th3c_getname
@@ -252,8 +258,12 @@
         printObj = xform1 c_th3c_printobj
         saveAs = xform2 c_th3c_saveas
         write = xform3 c_th3c_write
+        write_ = xform0 c_th3c_write_
 
-instance IDeletable TH3C where
+instance () => IDeletable (TH3C) where
         delete = xform0 c_th3c_delete
 
-instance ITArray TH3C
+instance () => ITArray (TH3C) where
+        getAt = xform1 c_th3c_getat
+        setArray = xform1 c_th3c_setarray
+        setAt = xform2 c_th3c_setat
diff --git a/src/HROOT/Hist/TH3C/Interface.hs b/src/HROOT/Hist/TH3C/Interface.hs
--- a/src/HROOT/Hist/TH3C/Interface.hs
+++ b/src/HROOT/Hist/TH3C/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH3C.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH3.Interface
 import HROOT.Core.TArrayC.Interface
 
-class (ITH3 a, ITArrayC a) => ITH3C a
+class (ITH3 a, ITArrayC a) => ITH3C a where
 
 upcastTH3C :: forall a . (FPtr a, ITH3C a) => a -> TH3C
 upcastTH3C h
diff --git a/src/HROOT/Hist/TH3C/RawType.hs b/src/HROOT/Hist/TH3C/RawType.hs
--- a/src/HROOT/Hist/TH3C/RawType.hs
+++ b/src/HROOT/Hist/TH3C/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH3C
 
 newtype TH3C = TH3C (Ptr RawTH3C)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH3C where
+instance () => FPtr (TH3C) where
         type Raw TH3C = RawTH3C
         get_fptr (TH3C ptr) = ptr
         cast_fptr_to_obj = TH3C
diff --git a/src/HROOT/Hist/TH3D/Cast.hs b/src/HROOT/Hist/TH3D/Cast.hs
--- a/src/HROOT/Hist/TH3D/Cast.hs
+++ b/src/HROOT/Hist/TH3D/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH3D.RawType
 import HROOT.Hist.TH3D.Interface
 
-instance (ITH3D a, FPtr a) => Castable a (Ptr RawTH3D) where
+instance (ITH3D a, FPtr a) => Castable (a) (Ptr RawTH3D) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH3D (Ptr RawTH3D) where
+instance () => Castable (TH3D) (Ptr RawTH3D) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH3D/FFI.hsc b/src/HROOT/Hist/TH3D/FFI.hsc
--- a/src/HROOT/Hist/TH3D/FFI.hsc
+++ b/src/HROOT/Hist/TH3D/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH3D.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH3D.RawType
+import HROOT.Hist.TH3D.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH3.RawType
@@ -13,558 +16,646 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_fill3" c_th3d_fill3
-               :: Ptr RawTH3D -> CDouble -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_fill3"
+               c_th3d_fill3 ::
+               Ptr RawTH3D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_fill3w"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_fill3w"
                c_th3d_fill3w ::
                Ptr RawTH3D -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FitSlicesZ"
-               c_th3d_fitslicesz ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FitSlicesZ" c_th3d_fitslicesz ::
                Ptr RawTH3D ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CInt -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3D.h TH3D_getCorrelationFactor3"
                c_th3d_getcorrelationfactor3 ::
                Ptr RawTH3D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getCovariance3"
-               c_th3d_getcovariance3 :: Ptr RawTH3D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getCovariance3" c_th3d_getcovariance3 ::
+               Ptr RawTH3D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_rebinX3"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_rebinX3"
                c_th3d_rebinx3 :: Ptr RawTH3D -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_rebinY3"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_rebinY3"
                c_th3d_rebiny3 :: Ptr RawTH3D -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_rebinZ3"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_rebinZ3"
                c_th3d_rebinz3 :: Ptr RawTH3D -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Rebin3D"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Rebin3D"
                c_th3d_rebin3d ::
                Ptr RawTH3D -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Add" c_th3d_add ::
-               Ptr RawTH3D -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Add"
+               c_th3d_add :: Ptr RawTH3D -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_AddBinContent"
-               c_th3d_addbincontent :: Ptr RawTH3D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_AddBinContent" c_th3d_addbincontent ::
+               Ptr RawTH3D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Chi2Test"
                c_th3d_chi2test ::
-               Ptr RawTH3D -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3D.h TH3D_ComputeIntegral"
-               c_th3d_computeintegral :: Ptr RawTH3D -> IO CDouble
+               Ptr RawTH3D -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_DirectoryAutoAdd"
-               c_th3d_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_DirectoryAutoAdd" c_th3d_directoryautoadd ::
                Ptr RawTH3D -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Divide"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Divide"
                c_th3d_divide ::
                Ptr RawTH3D ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_drawCopyTH1"
-               c_th3d_drawcopyth1 :: Ptr RawTH3D -> CString -> IO (Ptr RawTH3D)
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_drawCopyTH1" c_th3d_drawcopyth1 ::
+               Ptr RawTH3D -> CString -> IO (Ptr RawTH3D)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_DrawNormalized"
-               c_th3d_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_DrawNormalized" c_th3d_drawnormalized ::
                Ptr RawTH3D -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_drawPanelTH1"
-               c_th3d_drawpanelth1 :: Ptr RawTH3D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_drawPanelTH1" c_th3d_drawpanelth1 ::
+               Ptr RawTH3D -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_BufferEmpty"
-               c_th3d_bufferempty :: Ptr RawTH3D -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_BufferEmpty" c_th3d_bufferempty ::
+               Ptr RawTH3D -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_evalF" c_th3d_evalf
-               :: Ptr RawTH3D -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_evalF"
+               c_th3d_evalf :: Ptr RawTH3D -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FFT" c_th3d_fft ::
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_FFT"
+               c_th3d_fft ::
                Ptr RawTH3D -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_fill1" c_th3d_fill1
-               :: Ptr RawTH3D -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_fill1"
+               c_th3d_fill1 :: Ptr RawTH3D -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_fill1w"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_fill1w"
                c_th3d_fill1w :: Ptr RawTH3D -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_fillN1"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_fillN1"
                c_th3d_filln1 ::
-               Ptr RawTH3D ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH3D -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FillRandom"
-               c_th3d_fillrandom :: Ptr RawTH3D -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FillRandom" c_th3d_fillrandom ::
+               Ptr RawTH3D -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FindBin"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_FindBin"
                c_th3d_findbin ::
                Ptr RawTH3D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FindFixBin"
-               c_th3d_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FindFixBin" c_th3d_findfixbin ::
                Ptr RawTH3D -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FindFirstBinAbove"
-               c_th3d_findfirstbinabove ::
-               Ptr RawTH3D -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FindFirstBinAbove" c_th3d_findfirstbinabove
+               :: Ptr RawTH3D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FindLastBinAbove"
-               c_th3d_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FindLastBinAbove" c_th3d_findlastbinabove ::
                Ptr RawTH3D -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Fit" c_th3d_fit ::
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Fit"
+               c_th3d_fit ::
                Ptr RawTH3D ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FitPanelTH1"
-               c_th3d_fitpanelth1 :: Ptr RawTH3D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FitPanelTH1" c_th3d_fitpanelth1 ::
+               Ptr RawTH3D -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getNdivisionA"
-               c_th3d_getndivisiona :: Ptr RawTH3D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getNdivisionA" c_th3d_getndivisiona ::
+               Ptr RawTH3D -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getAxisColorA"
-               c_th3d_getaxiscolora :: Ptr RawTH3D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getAxisColorA" c_th3d_getaxiscolora ::
+               Ptr RawTH3D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getLabelColorA"
-               c_th3d_getlabelcolora :: Ptr RawTH3D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getLabelColorA" c_th3d_getlabelcolora ::
+               Ptr RawTH3D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getLabelFontA"
-               c_th3d_getlabelfonta :: Ptr RawTH3D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getLabelFontA" c_th3d_getlabelfonta ::
+               Ptr RawTH3D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getLabelOffsetA"
-               c_th3d_getlabeloffseta :: Ptr RawTH3D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getLabelOffsetA" c_th3d_getlabeloffseta ::
+               Ptr RawTH3D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getLabelSizeA"
-               c_th3d_getlabelsizea :: Ptr RawTH3D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getLabelSizeA" c_th3d_getlabelsizea ::
+               Ptr RawTH3D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getTitleFontA"
-               c_th3d_gettitlefonta :: Ptr RawTH3D -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getTitleFontA" c_th3d_gettitlefonta ::
+               Ptr RawTH3D -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getTitleOffsetA"
-               c_th3d_gettitleoffseta :: Ptr RawTH3D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getTitleOffsetA" c_th3d_gettitleoffseta ::
+               Ptr RawTH3D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getTitleSizeA"
-               c_th3d_gettitlesizea :: Ptr RawTH3D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getTitleSizeA" c_th3d_gettitlesizea ::
+               Ptr RawTH3D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getTickLengthA"
-               c_th3d_getticklengtha :: Ptr RawTH3D -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getTickLengthA" c_th3d_getticklengtha ::
+               Ptr RawTH3D -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBarOffset"
-               c_th3d_getbaroffset :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBarOffset" c_th3d_getbaroffset ::
+               Ptr RawTH3D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBarWidth"
-               c_th3d_getbarwidth :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBarWidth" c_th3d_getbarwidth ::
+               Ptr RawTH3D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetContour"
-               c_th3d_getcontour :: Ptr RawTH3D -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetContour" c_th3d_getcontour ::
+               Ptr RawTH3D -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetContourLevel"
-               c_th3d_getcontourlevel :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetContourLevel" c_th3d_getcontourlevel ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetContourLevelPad"
-               c_th3d_getcontourlevelpad :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetContourLevelPad" c_th3d_getcontourlevelpad
+               :: Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBin"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetBin"
                c_th3d_getbin :: Ptr RawTH3D -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinCenter"
-               c_th3d_getbincenter :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinCenter" c_th3d_getbincenter ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinContent1"
-               c_th3d_getbincontent1 :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinContent1" c_th3d_getbincontent1 ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinContent2"
-               c_th3d_getbincontent2 :: Ptr RawTH3D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinContent2" c_th3d_getbincontent2 ::
+               Ptr RawTH3D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinContent3"
-               c_th3d_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinContent3" c_th3d_getbincontent3 ::
                Ptr RawTH3D -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinError1"
-               c_th3d_getbinerror1 :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinError1" c_th3d_getbinerror1 ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinError2"
-               c_th3d_getbinerror2 :: Ptr RawTH3D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinError2" c_th3d_getbinerror2 ::
+               Ptr RawTH3D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinError3"
-               c_th3d_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinError3" c_th3d_getbinerror3 ::
                Ptr RawTH3D -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinLowEdge"
-               c_th3d_getbinlowedge :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinLowEdge" c_th3d_getbinlowedge ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetBinWidth"
-               c_th3d_getbinwidth :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetBinWidth" c_th3d_getbinwidth ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetCellContent"
-               c_th3d_getcellcontent :: Ptr RawTH3D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetCellContent" c_th3d_getcellcontent ::
+               Ptr RawTH3D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetCellError"
-               c_th3d_getcellerror :: Ptr RawTH3D -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetCellError" c_th3d_getcellerror ::
+               Ptr RawTH3D -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetEntries"
-               c_th3d_getentries :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetEntries" c_th3d_getentries ::
+               Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3D.h TH3D_GetEffectiveEntries"
                c_th3d_geteffectiveentries :: Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetFunction"
-               c_th3d_getfunction :: Ptr RawTH3D -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetFunction" c_th3d_getfunction ::
+               Ptr RawTH3D -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetDimension"
-               c_th3d_getdimension :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetDimension" c_th3d_getdimension ::
+               Ptr RawTH3D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetKurtosis"
-               c_th3d_getkurtosis :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetKurtosis" c_th3d_getkurtosis ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetLowEdge"
-               c_th3d_getlowedge :: Ptr RawTH3D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetLowEdge" c_th3d_getlowedge ::
+               Ptr RawTH3D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getMaximumTH1"
-               c_th3d_getmaximumth1 :: Ptr RawTH3D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getMaximumTH1" c_th3d_getmaximumth1 ::
+               Ptr RawTH3D -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMaximumBin"
-               c_th3d_getmaximumbin :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMaximumBin" c_th3d_getmaximumbin ::
+               Ptr RawTH3D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMaximumStored"
-               c_th3d_getmaximumstored :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMaximumStored" c_th3d_getmaximumstored ::
+               Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getMinimumTH1"
-               c_th3d_getminimumth1 :: Ptr RawTH3D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getMinimumTH1" c_th3d_getminimumth1 ::
+               Ptr RawTH3D -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMinimumBin"
-               c_th3d_getminimumbin :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMinimumBin" c_th3d_getminimumbin ::
+               Ptr RawTH3D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMinimumStored"
-               c_th3d_getminimumstored :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMinimumStored" c_th3d_getminimumstored ::
+               Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMean"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetMean"
                c_th3d_getmean :: Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMeanError"
-               c_th3d_getmeanerror :: Ptr RawTH3D -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMeanError" c_th3d_getmeanerror ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetNbinsX"
                c_th3d_getnbinsx :: Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetNbinsY"
                c_th3d_getnbinsy :: Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetNbinsZ"
                c_th3d_getnbinsz :: Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_getQuantilesTH1"
-               c_th3d_getquantilesth1 ::
-               Ptr RawTH3D -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_getQuantilesTH1" c_th3d_getquantilesth1 ::
+               Ptr RawTH3D -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetRandom"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetRandom"
                c_th3d_getrandom :: Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetStats"
-               c_th3d_getstats :: Ptr RawTH3D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetStats"
+               c_th3d_getstats :: Ptr RawTH3D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetSumOfWeights"
-               c_th3d_getsumofweights :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetSumOfWeights" c_th3d_getsumofweights ::
+               Ptr RawTH3D -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetSumw2"
                c_th3d_getsumw2 :: Ptr RawTH3D -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetSumw2N"
                c_th3d_getsumw2n :: Ptr RawTH3D -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetRMS"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetRMS"
                c_th3d_getrms :: Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetRMSError"
-               c_th3d_getrmserror :: Ptr RawTH3D -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetSkewness"
-               c_th3d_getskewness :: Ptr RawTH3D -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3D.h TH3D_integral1"
-               c_th3d_integral1 ::
-               Ptr RawTH3D -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3D.h TH3D_interpolate1"
-               c_th3d_interpolate1 :: Ptr RawTH3D -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetRMSError" c_th3d_getrmserror ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_interpolate2"
-               c_th3d_interpolate2 ::
-               Ptr RawTH3D -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetSkewness" c_th3d_getskewness ::
+               Ptr RawTH3D -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_interpolate3"
-               c_th3d_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_interpolate3" c_th3d_interpolate3 ::
                Ptr RawTH3D -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_KolmogorovTest"
-               c_th3d_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_KolmogorovTest" c_th3d_kolmogorovtest ::
                Ptr RawTH3D -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_LabelsDeflate"
-               c_th3d_labelsdeflate :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_LabelsDeflate" c_th3d_labelsdeflate ::
+               Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_LabelsInflate"
-               c_th3d_labelsinflate :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_LabelsInflate" c_th3d_labelsinflate ::
+               Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_LabelsOption"
-               c_th3d_labelsoption :: Ptr RawTH3D -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_LabelsOption" c_th3d_labelsoption ::
+               Ptr RawTH3D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_multiflyF"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_multiflyF"
                c_th3d_multiflyf :: Ptr RawTH3D -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Multiply"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Multiply"
                c_th3d_multiply ::
                Ptr RawTH3D ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_PutStats"
-               c_th3d_putstats :: Ptr RawTH3D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_PutStats"
+               c_th3d_putstats :: Ptr RawTH3D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Rebin" c_th3d_rebin
-               ::
-               Ptr RawTH3D -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Rebin"
+               c_th3d_rebin ::
+               Ptr RawTH3D -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_RebinAxis"
                c_th3d_rebinaxis :: Ptr RawTH3D -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Rebuild"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Rebuild"
                c_th3d_rebuild :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_RecursiveRemove"
-               c_th3d_recursiveremove :: Ptr RawTH3D -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_RecursiveRemove" c_th3d_recursiveremove ::
+               Ptr RawTH3D -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Reset" c_th3d_reset
-               :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Reset"
+               c_th3d_reset :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_ResetStats"
-               c_th3d_resetstats :: Ptr RawTH3D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_ResetStats" c_th3d_resetstats ::
+               Ptr RawTH3D -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Scale" c_th3d_scale
-               :: Ptr RawTH3D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Scale"
+               c_th3d_scale :: Ptr RawTH3D -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setAxisColorA"
-               c_th3d_setaxiscolora :: Ptr RawTH3D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setAxisColorA" c_th3d_setaxiscolora ::
+               Ptr RawTH3D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetAxisRange"
-               c_th3d_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetAxisRange" c_th3d_setaxisrange ::
                Ptr RawTH3D -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetBarOffset"
-               c_th3d_setbaroffset :: Ptr RawTH3D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetBarOffset" c_th3d_setbaroffset ::
+               Ptr RawTH3D -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetBarWidth"
-               c_th3d_setbarwidth :: Ptr RawTH3D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetBarWidth" c_th3d_setbarwidth ::
+               Ptr RawTH3D -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBinContent1"
-               c_th3d_setbincontent1 :: Ptr RawTH3D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setBinContent1" c_th3d_setbincontent1 ::
+               Ptr RawTH3D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBinContent2"
-               c_th3d_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setBinContent2" c_th3d_setbincontent2 ::
                Ptr RawTH3D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBinContent3"
-               c_th3d_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setBinContent3" c_th3d_setbincontent3 ::
                Ptr RawTH3D -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBinError1"
-               c_th3d_setbinerror1 :: Ptr RawTH3D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setBinError1" c_th3d_setbinerror1 ::
+               Ptr RawTH3D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBinError2"
-               c_th3d_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setBinError2" c_th3d_setbinerror2 ::
                Ptr RawTH3D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBinError3"
-               c_th3d_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setBinError3" c_th3d_setbinerror3 ::
                Ptr RawTH3D -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBins1"
-               c_th3d_setbins1 :: Ptr RawTH3D -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_setBins1"
+               c_th3d_setbins1 :: Ptr RawTH3D -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBins2"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_setBins2"
                c_th3d_setbins2 ::
-               Ptr RawTH3D ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH3D -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setBins3"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_setBins3"
                c_th3d_setbins3 ::
                Ptr RawTH3D ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetBinsLength"
-               c_th3d_setbinslength :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetBinsLength" c_th3d_setbinslength ::
+               Ptr RawTH3D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetBuffer"
                c_th3d_setbuffer :: Ptr RawTH3D -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetCellContent"
-               c_th3d_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetCellContent" c_th3d_setcellcontent ::
                Ptr RawTH3D -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetContent"
-               c_th3d_setcontent :: Ptr RawTH3D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetContent" c_th3d_setcontent ::
+               Ptr RawTH3D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetContour"
-               c_th3d_setcontour :: Ptr RawTH3D -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetContour" c_th3d_setcontour ::
+               Ptr RawTH3D -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetContourLevel"
-               c_th3d_setcontourlevel :: Ptr RawTH3D -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetContourLevel" c_th3d_setcontourlevel ::
+               Ptr RawTH3D -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetDirectory"
-               c_th3d_setdirectory :: Ptr RawTH3D -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetDirectory" c_th3d_setdirectory ::
+               Ptr RawTH3D -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetEntries"
-               c_th3d_setentries :: Ptr RawTH3D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetEntries" c_th3d_setentries ::
+               Ptr RawTH3D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetError"
-               c_th3d_seterror :: Ptr RawTH3D -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetError"
+               c_th3d_seterror :: Ptr RawTH3D -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setLabelColorA"
-               c_th3d_setlabelcolora :: Ptr RawTH3D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setLabelColorA" c_th3d_setlabelcolora ::
+               Ptr RawTH3D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setLabelSizeA"
-               c_th3d_setlabelsizea :: Ptr RawTH3D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setLabelSizeA" c_th3d_setlabelsizea ::
+               Ptr RawTH3D -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setLabelFontA"
-               c_th3d_setlabelfonta :: Ptr RawTH3D -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setLabelFontA" c_th3d_setlabelfonta ::
+               Ptr RawTH3D -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_setLabelOffsetA"
-               c_th3d_setlabeloffseta ::
-               Ptr RawTH3D -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_setLabelOffsetA" c_th3d_setlabeloffseta ::
+               Ptr RawTH3D -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetMaximum"
-               c_th3d_setmaximum :: Ptr RawTH3D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetMaximum" c_th3d_setmaximum ::
+               Ptr RawTH3D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetMinimum"
-               c_th3d_setminimum :: Ptr RawTH3D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetMinimum" c_th3d_setminimum ::
+               Ptr RawTH3D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetNormFactor"
-               c_th3d_setnormfactor :: Ptr RawTH3D -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetNormFactor" c_th3d_setnormfactor ::
+               Ptr RawTH3D -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetStats"
-               c_th3d_setstats :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetStats"
+               c_th3d_setstats :: Ptr RawTH3D -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetOption"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetOption"
                c_th3d_setoption :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetXTitle"
                c_th3d_setxtitle :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetYTitle"
                c_th3d_setytitle :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetZTitle"
                c_th3d_setztitle :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_ShowBackground"
-               c_th3d_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_ShowBackground" c_th3d_showbackground ::
                Ptr RawTH3D -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_ShowPeaks"
                c_th3d_showpeaks ::
                Ptr RawTH3D -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Smooth"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Smooth"
                c_th3d_smooth :: Ptr RawTH3D -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Sumw2" c_th3d_sumw2
-               :: Ptr RawTH3D -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Sumw2"
+               c_th3d_sumw2 :: Ptr RawTH3D -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetName"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetName"
                c_th3d_setname :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetNameTitle"
-               c_th3d_setnametitle :: Ptr RawTH3D -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetNameTitle" c_th3d_setnametitle ::
+               Ptr RawTH3D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetTitle"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetTitle"
                c_th3d_settitle :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetLineColor"
-               c_th3d_getlinecolor :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetLineColor" c_th3d_getlinecolor ::
+               Ptr RawTH3D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetLineStyle"
-               c_th3d_getlinestyle :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetLineStyle" c_th3d_getlinestyle ::
+               Ptr RawTH3D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetLineWidth"
-               c_th3d_getlinewidth :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetLineWidth" c_th3d_getlinewidth ::
+               Ptr RawTH3D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_ResetAttLine"
-               c_th3d_resetattline :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_ResetAttLine" c_th3d_resetattline ::
+               Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetLineAttributes"
-               c_th3d_setlineattributes :: Ptr RawTH3D -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetLineAttributes" c_th3d_setlineattributes
+               :: Ptr RawTH3D -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetLineColor"
-               c_th3d_setlinecolor :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetLineColor" c_th3d_setlinecolor ::
+               Ptr RawTH3D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetLineStyle"
-               c_th3d_setlinestyle :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetLineStyle" c_th3d_setlinestyle ::
+               Ptr RawTH3D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetLineWidth"
-               c_th3d_setlinewidth :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetLineWidth" c_th3d_setlinewidth ::
+               Ptr RawTH3D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetFillColor"
-               c_th3d_setfillcolor :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetFillColor" c_th3d_setfillcolor ::
+               Ptr RawTH3D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetFillStyle"
-               c_th3d_setfillstyle :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetFillStyle" c_th3d_setfillstyle ::
+               Ptr RawTH3D -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMarkerColor"
-               c_th3d_getmarkercolor :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMarkerColor" c_th3d_getmarkercolor ::
+               Ptr RawTH3D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMarkerStyle"
-               c_th3d_getmarkerstyle :: Ptr RawTH3D -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMarkerStyle" c_th3d_getmarkerstyle ::
+               Ptr RawTH3D -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetMarkerSize"
-               c_th3d_getmarkersize :: Ptr RawTH3D -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_GetMarkerSize" c_th3d_getmarkersize ::
+               Ptr RawTH3D -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_ResetAttMarker"
-               c_th3d_resetattmarker :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_ResetAttMarker" c_th3d_resetattmarker ::
+               Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3D.h TH3D_SetMarkerAttributes"
                c_th3d_setmarkerattributes :: Ptr RawTH3D -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetMarkerColor"
-               c_th3d_setmarkercolor :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetMarkerColor" c_th3d_setmarkercolor ::
+               Ptr RawTH3D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetMarkerStyle"
-               c_th3d_setmarkerstyle :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetMarkerStyle" c_th3d_setmarkerstyle ::
+               Ptr RawTH3D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SetMarkerSize"
-               c_th3d_setmarkersize :: Ptr RawTH3D -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_SetMarkerSize" c_th3d_setmarkersize ::
+               Ptr RawTH3D -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Draw" c_th3d_draw
-               :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Clear"
+               c_th3d_clear :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_FindObject"
-               c_th3d_findobject :: Ptr RawTH3D -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Draw"
+               c_th3d_draw :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH3D.h TH3D_FindObject" c_th3d_findobject ::
+               Ptr RawTH3D -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetName"
                c_th3d_getname :: Ptr RawTH3D -> IO CString
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_IsA" c_th3d_isa ::
-               Ptr RawTH3D -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_IsA"
+               c_th3d_isa :: Ptr RawTH3D -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Paint" c_th3d_paint
-               :: Ptr RawTH3D -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Paint"
+               c_th3d_paint :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_printObj"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_printObj"
                c_th3d_printobj :: Ptr RawTH3D -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_SaveAs"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SaveAs"
                c_th3d_saveas :: Ptr RawTH3D -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_Write" c_th3d_write
-               :: Ptr RawTH3D -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Write"
+               c_th3d_write :: Ptr RawTH3D -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3D.h TH3D_delete"
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_Write_"
+               c_th3d_write_ :: Ptr RawTH3D -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_delete"
                c_th3d_delete :: Ptr RawTH3D -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_GetAt"
+               c_th3d_getat :: Ptr RawTH3D -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetArray"
+               c_th3d_setarray :: Ptr RawTH3D -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3D.h TH3D_SetAt"
+               c_th3d_setat :: Ptr RawTH3D -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH3D/Implementation.hs b/src/HROOT/Hist/TH3D/Implementation.hs
--- a/src/HROOT/Hist/TH3D/Implementation.hs
+++ b/src/HROOT/Hist/TH3D/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH3D.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH3D.RawType
 import HROOT.Hist.TH3D.FFI
 import HROOT.Hist.TH3D.Interface
 import HROOT.Hist.TH3D.Cast
+import HROOT.Hist.TH3D.RawType
+import HROOT.Hist.TH3D.Cast
+import HROOT.Hist.TH3D.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -54,16 +63,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH3D TH3D
+instance () => ITH3D (TH3D) where
 
-instance ITH3 TH3D where
+instance () => ITH3 (TH3D) where
         fill3 = xform3 c_th3d_fill3
         fill3w = xform4 c_th3d_fill3w
         fitSlicesZ = xform7 c_th3d_fitslicesz
@@ -74,13 +83,12 @@
         rebinZ3 = xform2 c_th3d_rebinz3
         rebin3D = xform4 c_th3d_rebin3d
 
-instance ITArrayD TH3D
+instance () => ITArrayD (TH3D) where
 
-instance ITH1 TH3D where
+instance () => ITH1 (TH3D) where
         add = xform2 c_th3d_add
         addBinContent = xform2 c_th3d_addbincontent
         chi2Test = xform3 c_th3d_chi2test
-        computeIntegral = xform0 c_th3d_computeintegral
         directoryAutoAdd = xform1 c_th3d_directoryautoadd
         divide = xform5 c_th3d_divide
         drawCopyTH1 = xform1 c_th3d_drawcopyth1
@@ -152,9 +160,6 @@
         getRMS = xform1 c_th3d_getrms
         getRMSError = xform1 c_th3d_getrmserror
         getSkewness = xform1 c_th3d_getskewness
-        integral1 = xform3 c_th3d_integral1
-        interpolate1 = xform1 c_th3d_interpolate1
-        interpolate2 = xform2 c_th3d_interpolate2
         interpolate3 = xform3 c_th3d_interpolate3
         kolmogorovTest = xform2 c_th3d_kolmogorovtest
         labelsDeflate = xform1 c_th3d_labelsdeflate
@@ -209,14 +214,14 @@
         smooth = xform2 c_th3d_smooth
         sumw2 = xform0 c_th3d_sumw2
 
-instance ITAtt3D TH3D
+instance () => ITAtt3D (TH3D) where
 
-instance ITNamed TH3D where
+instance () => ITNamed (TH3D) where
         setName = xform1 c_th3d_setname
         setNameTitle = xform2 c_th3d_setnametitle
         setTitle = xform1 c_th3d_settitle
 
-instance ITAttLine TH3D where
+instance () => ITAttLine (TH3D) where
         getLineColor = xform0 c_th3d_getlinecolor
         getLineStyle = xform0 c_th3d_getlinestyle
         getLineWidth = xform0 c_th3d_getlinewidth
@@ -226,11 +231,11 @@
         setLineStyle = xform1 c_th3d_setlinestyle
         setLineWidth = xform1 c_th3d_setlinewidth
 
-instance ITAttFill TH3D where
+instance () => ITAttFill (TH3D) where
         setFillColor = xform1 c_th3d_setfillcolor
         setFillStyle = xform1 c_th3d_setfillstyle
 
-instance ITAttMarker TH3D where
+instance () => ITAttMarker (TH3D) where
         getMarkerColor = xform0 c_th3d_getmarkercolor
         getMarkerStyle = xform0 c_th3d_getmarkerstyle
         getMarkerSize = xform0 c_th3d_getmarkersize
@@ -240,7 +245,8 @@
         setMarkerStyle = xform1 c_th3d_setmarkerstyle
         setMarkerSize = xform1 c_th3d_setmarkersize
 
-instance ITObject TH3D where
+instance () => ITObject (TH3D) where
+        clear = xform1 c_th3d_clear
         draw = xform1 c_th3d_draw
         findObject = xform1 c_th3d_findobject
         getName = xform0 c_th3d_getname
@@ -249,8 +255,12 @@
         printObj = xform1 c_th3d_printobj
         saveAs = xform2 c_th3d_saveas
         write = xform3 c_th3d_write
+        write_ = xform0 c_th3d_write_
 
-instance IDeletable TH3D where
+instance () => IDeletable (TH3D) where
         delete = xform0 c_th3d_delete
 
-instance ITArray TH3D
+instance () => ITArray (TH3D) where
+        getAt = xform1 c_th3d_getat
+        setArray = xform1 c_th3d_setarray
+        setAt = xform2 c_th3d_setat
diff --git a/src/HROOT/Hist/TH3D/Interface.hs b/src/HROOT/Hist/TH3D/Interface.hs
--- a/src/HROOT/Hist/TH3D/Interface.hs
+++ b/src/HROOT/Hist/TH3D/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH3D.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH3.Interface
 import HROOT.Core.TArrayD.Interface
 
-class (ITH3 a, ITArrayD a) => ITH3D a
+class (ITH3 a, ITArrayD a) => ITH3D a where
 
 upcastTH3D :: forall a . (FPtr a, ITH3D a) => a -> TH3D
 upcastTH3D h
diff --git a/src/HROOT/Hist/TH3D/RawType.hs b/src/HROOT/Hist/TH3D/RawType.hs
--- a/src/HROOT/Hist/TH3D/RawType.hs
+++ b/src/HROOT/Hist/TH3D/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH3D
 
 newtype TH3D = TH3D (Ptr RawTH3D)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH3D where
+instance () => FPtr (TH3D) where
         type Raw TH3D = RawTH3D
         get_fptr (TH3D ptr) = ptr
         cast_fptr_to_obj = TH3D
diff --git a/src/HROOT/Hist/TH3F/Cast.hs b/src/HROOT/Hist/TH3F/Cast.hs
--- a/src/HROOT/Hist/TH3F/Cast.hs
+++ b/src/HROOT/Hist/TH3F/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH3F.RawType
 import HROOT.Hist.TH3F.Interface
 
-instance (ITH3F a, FPtr a) => Castable a (Ptr RawTH3F) where
+instance (ITH3F a, FPtr a) => Castable (a) (Ptr RawTH3F) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH3F (Ptr RawTH3F) where
+instance () => Castable (TH3F) (Ptr RawTH3F) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH3F/FFI.hsc b/src/HROOT/Hist/TH3F/FFI.hsc
--- a/src/HROOT/Hist/TH3F/FFI.hsc
+++ b/src/HROOT/Hist/TH3F/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH3F.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH3F.RawType
+import HROOT.Hist.TH3F.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH3.RawType
@@ -13,558 +16,646 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_fill3" c_th3f_fill3
-               :: Ptr RawTH3F -> CDouble -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_fill3"
+               c_th3f_fill3 ::
+               Ptr RawTH3F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_fill3w"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_fill3w"
                c_th3f_fill3w ::
                Ptr RawTH3F -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FitSlicesZ"
-               c_th3f_fitslicesz ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FitSlicesZ" c_th3f_fitslicesz ::
                Ptr RawTH3F ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CInt -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3F.h TH3F_getCorrelationFactor3"
                c_th3f_getcorrelationfactor3 ::
                Ptr RawTH3F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getCovariance3"
-               c_th3f_getcovariance3 :: Ptr RawTH3F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getCovariance3" c_th3f_getcovariance3 ::
+               Ptr RawTH3F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_rebinX3"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_rebinX3"
                c_th3f_rebinx3 :: Ptr RawTH3F -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_rebinY3"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_rebinY3"
                c_th3f_rebiny3 :: Ptr RawTH3F -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_rebinZ3"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_rebinZ3"
                c_th3f_rebinz3 :: Ptr RawTH3F -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Rebin3D"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Rebin3D"
                c_th3f_rebin3d ::
                Ptr RawTH3F -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Add" c_th3f_add ::
-               Ptr RawTH3F -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Add"
+               c_th3f_add :: Ptr RawTH3F -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_AddBinContent"
-               c_th3f_addbincontent :: Ptr RawTH3F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_AddBinContent" c_th3f_addbincontent ::
+               Ptr RawTH3F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Chi2Test"
                c_th3f_chi2test ::
-               Ptr RawTH3F -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3F.h TH3F_ComputeIntegral"
-               c_th3f_computeintegral :: Ptr RawTH3F -> IO CDouble
+               Ptr RawTH3F -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_DirectoryAutoAdd"
-               c_th3f_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_DirectoryAutoAdd" c_th3f_directoryautoadd ::
                Ptr RawTH3F -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Divide"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Divide"
                c_th3f_divide ::
                Ptr RawTH3F ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_drawCopyTH1"
-               c_th3f_drawcopyth1 :: Ptr RawTH3F -> CString -> IO (Ptr RawTH3F)
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_drawCopyTH1" c_th3f_drawcopyth1 ::
+               Ptr RawTH3F -> CString -> IO (Ptr RawTH3F)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_DrawNormalized"
-               c_th3f_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_DrawNormalized" c_th3f_drawnormalized ::
                Ptr RawTH3F -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_drawPanelTH1"
-               c_th3f_drawpanelth1 :: Ptr RawTH3F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_drawPanelTH1" c_th3f_drawpanelth1 ::
+               Ptr RawTH3F -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_BufferEmpty"
-               c_th3f_bufferempty :: Ptr RawTH3F -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_BufferEmpty" c_th3f_bufferempty ::
+               Ptr RawTH3F -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_evalF" c_th3f_evalf
-               :: Ptr RawTH3F -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_evalF"
+               c_th3f_evalf :: Ptr RawTH3F -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FFT" c_th3f_fft ::
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_FFT"
+               c_th3f_fft ::
                Ptr RawTH3F -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_fill1" c_th3f_fill1
-               :: Ptr RawTH3F -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_fill1"
+               c_th3f_fill1 :: Ptr RawTH3F -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_fill1w"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_fill1w"
                c_th3f_fill1w :: Ptr RawTH3F -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_fillN1"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_fillN1"
                c_th3f_filln1 ::
-               Ptr RawTH3F ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH3F -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FillRandom"
-               c_th3f_fillrandom :: Ptr RawTH3F -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FillRandom" c_th3f_fillrandom ::
+               Ptr RawTH3F -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FindBin"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_FindBin"
                c_th3f_findbin ::
                Ptr RawTH3F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FindFixBin"
-               c_th3f_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FindFixBin" c_th3f_findfixbin ::
                Ptr RawTH3F -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FindFirstBinAbove"
-               c_th3f_findfirstbinabove ::
-               Ptr RawTH3F -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FindFirstBinAbove" c_th3f_findfirstbinabove
+               :: Ptr RawTH3F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FindLastBinAbove"
-               c_th3f_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FindLastBinAbove" c_th3f_findlastbinabove ::
                Ptr RawTH3F -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Fit" c_th3f_fit ::
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Fit"
+               c_th3f_fit ::
                Ptr RawTH3F ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FitPanelTH1"
-               c_th3f_fitpanelth1 :: Ptr RawTH3F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FitPanelTH1" c_th3f_fitpanelth1 ::
+               Ptr RawTH3F -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getNdivisionA"
-               c_th3f_getndivisiona :: Ptr RawTH3F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getNdivisionA" c_th3f_getndivisiona ::
+               Ptr RawTH3F -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getAxisColorA"
-               c_th3f_getaxiscolora :: Ptr RawTH3F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getAxisColorA" c_th3f_getaxiscolora ::
+               Ptr RawTH3F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getLabelColorA"
-               c_th3f_getlabelcolora :: Ptr RawTH3F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getLabelColorA" c_th3f_getlabelcolora ::
+               Ptr RawTH3F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getLabelFontA"
-               c_th3f_getlabelfonta :: Ptr RawTH3F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getLabelFontA" c_th3f_getlabelfonta ::
+               Ptr RawTH3F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getLabelOffsetA"
-               c_th3f_getlabeloffseta :: Ptr RawTH3F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getLabelOffsetA" c_th3f_getlabeloffseta ::
+               Ptr RawTH3F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getLabelSizeA"
-               c_th3f_getlabelsizea :: Ptr RawTH3F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getLabelSizeA" c_th3f_getlabelsizea ::
+               Ptr RawTH3F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getTitleFontA"
-               c_th3f_gettitlefonta :: Ptr RawTH3F -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getTitleFontA" c_th3f_gettitlefonta ::
+               Ptr RawTH3F -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getTitleOffsetA"
-               c_th3f_gettitleoffseta :: Ptr RawTH3F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getTitleOffsetA" c_th3f_gettitleoffseta ::
+               Ptr RawTH3F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getTitleSizeA"
-               c_th3f_gettitlesizea :: Ptr RawTH3F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getTitleSizeA" c_th3f_gettitlesizea ::
+               Ptr RawTH3F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getTickLengthA"
-               c_th3f_getticklengtha :: Ptr RawTH3F -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getTickLengthA" c_th3f_getticklengtha ::
+               Ptr RawTH3F -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBarOffset"
-               c_th3f_getbaroffset :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBarOffset" c_th3f_getbaroffset ::
+               Ptr RawTH3F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBarWidth"
-               c_th3f_getbarwidth :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBarWidth" c_th3f_getbarwidth ::
+               Ptr RawTH3F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetContour"
-               c_th3f_getcontour :: Ptr RawTH3F -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetContour" c_th3f_getcontour ::
+               Ptr RawTH3F -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetContourLevel"
-               c_th3f_getcontourlevel :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetContourLevel" c_th3f_getcontourlevel ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetContourLevelPad"
-               c_th3f_getcontourlevelpad :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetContourLevelPad" c_th3f_getcontourlevelpad
+               :: Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBin"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetBin"
                c_th3f_getbin :: Ptr RawTH3F -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinCenter"
-               c_th3f_getbincenter :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinCenter" c_th3f_getbincenter ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinContent1"
-               c_th3f_getbincontent1 :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinContent1" c_th3f_getbincontent1 ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinContent2"
-               c_th3f_getbincontent2 :: Ptr RawTH3F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinContent2" c_th3f_getbincontent2 ::
+               Ptr RawTH3F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinContent3"
-               c_th3f_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinContent3" c_th3f_getbincontent3 ::
                Ptr RawTH3F -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinError1"
-               c_th3f_getbinerror1 :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinError1" c_th3f_getbinerror1 ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinError2"
-               c_th3f_getbinerror2 :: Ptr RawTH3F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinError2" c_th3f_getbinerror2 ::
+               Ptr RawTH3F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinError3"
-               c_th3f_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinError3" c_th3f_getbinerror3 ::
                Ptr RawTH3F -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinLowEdge"
-               c_th3f_getbinlowedge :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinLowEdge" c_th3f_getbinlowedge ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetBinWidth"
-               c_th3f_getbinwidth :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetBinWidth" c_th3f_getbinwidth ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetCellContent"
-               c_th3f_getcellcontent :: Ptr RawTH3F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetCellContent" c_th3f_getcellcontent ::
+               Ptr RawTH3F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetCellError"
-               c_th3f_getcellerror :: Ptr RawTH3F -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetCellError" c_th3f_getcellerror ::
+               Ptr RawTH3F -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetEntries"
-               c_th3f_getentries :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetEntries" c_th3f_getentries ::
+               Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3F.h TH3F_GetEffectiveEntries"
                c_th3f_geteffectiveentries :: Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetFunction"
-               c_th3f_getfunction :: Ptr RawTH3F -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetFunction" c_th3f_getfunction ::
+               Ptr RawTH3F -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetDimension"
-               c_th3f_getdimension :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetDimension" c_th3f_getdimension ::
+               Ptr RawTH3F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetKurtosis"
-               c_th3f_getkurtosis :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetKurtosis" c_th3f_getkurtosis ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetLowEdge"
-               c_th3f_getlowedge :: Ptr RawTH3F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetLowEdge" c_th3f_getlowedge ::
+               Ptr RawTH3F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getMaximumTH1"
-               c_th3f_getmaximumth1 :: Ptr RawTH3F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getMaximumTH1" c_th3f_getmaximumth1 ::
+               Ptr RawTH3F -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMaximumBin"
-               c_th3f_getmaximumbin :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMaximumBin" c_th3f_getmaximumbin ::
+               Ptr RawTH3F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMaximumStored"
-               c_th3f_getmaximumstored :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMaximumStored" c_th3f_getmaximumstored ::
+               Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getMinimumTH1"
-               c_th3f_getminimumth1 :: Ptr RawTH3F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getMinimumTH1" c_th3f_getminimumth1 ::
+               Ptr RawTH3F -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMinimumBin"
-               c_th3f_getminimumbin :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMinimumBin" c_th3f_getminimumbin ::
+               Ptr RawTH3F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMinimumStored"
-               c_th3f_getminimumstored :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMinimumStored" c_th3f_getminimumstored ::
+               Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMean"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetMean"
                c_th3f_getmean :: Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMeanError"
-               c_th3f_getmeanerror :: Ptr RawTH3F -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMeanError" c_th3f_getmeanerror ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetNbinsX"
                c_th3f_getnbinsx :: Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetNbinsY"
                c_th3f_getnbinsy :: Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetNbinsZ"
                c_th3f_getnbinsz :: Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_getQuantilesTH1"
-               c_th3f_getquantilesth1 ::
-               Ptr RawTH3F -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_getQuantilesTH1" c_th3f_getquantilesth1 ::
+               Ptr RawTH3F -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetRandom"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetRandom"
                c_th3f_getrandom :: Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetStats"
-               c_th3f_getstats :: Ptr RawTH3F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetStats"
+               c_th3f_getstats :: Ptr RawTH3F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetSumOfWeights"
-               c_th3f_getsumofweights :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetSumOfWeights" c_th3f_getsumofweights ::
+               Ptr RawTH3F -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetSumw2"
                c_th3f_getsumw2 :: Ptr RawTH3F -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetSumw2N"
                c_th3f_getsumw2n :: Ptr RawTH3F -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetRMS"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetRMS"
                c_th3f_getrms :: Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetRMSError"
-               c_th3f_getrmserror :: Ptr RawTH3F -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetSkewness"
-               c_th3f_getskewness :: Ptr RawTH3F -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3F.h TH3F_integral1"
-               c_th3f_integral1 ::
-               Ptr RawTH3F -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3F.h TH3F_interpolate1"
-               c_th3f_interpolate1 :: Ptr RawTH3F -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetRMSError" c_th3f_getrmserror ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_interpolate2"
-               c_th3f_interpolate2 ::
-               Ptr RawTH3F -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetSkewness" c_th3f_getskewness ::
+               Ptr RawTH3F -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_interpolate3"
-               c_th3f_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_interpolate3" c_th3f_interpolate3 ::
                Ptr RawTH3F -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_KolmogorovTest"
-               c_th3f_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_KolmogorovTest" c_th3f_kolmogorovtest ::
                Ptr RawTH3F -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_LabelsDeflate"
-               c_th3f_labelsdeflate :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_LabelsDeflate" c_th3f_labelsdeflate ::
+               Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_LabelsInflate"
-               c_th3f_labelsinflate :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_LabelsInflate" c_th3f_labelsinflate ::
+               Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_LabelsOption"
-               c_th3f_labelsoption :: Ptr RawTH3F -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_LabelsOption" c_th3f_labelsoption ::
+               Ptr RawTH3F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_multiflyF"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_multiflyF"
                c_th3f_multiflyf :: Ptr RawTH3F -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Multiply"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Multiply"
                c_th3f_multiply ::
                Ptr RawTH3F ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_PutStats"
-               c_th3f_putstats :: Ptr RawTH3F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_PutStats"
+               c_th3f_putstats :: Ptr RawTH3F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Rebin" c_th3f_rebin
-               ::
-               Ptr RawTH3F -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Rebin"
+               c_th3f_rebin ::
+               Ptr RawTH3F -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_RebinAxis"
                c_th3f_rebinaxis :: Ptr RawTH3F -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Rebuild"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Rebuild"
                c_th3f_rebuild :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_RecursiveRemove"
-               c_th3f_recursiveremove :: Ptr RawTH3F -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_RecursiveRemove" c_th3f_recursiveremove ::
+               Ptr RawTH3F -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Reset" c_th3f_reset
-               :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Reset"
+               c_th3f_reset :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_ResetStats"
-               c_th3f_resetstats :: Ptr RawTH3F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_ResetStats" c_th3f_resetstats ::
+               Ptr RawTH3F -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Scale" c_th3f_scale
-               :: Ptr RawTH3F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Scale"
+               c_th3f_scale :: Ptr RawTH3F -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setAxisColorA"
-               c_th3f_setaxiscolora :: Ptr RawTH3F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setAxisColorA" c_th3f_setaxiscolora ::
+               Ptr RawTH3F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetAxisRange"
-               c_th3f_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetAxisRange" c_th3f_setaxisrange ::
                Ptr RawTH3F -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetBarOffset"
-               c_th3f_setbaroffset :: Ptr RawTH3F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetBarOffset" c_th3f_setbaroffset ::
+               Ptr RawTH3F -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetBarWidth"
-               c_th3f_setbarwidth :: Ptr RawTH3F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetBarWidth" c_th3f_setbarwidth ::
+               Ptr RawTH3F -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBinContent1"
-               c_th3f_setbincontent1 :: Ptr RawTH3F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setBinContent1" c_th3f_setbincontent1 ::
+               Ptr RawTH3F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBinContent2"
-               c_th3f_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setBinContent2" c_th3f_setbincontent2 ::
                Ptr RawTH3F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBinContent3"
-               c_th3f_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setBinContent3" c_th3f_setbincontent3 ::
                Ptr RawTH3F -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBinError1"
-               c_th3f_setbinerror1 :: Ptr RawTH3F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setBinError1" c_th3f_setbinerror1 ::
+               Ptr RawTH3F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBinError2"
-               c_th3f_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setBinError2" c_th3f_setbinerror2 ::
                Ptr RawTH3F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBinError3"
-               c_th3f_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setBinError3" c_th3f_setbinerror3 ::
                Ptr RawTH3F -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBins1"
-               c_th3f_setbins1 :: Ptr RawTH3F -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_setBins1"
+               c_th3f_setbins1 :: Ptr RawTH3F -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBins2"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_setBins2"
                c_th3f_setbins2 ::
-               Ptr RawTH3F ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH3F -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setBins3"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_setBins3"
                c_th3f_setbins3 ::
                Ptr RawTH3F ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetBinsLength"
-               c_th3f_setbinslength :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetBinsLength" c_th3f_setbinslength ::
+               Ptr RawTH3F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetBuffer"
                c_th3f_setbuffer :: Ptr RawTH3F -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetCellContent"
-               c_th3f_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetCellContent" c_th3f_setcellcontent ::
                Ptr RawTH3F -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetContent"
-               c_th3f_setcontent :: Ptr RawTH3F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetContent" c_th3f_setcontent ::
+               Ptr RawTH3F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetContour"
-               c_th3f_setcontour :: Ptr RawTH3F -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetContour" c_th3f_setcontour ::
+               Ptr RawTH3F -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetContourLevel"
-               c_th3f_setcontourlevel :: Ptr RawTH3F -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetContourLevel" c_th3f_setcontourlevel ::
+               Ptr RawTH3F -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetDirectory"
-               c_th3f_setdirectory :: Ptr RawTH3F -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetDirectory" c_th3f_setdirectory ::
+               Ptr RawTH3F -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetEntries"
-               c_th3f_setentries :: Ptr RawTH3F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetEntries" c_th3f_setentries ::
+               Ptr RawTH3F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetError"
-               c_th3f_seterror :: Ptr RawTH3F -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetError"
+               c_th3f_seterror :: Ptr RawTH3F -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setLabelColorA"
-               c_th3f_setlabelcolora :: Ptr RawTH3F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setLabelColorA" c_th3f_setlabelcolora ::
+               Ptr RawTH3F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setLabelSizeA"
-               c_th3f_setlabelsizea :: Ptr RawTH3F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setLabelSizeA" c_th3f_setlabelsizea ::
+               Ptr RawTH3F -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setLabelFontA"
-               c_th3f_setlabelfonta :: Ptr RawTH3F -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setLabelFontA" c_th3f_setlabelfonta ::
+               Ptr RawTH3F -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_setLabelOffsetA"
-               c_th3f_setlabeloffseta ::
-               Ptr RawTH3F -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_setLabelOffsetA" c_th3f_setlabeloffseta ::
+               Ptr RawTH3F -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetMaximum"
-               c_th3f_setmaximum :: Ptr RawTH3F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetMaximum" c_th3f_setmaximum ::
+               Ptr RawTH3F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetMinimum"
-               c_th3f_setminimum :: Ptr RawTH3F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetMinimum" c_th3f_setminimum ::
+               Ptr RawTH3F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetNormFactor"
-               c_th3f_setnormfactor :: Ptr RawTH3F -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetNormFactor" c_th3f_setnormfactor ::
+               Ptr RawTH3F -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetStats"
-               c_th3f_setstats :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetStats"
+               c_th3f_setstats :: Ptr RawTH3F -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetOption"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetOption"
                c_th3f_setoption :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetXTitle"
                c_th3f_setxtitle :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetYTitle"
                c_th3f_setytitle :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetZTitle"
                c_th3f_setztitle :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_ShowBackground"
-               c_th3f_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_ShowBackground" c_th3f_showbackground ::
                Ptr RawTH3F -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_ShowPeaks"
                c_th3f_showpeaks ::
                Ptr RawTH3F -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Smooth"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Smooth"
                c_th3f_smooth :: Ptr RawTH3F -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Sumw2" c_th3f_sumw2
-               :: Ptr RawTH3F -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Sumw2"
+               c_th3f_sumw2 :: Ptr RawTH3F -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetName"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetName"
                c_th3f_setname :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetNameTitle"
-               c_th3f_setnametitle :: Ptr RawTH3F -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetNameTitle" c_th3f_setnametitle ::
+               Ptr RawTH3F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetTitle"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetTitle"
                c_th3f_settitle :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetLineColor"
-               c_th3f_getlinecolor :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetLineColor" c_th3f_getlinecolor ::
+               Ptr RawTH3F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetLineStyle"
-               c_th3f_getlinestyle :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetLineStyle" c_th3f_getlinestyle ::
+               Ptr RawTH3F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetLineWidth"
-               c_th3f_getlinewidth :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetLineWidth" c_th3f_getlinewidth ::
+               Ptr RawTH3F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_ResetAttLine"
-               c_th3f_resetattline :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_ResetAttLine" c_th3f_resetattline ::
+               Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetLineAttributes"
-               c_th3f_setlineattributes :: Ptr RawTH3F -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetLineAttributes" c_th3f_setlineattributes
+               :: Ptr RawTH3F -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetLineColor"
-               c_th3f_setlinecolor :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetLineColor" c_th3f_setlinecolor ::
+               Ptr RawTH3F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetLineStyle"
-               c_th3f_setlinestyle :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetLineStyle" c_th3f_setlinestyle ::
+               Ptr RawTH3F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetLineWidth"
-               c_th3f_setlinewidth :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetLineWidth" c_th3f_setlinewidth ::
+               Ptr RawTH3F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetFillColor"
-               c_th3f_setfillcolor :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetFillColor" c_th3f_setfillcolor ::
+               Ptr RawTH3F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetFillStyle"
-               c_th3f_setfillstyle :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetFillStyle" c_th3f_setfillstyle ::
+               Ptr RawTH3F -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMarkerColor"
-               c_th3f_getmarkercolor :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMarkerColor" c_th3f_getmarkercolor ::
+               Ptr RawTH3F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMarkerStyle"
-               c_th3f_getmarkerstyle :: Ptr RawTH3F -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMarkerStyle" c_th3f_getmarkerstyle ::
+               Ptr RawTH3F -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetMarkerSize"
-               c_th3f_getmarkersize :: Ptr RawTH3F -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_GetMarkerSize" c_th3f_getmarkersize ::
+               Ptr RawTH3F -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_ResetAttMarker"
-               c_th3f_resetattmarker :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_ResetAttMarker" c_th3f_resetattmarker ::
+               Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3F.h TH3F_SetMarkerAttributes"
                c_th3f_setmarkerattributes :: Ptr RawTH3F -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetMarkerColor"
-               c_th3f_setmarkercolor :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetMarkerColor" c_th3f_setmarkercolor ::
+               Ptr RawTH3F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetMarkerStyle"
-               c_th3f_setmarkerstyle :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetMarkerStyle" c_th3f_setmarkerstyle ::
+               Ptr RawTH3F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SetMarkerSize"
-               c_th3f_setmarkersize :: Ptr RawTH3F -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_SetMarkerSize" c_th3f_setmarkersize ::
+               Ptr RawTH3F -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Draw" c_th3f_draw
-               :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Clear"
+               c_th3f_clear :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_FindObject"
-               c_th3f_findobject :: Ptr RawTH3F -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Draw"
+               c_th3f_draw :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH3F.h TH3F_FindObject" c_th3f_findobject ::
+               Ptr RawTH3F -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetName"
                c_th3f_getname :: Ptr RawTH3F -> IO CString
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_IsA" c_th3f_isa ::
-               Ptr RawTH3F -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_IsA"
+               c_th3f_isa :: Ptr RawTH3F -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Paint" c_th3f_paint
-               :: Ptr RawTH3F -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Paint"
+               c_th3f_paint :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_printObj"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_printObj"
                c_th3f_printobj :: Ptr RawTH3F -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_SaveAs"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SaveAs"
                c_th3f_saveas :: Ptr RawTH3F -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_Write" c_th3f_write
-               :: Ptr RawTH3F -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Write"
+               c_th3f_write :: Ptr RawTH3F -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3F.h TH3F_delete"
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_Write_"
+               c_th3f_write_ :: Ptr RawTH3F -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_delete"
                c_th3f_delete :: Ptr RawTH3F -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_GetAt"
+               c_th3f_getat :: Ptr RawTH3F -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetArray"
+               c_th3f_setarray :: Ptr RawTH3F -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3F.h TH3F_SetAt"
+               c_th3f_setat :: Ptr RawTH3F -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH3F/Implementation.hs b/src/HROOT/Hist/TH3F/Implementation.hs
--- a/src/HROOT/Hist/TH3F/Implementation.hs
+++ b/src/HROOT/Hist/TH3F/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH3F.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH3F.RawType
 import HROOT.Hist.TH3F.FFI
 import HROOT.Hist.TH3F.Interface
 import HROOT.Hist.TH3F.Cast
+import HROOT.Hist.TH3F.RawType
+import HROOT.Hist.TH3F.Cast
+import HROOT.Hist.TH3F.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH3F TH3F
+instance () => ITH3F (TH3F) where
 
-instance ITH3 TH3F where
+instance () => ITH3 (TH3F) where
         fill3 = xform3 c_th3f_fill3
         fill3w = xform4 c_th3f_fill3w
         fitSlicesZ = xform7 c_th3f_fitslicesz
@@ -77,13 +86,12 @@
         rebinZ3 = xform2 c_th3f_rebinz3
         rebin3D = xform4 c_th3f_rebin3d
 
-instance ITArrayF TH3F
+instance () => ITArrayF (TH3F) where
 
-instance ITH1 TH3F where
+instance () => ITH1 (TH3F) where
         add = xform2 c_th3f_add
         addBinContent = xform2 c_th3f_addbincontent
         chi2Test = xform3 c_th3f_chi2test
-        computeIntegral = xform0 c_th3f_computeintegral
         directoryAutoAdd = xform1 c_th3f_directoryautoadd
         divide = xform5 c_th3f_divide
         drawCopyTH1 = xform1 c_th3f_drawcopyth1
@@ -155,9 +163,6 @@
         getRMS = xform1 c_th3f_getrms
         getRMSError = xform1 c_th3f_getrmserror
         getSkewness = xform1 c_th3f_getskewness
-        integral1 = xform3 c_th3f_integral1
-        interpolate1 = xform1 c_th3f_interpolate1
-        interpolate2 = xform2 c_th3f_interpolate2
         interpolate3 = xform3 c_th3f_interpolate3
         kolmogorovTest = xform2 c_th3f_kolmogorovtest
         labelsDeflate = xform1 c_th3f_labelsdeflate
@@ -212,14 +217,14 @@
         smooth = xform2 c_th3f_smooth
         sumw2 = xform0 c_th3f_sumw2
 
-instance ITAtt3D TH3F
+instance () => ITAtt3D (TH3F) where
 
-instance ITNamed TH3F where
+instance () => ITNamed (TH3F) where
         setName = xform1 c_th3f_setname
         setNameTitle = xform2 c_th3f_setnametitle
         setTitle = xform1 c_th3f_settitle
 
-instance ITAttLine TH3F where
+instance () => ITAttLine (TH3F) where
         getLineColor = xform0 c_th3f_getlinecolor
         getLineStyle = xform0 c_th3f_getlinestyle
         getLineWidth = xform0 c_th3f_getlinewidth
@@ -229,11 +234,11 @@
         setLineStyle = xform1 c_th3f_setlinestyle
         setLineWidth = xform1 c_th3f_setlinewidth
 
-instance ITAttFill TH3F where
+instance () => ITAttFill (TH3F) where
         setFillColor = xform1 c_th3f_setfillcolor
         setFillStyle = xform1 c_th3f_setfillstyle
 
-instance ITAttMarker TH3F where
+instance () => ITAttMarker (TH3F) where
         getMarkerColor = xform0 c_th3f_getmarkercolor
         getMarkerStyle = xform0 c_th3f_getmarkerstyle
         getMarkerSize = xform0 c_th3f_getmarkersize
@@ -243,7 +248,8 @@
         setMarkerStyle = xform1 c_th3f_setmarkerstyle
         setMarkerSize = xform1 c_th3f_setmarkersize
 
-instance ITObject TH3F where
+instance () => ITObject (TH3F) where
+        clear = xform1 c_th3f_clear
         draw = xform1 c_th3f_draw
         findObject = xform1 c_th3f_findobject
         getName = xform0 c_th3f_getname
@@ -252,8 +258,12 @@
         printObj = xform1 c_th3f_printobj
         saveAs = xform2 c_th3f_saveas
         write = xform3 c_th3f_write
+        write_ = xform0 c_th3f_write_
 
-instance IDeletable TH3F where
+instance () => IDeletable (TH3F) where
         delete = xform0 c_th3f_delete
 
-instance ITArray TH3F
+instance () => ITArray (TH3F) where
+        getAt = xform1 c_th3f_getat
+        setArray = xform1 c_th3f_setarray
+        setAt = xform2 c_th3f_setat
diff --git a/src/HROOT/Hist/TH3F/Interface.hs b/src/HROOT/Hist/TH3F/Interface.hs
--- a/src/HROOT/Hist/TH3F/Interface.hs
+++ b/src/HROOT/Hist/TH3F/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH3F.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH3.Interface
 import HROOT.Core.TArrayF.Interface
 
-class (ITH3 a, ITArrayF a) => ITH3F a
+class (ITH3 a, ITArrayF a) => ITH3F a where
 
 upcastTH3F :: forall a . (FPtr a, ITH3F a) => a -> TH3F
 upcastTH3F h
diff --git a/src/HROOT/Hist/TH3F/RawType.hs b/src/HROOT/Hist/TH3F/RawType.hs
--- a/src/HROOT/Hist/TH3F/RawType.hs
+++ b/src/HROOT/Hist/TH3F/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH3F
 
 newtype TH3F = TH3F (Ptr RawTH3F)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH3F where
+instance () => FPtr (TH3F) where
         type Raw TH3F = RawTH3F
         get_fptr (TH3F ptr) = ptr
         cast_fptr_to_obj = TH3F
diff --git a/src/HROOT/Hist/TH3I/Cast.hs b/src/HROOT/Hist/TH3I/Cast.hs
--- a/src/HROOT/Hist/TH3I/Cast.hs
+++ b/src/HROOT/Hist/TH3I/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH3I.RawType
 import HROOT.Hist.TH3I.Interface
 
-instance (ITH3I a, FPtr a) => Castable a (Ptr RawTH3I) where
+instance (ITH3I a, FPtr a) => Castable (a) (Ptr RawTH3I) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH3I (Ptr RawTH3I) where
+instance () => Castable (TH3I) (Ptr RawTH3I) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH3I/FFI.hsc b/src/HROOT/Hist/TH3I/FFI.hsc
--- a/src/HROOT/Hist/TH3I/FFI.hsc
+++ b/src/HROOT/Hist/TH3I/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH3I.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH3I.RawType
+import HROOT.Hist.TH3I.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH3.RawType
@@ -13,558 +16,646 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_fill3" c_th3i_fill3
-               :: Ptr RawTH3I -> CDouble -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_fill3"
+               c_th3i_fill3 ::
+               Ptr RawTH3I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_fill3w"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_fill3w"
                c_th3i_fill3w ::
                Ptr RawTH3I -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FitSlicesZ"
-               c_th3i_fitslicesz ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FitSlicesZ" c_th3i_fitslicesz ::
                Ptr RawTH3I ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CInt -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3I.h TH3I_getCorrelationFactor3"
                c_th3i_getcorrelationfactor3 ::
                Ptr RawTH3I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getCovariance3"
-               c_th3i_getcovariance3 :: Ptr RawTH3I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getCovariance3" c_th3i_getcovariance3 ::
+               Ptr RawTH3I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_rebinX3"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_rebinX3"
                c_th3i_rebinx3 :: Ptr RawTH3I -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_rebinY3"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_rebinY3"
                c_th3i_rebiny3 :: Ptr RawTH3I -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_rebinZ3"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_rebinZ3"
                c_th3i_rebinz3 :: Ptr RawTH3I -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Rebin3D"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Rebin3D"
                c_th3i_rebin3d ::
                Ptr RawTH3I -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Add" c_th3i_add ::
-               Ptr RawTH3I -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Add"
+               c_th3i_add :: Ptr RawTH3I -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_AddBinContent"
-               c_th3i_addbincontent :: Ptr RawTH3I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_AddBinContent" c_th3i_addbincontent ::
+               Ptr RawTH3I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Chi2Test"
                c_th3i_chi2test ::
-               Ptr RawTH3I -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3I.h TH3I_ComputeIntegral"
-               c_th3i_computeintegral :: Ptr RawTH3I -> IO CDouble
+               Ptr RawTH3I -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_DirectoryAutoAdd"
-               c_th3i_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_DirectoryAutoAdd" c_th3i_directoryautoadd ::
                Ptr RawTH3I -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Divide"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Divide"
                c_th3i_divide ::
                Ptr RawTH3I ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_drawCopyTH1"
-               c_th3i_drawcopyth1 :: Ptr RawTH3I -> CString -> IO (Ptr RawTH3I)
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_drawCopyTH1" c_th3i_drawcopyth1 ::
+               Ptr RawTH3I -> CString -> IO (Ptr RawTH3I)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_DrawNormalized"
-               c_th3i_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_DrawNormalized" c_th3i_drawnormalized ::
                Ptr RawTH3I -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_drawPanelTH1"
-               c_th3i_drawpanelth1 :: Ptr RawTH3I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_drawPanelTH1" c_th3i_drawpanelth1 ::
+               Ptr RawTH3I -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_BufferEmpty"
-               c_th3i_bufferempty :: Ptr RawTH3I -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_BufferEmpty" c_th3i_bufferempty ::
+               Ptr RawTH3I -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_evalF" c_th3i_evalf
-               :: Ptr RawTH3I -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_evalF"
+               c_th3i_evalf :: Ptr RawTH3I -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FFT" c_th3i_fft ::
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_FFT"
+               c_th3i_fft ::
                Ptr RawTH3I -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_fill1" c_th3i_fill1
-               :: Ptr RawTH3I -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_fill1"
+               c_th3i_fill1 :: Ptr RawTH3I -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_fill1w"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_fill1w"
                c_th3i_fill1w :: Ptr RawTH3I -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_fillN1"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_fillN1"
                c_th3i_filln1 ::
-               Ptr RawTH3I ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH3I -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FillRandom"
-               c_th3i_fillrandom :: Ptr RawTH3I -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FillRandom" c_th3i_fillrandom ::
+               Ptr RawTH3I -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FindBin"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_FindBin"
                c_th3i_findbin ::
                Ptr RawTH3I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FindFixBin"
-               c_th3i_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FindFixBin" c_th3i_findfixbin ::
                Ptr RawTH3I -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FindFirstBinAbove"
-               c_th3i_findfirstbinabove ::
-               Ptr RawTH3I -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FindFirstBinAbove" c_th3i_findfirstbinabove
+               :: Ptr RawTH3I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FindLastBinAbove"
-               c_th3i_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FindLastBinAbove" c_th3i_findlastbinabove ::
                Ptr RawTH3I -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Fit" c_th3i_fit ::
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Fit"
+               c_th3i_fit ::
                Ptr RawTH3I ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FitPanelTH1"
-               c_th3i_fitpanelth1 :: Ptr RawTH3I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FitPanelTH1" c_th3i_fitpanelth1 ::
+               Ptr RawTH3I -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getNdivisionA"
-               c_th3i_getndivisiona :: Ptr RawTH3I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getNdivisionA" c_th3i_getndivisiona ::
+               Ptr RawTH3I -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getAxisColorA"
-               c_th3i_getaxiscolora :: Ptr RawTH3I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getAxisColorA" c_th3i_getaxiscolora ::
+               Ptr RawTH3I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getLabelColorA"
-               c_th3i_getlabelcolora :: Ptr RawTH3I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getLabelColorA" c_th3i_getlabelcolora ::
+               Ptr RawTH3I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getLabelFontA"
-               c_th3i_getlabelfonta :: Ptr RawTH3I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getLabelFontA" c_th3i_getlabelfonta ::
+               Ptr RawTH3I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getLabelOffsetA"
-               c_th3i_getlabeloffseta :: Ptr RawTH3I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getLabelOffsetA" c_th3i_getlabeloffseta ::
+               Ptr RawTH3I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getLabelSizeA"
-               c_th3i_getlabelsizea :: Ptr RawTH3I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getLabelSizeA" c_th3i_getlabelsizea ::
+               Ptr RawTH3I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getTitleFontA"
-               c_th3i_gettitlefonta :: Ptr RawTH3I -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getTitleFontA" c_th3i_gettitlefonta ::
+               Ptr RawTH3I -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getTitleOffsetA"
-               c_th3i_gettitleoffseta :: Ptr RawTH3I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getTitleOffsetA" c_th3i_gettitleoffseta ::
+               Ptr RawTH3I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getTitleSizeA"
-               c_th3i_gettitlesizea :: Ptr RawTH3I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getTitleSizeA" c_th3i_gettitlesizea ::
+               Ptr RawTH3I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getTickLengthA"
-               c_th3i_getticklengtha :: Ptr RawTH3I -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getTickLengthA" c_th3i_getticklengtha ::
+               Ptr RawTH3I -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBarOffset"
-               c_th3i_getbaroffset :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBarOffset" c_th3i_getbaroffset ::
+               Ptr RawTH3I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBarWidth"
-               c_th3i_getbarwidth :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBarWidth" c_th3i_getbarwidth ::
+               Ptr RawTH3I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetContour"
-               c_th3i_getcontour :: Ptr RawTH3I -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetContour" c_th3i_getcontour ::
+               Ptr RawTH3I -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetContourLevel"
-               c_th3i_getcontourlevel :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetContourLevel" c_th3i_getcontourlevel ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetContourLevelPad"
-               c_th3i_getcontourlevelpad :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetContourLevelPad" c_th3i_getcontourlevelpad
+               :: Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBin"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetBin"
                c_th3i_getbin :: Ptr RawTH3I -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinCenter"
-               c_th3i_getbincenter :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinCenter" c_th3i_getbincenter ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinContent1"
-               c_th3i_getbincontent1 :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinContent1" c_th3i_getbincontent1 ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinContent2"
-               c_th3i_getbincontent2 :: Ptr RawTH3I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinContent2" c_th3i_getbincontent2 ::
+               Ptr RawTH3I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinContent3"
-               c_th3i_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinContent3" c_th3i_getbincontent3 ::
                Ptr RawTH3I -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinError1"
-               c_th3i_getbinerror1 :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinError1" c_th3i_getbinerror1 ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinError2"
-               c_th3i_getbinerror2 :: Ptr RawTH3I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinError2" c_th3i_getbinerror2 ::
+               Ptr RawTH3I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinError3"
-               c_th3i_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinError3" c_th3i_getbinerror3 ::
                Ptr RawTH3I -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinLowEdge"
-               c_th3i_getbinlowedge :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinLowEdge" c_th3i_getbinlowedge ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetBinWidth"
-               c_th3i_getbinwidth :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetBinWidth" c_th3i_getbinwidth ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetCellContent"
-               c_th3i_getcellcontent :: Ptr RawTH3I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetCellContent" c_th3i_getcellcontent ::
+               Ptr RawTH3I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetCellError"
-               c_th3i_getcellerror :: Ptr RawTH3I -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetCellError" c_th3i_getcellerror ::
+               Ptr RawTH3I -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetEntries"
-               c_th3i_getentries :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetEntries" c_th3i_getentries ::
+               Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3I.h TH3I_GetEffectiveEntries"
                c_th3i_geteffectiveentries :: Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetFunction"
-               c_th3i_getfunction :: Ptr RawTH3I -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetFunction" c_th3i_getfunction ::
+               Ptr RawTH3I -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetDimension"
-               c_th3i_getdimension :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetDimension" c_th3i_getdimension ::
+               Ptr RawTH3I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetKurtosis"
-               c_th3i_getkurtosis :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetKurtosis" c_th3i_getkurtosis ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetLowEdge"
-               c_th3i_getlowedge :: Ptr RawTH3I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetLowEdge" c_th3i_getlowedge ::
+               Ptr RawTH3I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getMaximumTH1"
-               c_th3i_getmaximumth1 :: Ptr RawTH3I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getMaximumTH1" c_th3i_getmaximumth1 ::
+               Ptr RawTH3I -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMaximumBin"
-               c_th3i_getmaximumbin :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMaximumBin" c_th3i_getmaximumbin ::
+               Ptr RawTH3I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMaximumStored"
-               c_th3i_getmaximumstored :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMaximumStored" c_th3i_getmaximumstored ::
+               Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getMinimumTH1"
-               c_th3i_getminimumth1 :: Ptr RawTH3I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getMinimumTH1" c_th3i_getminimumth1 ::
+               Ptr RawTH3I -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMinimumBin"
-               c_th3i_getminimumbin :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMinimumBin" c_th3i_getminimumbin ::
+               Ptr RawTH3I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMinimumStored"
-               c_th3i_getminimumstored :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMinimumStored" c_th3i_getminimumstored ::
+               Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMean"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetMean"
                c_th3i_getmean :: Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMeanError"
-               c_th3i_getmeanerror :: Ptr RawTH3I -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMeanError" c_th3i_getmeanerror ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetNbinsX"
                c_th3i_getnbinsx :: Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetNbinsY"
                c_th3i_getnbinsy :: Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetNbinsZ"
                c_th3i_getnbinsz :: Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_getQuantilesTH1"
-               c_th3i_getquantilesth1 ::
-               Ptr RawTH3I -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_getQuantilesTH1" c_th3i_getquantilesth1 ::
+               Ptr RawTH3I -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetRandom"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetRandom"
                c_th3i_getrandom :: Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetStats"
-               c_th3i_getstats :: Ptr RawTH3I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetStats"
+               c_th3i_getstats :: Ptr RawTH3I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetSumOfWeights"
-               c_th3i_getsumofweights :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetSumOfWeights" c_th3i_getsumofweights ::
+               Ptr RawTH3I -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetSumw2"
                c_th3i_getsumw2 :: Ptr RawTH3I -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetSumw2N"
                c_th3i_getsumw2n :: Ptr RawTH3I -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetRMS"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetRMS"
                c_th3i_getrms :: Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetRMSError"
-               c_th3i_getrmserror :: Ptr RawTH3I -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetSkewness"
-               c_th3i_getskewness :: Ptr RawTH3I -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3I.h TH3I_integral1"
-               c_th3i_integral1 ::
-               Ptr RawTH3I -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3I.h TH3I_interpolate1"
-               c_th3i_interpolate1 :: Ptr RawTH3I -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetRMSError" c_th3i_getrmserror ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_interpolate2"
-               c_th3i_interpolate2 ::
-               Ptr RawTH3I -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetSkewness" c_th3i_getskewness ::
+               Ptr RawTH3I -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_interpolate3"
-               c_th3i_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_interpolate3" c_th3i_interpolate3 ::
                Ptr RawTH3I -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_KolmogorovTest"
-               c_th3i_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_KolmogorovTest" c_th3i_kolmogorovtest ::
                Ptr RawTH3I -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_LabelsDeflate"
-               c_th3i_labelsdeflate :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_LabelsDeflate" c_th3i_labelsdeflate ::
+               Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_LabelsInflate"
-               c_th3i_labelsinflate :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_LabelsInflate" c_th3i_labelsinflate ::
+               Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_LabelsOption"
-               c_th3i_labelsoption :: Ptr RawTH3I -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_LabelsOption" c_th3i_labelsoption ::
+               Ptr RawTH3I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_multiflyF"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_multiflyF"
                c_th3i_multiflyf :: Ptr RawTH3I -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Multiply"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Multiply"
                c_th3i_multiply ::
                Ptr RawTH3I ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_PutStats"
-               c_th3i_putstats :: Ptr RawTH3I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_PutStats"
+               c_th3i_putstats :: Ptr RawTH3I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Rebin" c_th3i_rebin
-               ::
-               Ptr RawTH3I -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Rebin"
+               c_th3i_rebin ::
+               Ptr RawTH3I -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_RebinAxis"
                c_th3i_rebinaxis :: Ptr RawTH3I -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Rebuild"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Rebuild"
                c_th3i_rebuild :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_RecursiveRemove"
-               c_th3i_recursiveremove :: Ptr RawTH3I -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_RecursiveRemove" c_th3i_recursiveremove ::
+               Ptr RawTH3I -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Reset" c_th3i_reset
-               :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Reset"
+               c_th3i_reset :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_ResetStats"
-               c_th3i_resetstats :: Ptr RawTH3I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_ResetStats" c_th3i_resetstats ::
+               Ptr RawTH3I -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Scale" c_th3i_scale
-               :: Ptr RawTH3I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Scale"
+               c_th3i_scale :: Ptr RawTH3I -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setAxisColorA"
-               c_th3i_setaxiscolora :: Ptr RawTH3I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setAxisColorA" c_th3i_setaxiscolora ::
+               Ptr RawTH3I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetAxisRange"
-               c_th3i_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetAxisRange" c_th3i_setaxisrange ::
                Ptr RawTH3I -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetBarOffset"
-               c_th3i_setbaroffset :: Ptr RawTH3I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetBarOffset" c_th3i_setbaroffset ::
+               Ptr RawTH3I -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetBarWidth"
-               c_th3i_setbarwidth :: Ptr RawTH3I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetBarWidth" c_th3i_setbarwidth ::
+               Ptr RawTH3I -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBinContent1"
-               c_th3i_setbincontent1 :: Ptr RawTH3I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setBinContent1" c_th3i_setbincontent1 ::
+               Ptr RawTH3I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBinContent2"
-               c_th3i_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setBinContent2" c_th3i_setbincontent2 ::
                Ptr RawTH3I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBinContent3"
-               c_th3i_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setBinContent3" c_th3i_setbincontent3 ::
                Ptr RawTH3I -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBinError1"
-               c_th3i_setbinerror1 :: Ptr RawTH3I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setBinError1" c_th3i_setbinerror1 ::
+               Ptr RawTH3I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBinError2"
-               c_th3i_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setBinError2" c_th3i_setbinerror2 ::
                Ptr RawTH3I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBinError3"
-               c_th3i_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setBinError3" c_th3i_setbinerror3 ::
                Ptr RawTH3I -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBins1"
-               c_th3i_setbins1 :: Ptr RawTH3I -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_setBins1"
+               c_th3i_setbins1 :: Ptr RawTH3I -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBins2"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_setBins2"
                c_th3i_setbins2 ::
-               Ptr RawTH3I ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH3I -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setBins3"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_setBins3"
                c_th3i_setbins3 ::
                Ptr RawTH3I ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetBinsLength"
-               c_th3i_setbinslength :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetBinsLength" c_th3i_setbinslength ::
+               Ptr RawTH3I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetBuffer"
                c_th3i_setbuffer :: Ptr RawTH3I -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetCellContent"
-               c_th3i_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetCellContent" c_th3i_setcellcontent ::
                Ptr RawTH3I -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetContent"
-               c_th3i_setcontent :: Ptr RawTH3I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetContent" c_th3i_setcontent ::
+               Ptr RawTH3I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetContour"
-               c_th3i_setcontour :: Ptr RawTH3I -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetContour" c_th3i_setcontour ::
+               Ptr RawTH3I -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetContourLevel"
-               c_th3i_setcontourlevel :: Ptr RawTH3I -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetContourLevel" c_th3i_setcontourlevel ::
+               Ptr RawTH3I -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetDirectory"
-               c_th3i_setdirectory :: Ptr RawTH3I -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetDirectory" c_th3i_setdirectory ::
+               Ptr RawTH3I -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetEntries"
-               c_th3i_setentries :: Ptr RawTH3I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetEntries" c_th3i_setentries ::
+               Ptr RawTH3I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetError"
-               c_th3i_seterror :: Ptr RawTH3I -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetError"
+               c_th3i_seterror :: Ptr RawTH3I -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setLabelColorA"
-               c_th3i_setlabelcolora :: Ptr RawTH3I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setLabelColorA" c_th3i_setlabelcolora ::
+               Ptr RawTH3I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setLabelSizeA"
-               c_th3i_setlabelsizea :: Ptr RawTH3I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setLabelSizeA" c_th3i_setlabelsizea ::
+               Ptr RawTH3I -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setLabelFontA"
-               c_th3i_setlabelfonta :: Ptr RawTH3I -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setLabelFontA" c_th3i_setlabelfonta ::
+               Ptr RawTH3I -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_setLabelOffsetA"
-               c_th3i_setlabeloffseta ::
-               Ptr RawTH3I -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_setLabelOffsetA" c_th3i_setlabeloffseta ::
+               Ptr RawTH3I -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetMaximum"
-               c_th3i_setmaximum :: Ptr RawTH3I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetMaximum" c_th3i_setmaximum ::
+               Ptr RawTH3I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetMinimum"
-               c_th3i_setminimum :: Ptr RawTH3I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetMinimum" c_th3i_setminimum ::
+               Ptr RawTH3I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetNormFactor"
-               c_th3i_setnormfactor :: Ptr RawTH3I -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetNormFactor" c_th3i_setnormfactor ::
+               Ptr RawTH3I -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetStats"
-               c_th3i_setstats :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetStats"
+               c_th3i_setstats :: Ptr RawTH3I -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetOption"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetOption"
                c_th3i_setoption :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetXTitle"
                c_th3i_setxtitle :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetYTitle"
                c_th3i_setytitle :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetZTitle"
                c_th3i_setztitle :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_ShowBackground"
-               c_th3i_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_ShowBackground" c_th3i_showbackground ::
                Ptr RawTH3I -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_ShowPeaks"
                c_th3i_showpeaks ::
                Ptr RawTH3I -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Smooth"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Smooth"
                c_th3i_smooth :: Ptr RawTH3I -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Sumw2" c_th3i_sumw2
-               :: Ptr RawTH3I -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Sumw2"
+               c_th3i_sumw2 :: Ptr RawTH3I -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetName"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetName"
                c_th3i_setname :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetNameTitle"
-               c_th3i_setnametitle :: Ptr RawTH3I -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetNameTitle" c_th3i_setnametitle ::
+               Ptr RawTH3I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetTitle"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetTitle"
                c_th3i_settitle :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetLineColor"
-               c_th3i_getlinecolor :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetLineColor" c_th3i_getlinecolor ::
+               Ptr RawTH3I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetLineStyle"
-               c_th3i_getlinestyle :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetLineStyle" c_th3i_getlinestyle ::
+               Ptr RawTH3I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetLineWidth"
-               c_th3i_getlinewidth :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetLineWidth" c_th3i_getlinewidth ::
+               Ptr RawTH3I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_ResetAttLine"
-               c_th3i_resetattline :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_ResetAttLine" c_th3i_resetattline ::
+               Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetLineAttributes"
-               c_th3i_setlineattributes :: Ptr RawTH3I -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetLineAttributes" c_th3i_setlineattributes
+               :: Ptr RawTH3I -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetLineColor"
-               c_th3i_setlinecolor :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetLineColor" c_th3i_setlinecolor ::
+               Ptr RawTH3I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetLineStyle"
-               c_th3i_setlinestyle :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetLineStyle" c_th3i_setlinestyle ::
+               Ptr RawTH3I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetLineWidth"
-               c_th3i_setlinewidth :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetLineWidth" c_th3i_setlinewidth ::
+               Ptr RawTH3I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetFillColor"
-               c_th3i_setfillcolor :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetFillColor" c_th3i_setfillcolor ::
+               Ptr RawTH3I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetFillStyle"
-               c_th3i_setfillstyle :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetFillStyle" c_th3i_setfillstyle ::
+               Ptr RawTH3I -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMarkerColor"
-               c_th3i_getmarkercolor :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMarkerColor" c_th3i_getmarkercolor ::
+               Ptr RawTH3I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMarkerStyle"
-               c_th3i_getmarkerstyle :: Ptr RawTH3I -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMarkerStyle" c_th3i_getmarkerstyle ::
+               Ptr RawTH3I -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetMarkerSize"
-               c_th3i_getmarkersize :: Ptr RawTH3I -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_GetMarkerSize" c_th3i_getmarkersize ::
+               Ptr RawTH3I -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_ResetAttMarker"
-               c_th3i_resetattmarker :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_ResetAttMarker" c_th3i_resetattmarker ::
+               Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3I.h TH3I_SetMarkerAttributes"
                c_th3i_setmarkerattributes :: Ptr RawTH3I -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetMarkerColor"
-               c_th3i_setmarkercolor :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetMarkerColor" c_th3i_setmarkercolor ::
+               Ptr RawTH3I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetMarkerStyle"
-               c_th3i_setmarkerstyle :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetMarkerStyle" c_th3i_setmarkerstyle ::
+               Ptr RawTH3I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SetMarkerSize"
-               c_th3i_setmarkersize :: Ptr RawTH3I -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_SetMarkerSize" c_th3i_setmarkersize ::
+               Ptr RawTH3I -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Draw" c_th3i_draw
-               :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Clear"
+               c_th3i_clear :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_FindObject"
-               c_th3i_findobject :: Ptr RawTH3I -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Draw"
+               c_th3i_draw :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH3I.h TH3I_FindObject" c_th3i_findobject ::
+               Ptr RawTH3I -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetName"
                c_th3i_getname :: Ptr RawTH3I -> IO CString
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_IsA" c_th3i_isa ::
-               Ptr RawTH3I -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_IsA"
+               c_th3i_isa :: Ptr RawTH3I -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Paint" c_th3i_paint
-               :: Ptr RawTH3I -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Paint"
+               c_th3i_paint :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_printObj"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_printObj"
                c_th3i_printobj :: Ptr RawTH3I -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_SaveAs"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SaveAs"
                c_th3i_saveas :: Ptr RawTH3I -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_Write" c_th3i_write
-               :: Ptr RawTH3I -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Write"
+               c_th3i_write :: Ptr RawTH3I -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3I.h TH3I_delete"
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_Write_"
+               c_th3i_write_ :: Ptr RawTH3I -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_delete"
                c_th3i_delete :: Ptr RawTH3I -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_GetAt"
+               c_th3i_getat :: Ptr RawTH3I -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetArray"
+               c_th3i_setarray :: Ptr RawTH3I -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3I.h TH3I_SetAt"
+               c_th3i_setat :: Ptr RawTH3I -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH3I/Implementation.hs b/src/HROOT/Hist/TH3I/Implementation.hs
--- a/src/HROOT/Hist/TH3I/Implementation.hs
+++ b/src/HROOT/Hist/TH3I/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH3I.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH3I.RawType
 import HROOT.Hist.TH3I.FFI
 import HROOT.Hist.TH3I.Interface
 import HROOT.Hist.TH3I.Cast
+import HROOT.Hist.TH3I.RawType
+import HROOT.Hist.TH3I.Cast
+import HROOT.Hist.TH3I.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH3I TH3I
+instance () => ITH3I (TH3I) where
 
-instance ITH3 TH3I where
+instance () => ITH3 (TH3I) where
         fill3 = xform3 c_th3i_fill3
         fill3w = xform4 c_th3i_fill3w
         fitSlicesZ = xform7 c_th3i_fitslicesz
@@ -77,13 +86,12 @@
         rebinZ3 = xform2 c_th3i_rebinz3
         rebin3D = xform4 c_th3i_rebin3d
 
-instance ITArrayI TH3I
+instance () => ITArrayI (TH3I) where
 
-instance ITH1 TH3I where
+instance () => ITH1 (TH3I) where
         add = xform2 c_th3i_add
         addBinContent = xform2 c_th3i_addbincontent
         chi2Test = xform3 c_th3i_chi2test
-        computeIntegral = xform0 c_th3i_computeintegral
         directoryAutoAdd = xform1 c_th3i_directoryautoadd
         divide = xform5 c_th3i_divide
         drawCopyTH1 = xform1 c_th3i_drawcopyth1
@@ -155,9 +163,6 @@
         getRMS = xform1 c_th3i_getrms
         getRMSError = xform1 c_th3i_getrmserror
         getSkewness = xform1 c_th3i_getskewness
-        integral1 = xform3 c_th3i_integral1
-        interpolate1 = xform1 c_th3i_interpolate1
-        interpolate2 = xform2 c_th3i_interpolate2
         interpolate3 = xform3 c_th3i_interpolate3
         kolmogorovTest = xform2 c_th3i_kolmogorovtest
         labelsDeflate = xform1 c_th3i_labelsdeflate
@@ -212,14 +217,14 @@
         smooth = xform2 c_th3i_smooth
         sumw2 = xform0 c_th3i_sumw2
 
-instance ITAtt3D TH3I
+instance () => ITAtt3D (TH3I) where
 
-instance ITNamed TH3I where
+instance () => ITNamed (TH3I) where
         setName = xform1 c_th3i_setname
         setNameTitle = xform2 c_th3i_setnametitle
         setTitle = xform1 c_th3i_settitle
 
-instance ITAttLine TH3I where
+instance () => ITAttLine (TH3I) where
         getLineColor = xform0 c_th3i_getlinecolor
         getLineStyle = xform0 c_th3i_getlinestyle
         getLineWidth = xform0 c_th3i_getlinewidth
@@ -229,11 +234,11 @@
         setLineStyle = xform1 c_th3i_setlinestyle
         setLineWidth = xform1 c_th3i_setlinewidth
 
-instance ITAttFill TH3I where
+instance () => ITAttFill (TH3I) where
         setFillColor = xform1 c_th3i_setfillcolor
         setFillStyle = xform1 c_th3i_setfillstyle
 
-instance ITAttMarker TH3I where
+instance () => ITAttMarker (TH3I) where
         getMarkerColor = xform0 c_th3i_getmarkercolor
         getMarkerStyle = xform0 c_th3i_getmarkerstyle
         getMarkerSize = xform0 c_th3i_getmarkersize
@@ -243,7 +248,8 @@
         setMarkerStyle = xform1 c_th3i_setmarkerstyle
         setMarkerSize = xform1 c_th3i_setmarkersize
 
-instance ITObject TH3I where
+instance () => ITObject (TH3I) where
+        clear = xform1 c_th3i_clear
         draw = xform1 c_th3i_draw
         findObject = xform1 c_th3i_findobject
         getName = xform0 c_th3i_getname
@@ -252,8 +258,12 @@
         printObj = xform1 c_th3i_printobj
         saveAs = xform2 c_th3i_saveas
         write = xform3 c_th3i_write
+        write_ = xform0 c_th3i_write_
 
-instance IDeletable TH3I where
+instance () => IDeletable (TH3I) where
         delete = xform0 c_th3i_delete
 
-instance ITArray TH3I
+instance () => ITArray (TH3I) where
+        getAt = xform1 c_th3i_getat
+        setArray = xform1 c_th3i_setarray
+        setAt = xform2 c_th3i_setat
diff --git a/src/HROOT/Hist/TH3I/Interface.hs b/src/HROOT/Hist/TH3I/Interface.hs
--- a/src/HROOT/Hist/TH3I/Interface.hs
+++ b/src/HROOT/Hist/TH3I/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH3I.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH3.Interface
 import HROOT.Core.TArrayI.Interface
 
-class (ITH3 a, ITArrayI a) => ITH3I a
+class (ITH3 a, ITArrayI a) => ITH3I a where
 
 upcastTH3I :: forall a . (FPtr a, ITH3I a) => a -> TH3I
 upcastTH3I h
diff --git a/src/HROOT/Hist/TH3I/RawType.hs b/src/HROOT/Hist/TH3I/RawType.hs
--- a/src/HROOT/Hist/TH3I/RawType.hs
+++ b/src/HROOT/Hist/TH3I/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH3I
 
 newtype TH3I = TH3I (Ptr RawTH3I)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH3I where
+instance () => FPtr (TH3I) where
         type Raw TH3I = RawTH3I
         get_fptr (TH3I ptr) = ptr
         cast_fptr_to_obj = TH3I
diff --git a/src/HROOT/Hist/TH3S/Cast.hs b/src/HROOT/Hist/TH3S/Cast.hs
--- a/src/HROOT/Hist/TH3S/Cast.hs
+++ b/src/HROOT/Hist/TH3S/Cast.hs
@@ -8,10 +8,10 @@
 import HROOT.Hist.TH3S.RawType
 import HROOT.Hist.TH3S.Interface
 
-instance (ITH3S a, FPtr a) => Castable a (Ptr RawTH3S) where
+instance (ITH3S a, FPtr a) => Castable (a) (Ptr RawTH3S) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable TH3S (Ptr RawTH3S) where
+instance () => Castable (TH3S) (Ptr RawTH3S) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TH3S/FFI.hsc b/src/HROOT/Hist/TH3S/FFI.hsc
--- a/src/HROOT/Hist/TH3S/FFI.hsc
+++ b/src/HROOT/Hist/TH3S/FFI.hsc
@@ -1,8 +1,11 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.TH3S.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.TH3S.RawType
+import HROOT.Hist.TH3S.RawType
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1.RawType
 import HROOT.Hist.TH3.RawType
@@ -13,558 +16,646 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_fill3" c_th3s_fill3
-               :: Ptr RawTH3S -> CDouble -> CDouble -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_fill3"
+               c_th3s_fill3 ::
+               Ptr RawTH3S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_fill3w"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_fill3w"
                c_th3s_fill3w ::
                Ptr RawTH3S -> CDouble -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FitSlicesZ"
-               c_th3s_fitslicesz ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FitSlicesZ" c_th3s_fitslicesz ::
                Ptr RawTH3S ->
                  Ptr RawTF1 ->
                    CInt -> CInt -> CInt -> CInt -> CInt -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3S.h TH3S_getCorrelationFactor3"
                c_th3s_getcorrelationfactor3 ::
                Ptr RawTH3S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getCovariance3"
-               c_th3s_getcovariance3 :: Ptr RawTH3S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getCovariance3" c_th3s_getcovariance3 ::
+               Ptr RawTH3S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_rebinX3"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_rebinX3"
                c_th3s_rebinx3 :: Ptr RawTH3S -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_rebinY3"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_rebinY3"
                c_th3s_rebiny3 :: Ptr RawTH3S -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_rebinZ3"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_rebinZ3"
                c_th3s_rebinz3 :: Ptr RawTH3S -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Rebin3D"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Rebin3D"
                c_th3s_rebin3d ::
                Ptr RawTH3S -> CInt -> CInt -> CInt -> CString -> IO (Ptr RawTH3)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Add" c_th3s_add ::
-               Ptr RawTH3S -> Ptr RawTH1 -> CDouble -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Add"
+               c_th3s_add :: Ptr RawTH3S -> Ptr RawTH1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_AddBinContent"
-               c_th3s_addbincontent :: Ptr RawTH3S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_AddBinContent" c_th3s_addbincontent ::
+               Ptr RawTH3S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Chi2Test"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Chi2Test"
                c_th3s_chi2test ::
-               Ptr RawTH3S -> Ptr RawTH1 -> CString -> (Ptr CDouble) -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3S.h TH3S_ComputeIntegral"
-               c_th3s_computeintegral :: Ptr RawTH3S -> IO CDouble
+               Ptr RawTH3S -> Ptr RawTH1 -> CString -> Ptr CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_DirectoryAutoAdd"
-               c_th3s_directoryautoadd ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_DirectoryAutoAdd" c_th3s_directoryautoadd ::
                Ptr RawTH3S -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Divide"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Divide"
                c_th3s_divide ::
                Ptr RawTH3S ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_drawCopyTH1"
-               c_th3s_drawcopyth1 :: Ptr RawTH3S -> CString -> IO (Ptr RawTH3S)
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_drawCopyTH1" c_th3s_drawcopyth1 ::
+               Ptr RawTH3S -> CString -> IO (Ptr RawTH3S)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_DrawNormalized"
-               c_th3s_drawnormalized ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_DrawNormalized" c_th3s_drawnormalized ::
                Ptr RawTH3S -> CString -> CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_drawPanelTH1"
-               c_th3s_drawpanelth1 :: Ptr RawTH3S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_drawPanelTH1" c_th3s_drawpanelth1 ::
+               Ptr RawTH3S -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_BufferEmpty"
-               c_th3s_bufferempty :: Ptr RawTH3S -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_BufferEmpty" c_th3s_bufferempty ::
+               Ptr RawTH3S -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_evalF" c_th3s_evalf
-               :: Ptr RawTH3S -> Ptr RawTF1 -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_evalF"
+               c_th3s_evalf :: Ptr RawTH3S -> Ptr RawTF1 -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FFT" c_th3s_fft ::
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_FFT"
+               c_th3s_fft ::
                Ptr RawTH3S -> Ptr RawTH1 -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_fill1" c_th3s_fill1
-               :: Ptr RawTH3S -> CDouble -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_fill1"
+               c_th3s_fill1 :: Ptr RawTH3S -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_fill1w"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_fill1w"
                c_th3s_fill1w :: Ptr RawTH3S -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_fillN1"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_fillN1"
                c_th3s_filln1 ::
-               Ptr RawTH3S ->
-                 CInt -> (Ptr CDouble) -> (Ptr CDouble) -> CInt -> IO ()
+               Ptr RawTH3S -> CInt -> Ptr CDouble -> Ptr CDouble -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FillRandom"
-               c_th3s_fillrandom :: Ptr RawTH3S -> Ptr RawTH1 -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FillRandom" c_th3s_fillrandom ::
+               Ptr RawTH3S -> Ptr RawTH1 -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FindBin"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_FindBin"
                c_th3s_findbin ::
                Ptr RawTH3S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FindFixBin"
-               c_th3s_findfixbin ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FindFixBin" c_th3s_findfixbin ::
                Ptr RawTH3S -> CDouble -> CDouble -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FindFirstBinAbove"
-               c_th3s_findfirstbinabove ::
-               Ptr RawTH3S -> CDouble -> CInt -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FindFirstBinAbove" c_th3s_findfirstbinabove
+               :: Ptr RawTH3S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FindLastBinAbove"
-               c_th3s_findlastbinabove ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FindLastBinAbove" c_th3s_findlastbinabove ::
                Ptr RawTH3S -> CDouble -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Fit" c_th3s_fit ::
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Fit"
+               c_th3s_fit ::
                Ptr RawTH3S ->
                  Ptr RawTF1 -> CString -> CString -> CDouble -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FitPanelTH1"
-               c_th3s_fitpanelth1 :: Ptr RawTH3S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FitPanelTH1" c_th3s_fitpanelth1 ::
+               Ptr RawTH3S -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getNdivisionA"
-               c_th3s_getndivisiona :: Ptr RawTH3S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getNdivisionA" c_th3s_getndivisiona ::
+               Ptr RawTH3S -> CString -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getAxisColorA"
-               c_th3s_getaxiscolora :: Ptr RawTH3S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getAxisColorA" c_th3s_getaxiscolora ::
+               Ptr RawTH3S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getLabelColorA"
-               c_th3s_getlabelcolora :: Ptr RawTH3S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getLabelColorA" c_th3s_getlabelcolora ::
+               Ptr RawTH3S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getLabelFontA"
-               c_th3s_getlabelfonta :: Ptr RawTH3S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getLabelFontA" c_th3s_getlabelfonta ::
+               Ptr RawTH3S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getLabelOffsetA"
-               c_th3s_getlabeloffseta :: Ptr RawTH3S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getLabelOffsetA" c_th3s_getlabeloffseta ::
+               Ptr RawTH3S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getLabelSizeA"
-               c_th3s_getlabelsizea :: Ptr RawTH3S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getLabelSizeA" c_th3s_getlabelsizea ::
+               Ptr RawTH3S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getTitleFontA"
-               c_th3s_gettitlefonta :: Ptr RawTH3S -> CString -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getTitleFontA" c_th3s_gettitlefonta ::
+               Ptr RawTH3S -> CString -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getTitleOffsetA"
-               c_th3s_gettitleoffseta :: Ptr RawTH3S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getTitleOffsetA" c_th3s_gettitleoffseta ::
+               Ptr RawTH3S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getTitleSizeA"
-               c_th3s_gettitlesizea :: Ptr RawTH3S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getTitleSizeA" c_th3s_gettitlesizea ::
+               Ptr RawTH3S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getTickLengthA"
-               c_th3s_getticklengtha :: Ptr RawTH3S -> CString -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getTickLengthA" c_th3s_getticklengtha ::
+               Ptr RawTH3S -> CString -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBarOffset"
-               c_th3s_getbaroffset :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBarOffset" c_th3s_getbaroffset ::
+               Ptr RawTH3S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBarWidth"
-               c_th3s_getbarwidth :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBarWidth" c_th3s_getbarwidth ::
+               Ptr RawTH3S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetContour"
-               c_th3s_getcontour :: Ptr RawTH3S -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetContour" c_th3s_getcontour ::
+               Ptr RawTH3S -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetContourLevel"
-               c_th3s_getcontourlevel :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetContourLevel" c_th3s_getcontourlevel ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetContourLevelPad"
-               c_th3s_getcontourlevelpad :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetContourLevelPad" c_th3s_getcontourlevelpad
+               :: Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBin"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetBin"
                c_th3s_getbin :: Ptr RawTH3S -> CInt -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinCenter"
-               c_th3s_getbincenter :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinCenter" c_th3s_getbincenter ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinContent1"
-               c_th3s_getbincontent1 :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinContent1" c_th3s_getbincontent1 ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinContent2"
-               c_th3s_getbincontent2 :: Ptr RawTH3S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinContent2" c_th3s_getbincontent2 ::
+               Ptr RawTH3S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinContent3"
-               c_th3s_getbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinContent3" c_th3s_getbincontent3 ::
                Ptr RawTH3S -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinError1"
-               c_th3s_getbinerror1 :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinError1" c_th3s_getbinerror1 ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinError2"
-               c_th3s_getbinerror2 :: Ptr RawTH3S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinError2" c_th3s_getbinerror2 ::
+               Ptr RawTH3S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinError3"
-               c_th3s_getbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinError3" c_th3s_getbinerror3 ::
                Ptr RawTH3S -> CInt -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinLowEdge"
-               c_th3s_getbinlowedge :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinLowEdge" c_th3s_getbinlowedge ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetBinWidth"
-               c_th3s_getbinwidth :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetBinWidth" c_th3s_getbinwidth ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetCellContent"
-               c_th3s_getcellcontent :: Ptr RawTH3S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetCellContent" c_th3s_getcellcontent ::
+               Ptr RawTH3S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetCellError"
-               c_th3s_getcellerror :: Ptr RawTH3S -> CInt -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetCellError" c_th3s_getcellerror ::
+               Ptr RawTH3S -> CInt -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetEntries"
-               c_th3s_getentries :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetEntries" c_th3s_getentries ::
+               Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3S.h TH3S_GetEffectiveEntries"
                c_th3s_geteffectiveentries :: Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetFunction"
-               c_th3s_getfunction :: Ptr RawTH3S -> CString -> IO (Ptr RawTF1)
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetFunction" c_th3s_getfunction ::
+               Ptr RawTH3S -> CString -> IO (Ptr RawTF1)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetDimension"
-               c_th3s_getdimension :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetDimension" c_th3s_getdimension ::
+               Ptr RawTH3S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetKurtosis"
-               c_th3s_getkurtosis :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetKurtosis" c_th3s_getkurtosis ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetLowEdge"
-               c_th3s_getlowedge :: Ptr RawTH3S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetLowEdge" c_th3s_getlowedge ::
+               Ptr RawTH3S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getMaximumTH1"
-               c_th3s_getmaximumth1 :: Ptr RawTH3S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getMaximumTH1" c_th3s_getmaximumth1 ::
+               Ptr RawTH3S -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMaximumBin"
-               c_th3s_getmaximumbin :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMaximumBin" c_th3s_getmaximumbin ::
+               Ptr RawTH3S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMaximumStored"
-               c_th3s_getmaximumstored :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMaximumStored" c_th3s_getmaximumstored ::
+               Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getMinimumTH1"
-               c_th3s_getminimumth1 :: Ptr RawTH3S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getMinimumTH1" c_th3s_getminimumth1 ::
+               Ptr RawTH3S -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMinimumBin"
-               c_th3s_getminimumbin :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMinimumBin" c_th3s_getminimumbin ::
+               Ptr RawTH3S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMinimumStored"
-               c_th3s_getminimumstored :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMinimumStored" c_th3s_getminimumstored ::
+               Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMean"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetMean"
                c_th3s_getmean :: Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMeanError"
-               c_th3s_getmeanerror :: Ptr RawTH3S -> CInt -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMeanError" c_th3s_getmeanerror ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetNbinsX"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetNbinsX"
                c_th3s_getnbinsx :: Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetNbinsY"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetNbinsY"
                c_th3s_getnbinsy :: Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetNbinsZ"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetNbinsZ"
                c_th3s_getnbinsz :: Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_getQuantilesTH1"
-               c_th3s_getquantilesth1 ::
-               Ptr RawTH3S -> CInt -> (Ptr CDouble) -> (Ptr CDouble) -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_getQuantilesTH1" c_th3s_getquantilesth1 ::
+               Ptr RawTH3S -> CInt -> Ptr CDouble -> Ptr CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetRandom"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetRandom"
                c_th3s_getrandom :: Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetStats"
-               c_th3s_getstats :: Ptr RawTH3S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetStats"
+               c_th3s_getstats :: Ptr RawTH3S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetSumOfWeights"
-               c_th3s_getsumofweights :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetSumOfWeights" c_th3s_getsumofweights ::
+               Ptr RawTH3S -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetSumw2"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetSumw2"
                c_th3s_getsumw2 :: Ptr RawTH3S -> IO (Ptr RawTArrayD)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetSumw2N"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetSumw2N"
                c_th3s_getsumw2n :: Ptr RawTH3S -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetRMS"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetRMS"
                c_th3s_getrms :: Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetRMSError"
-               c_th3s_getrmserror :: Ptr RawTH3S -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetSkewness"
-               c_th3s_getskewness :: Ptr RawTH3S -> CInt -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3S.h TH3S_integral1"
-               c_th3s_integral1 ::
-               Ptr RawTH3S -> CInt -> CInt -> CString -> IO CDouble
-
-foreign import ccall safe "HROOTHistTH3S.h TH3S_interpolate1"
-               c_th3s_interpolate1 :: Ptr RawTH3S -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetRMSError" c_th3s_getrmserror ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_interpolate2"
-               c_th3s_interpolate2 ::
-               Ptr RawTH3S -> CDouble -> CDouble -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetSkewness" c_th3s_getskewness ::
+               Ptr RawTH3S -> CInt -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_interpolate3"
-               c_th3s_interpolate3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_interpolate3" c_th3s_interpolate3 ::
                Ptr RawTH3S -> CDouble -> CDouble -> CDouble -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_KolmogorovTest"
-               c_th3s_kolmogorovtest ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_KolmogorovTest" c_th3s_kolmogorovtest ::
                Ptr RawTH3S -> Ptr RawTH1 -> CString -> IO CDouble
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_LabelsDeflate"
-               c_th3s_labelsdeflate :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_LabelsDeflate" c_th3s_labelsdeflate ::
+               Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_LabelsInflate"
-               c_th3s_labelsinflate :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_LabelsInflate" c_th3s_labelsinflate ::
+               Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_LabelsOption"
-               c_th3s_labelsoption :: Ptr RawTH3S -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_LabelsOption" c_th3s_labelsoption ::
+               Ptr RawTH3S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_multiflyF"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_multiflyF"
                c_th3s_multiflyf :: Ptr RawTH3S -> Ptr RawTF1 -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Multiply"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Multiply"
                c_th3s_multiply ::
                Ptr RawTH3S ->
                  Ptr RawTH1 -> Ptr RawTH1 -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_PutStats"
-               c_th3s_putstats :: Ptr RawTH3S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_PutStats"
+               c_th3s_putstats :: Ptr RawTH3S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Rebin" c_th3s_rebin
-               ::
-               Ptr RawTH3S -> CInt -> CString -> (Ptr CDouble) -> IO (Ptr RawTH1)
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Rebin"
+               c_th3s_rebin ::
+               Ptr RawTH3S -> CInt -> CString -> Ptr CDouble -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_RebinAxis"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_RebinAxis"
                c_th3s_rebinaxis :: Ptr RawTH3S -> CDouble -> Ptr RawTAxis -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Rebuild"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Rebuild"
                c_th3s_rebuild :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_RecursiveRemove"
-               c_th3s_recursiveremove :: Ptr RawTH3S -> Ptr RawTObject -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_RecursiveRemove" c_th3s_recursiveremove ::
+               Ptr RawTH3S -> Ptr RawTObject -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Reset" c_th3s_reset
-               :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Reset"
+               c_th3s_reset :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_ResetStats"
-               c_th3s_resetstats :: Ptr RawTH3S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_ResetStats" c_th3s_resetstats ::
+               Ptr RawTH3S -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Scale" c_th3s_scale
-               :: Ptr RawTH3S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Scale"
+               c_th3s_scale :: Ptr RawTH3S -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setAxisColorA"
-               c_th3s_setaxiscolora :: Ptr RawTH3S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setAxisColorA" c_th3s_setaxiscolora ::
+               Ptr RawTH3S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetAxisRange"
-               c_th3s_setaxisrange ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetAxisRange" c_th3s_setaxisrange ::
                Ptr RawTH3S -> CDouble -> CDouble -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetBarOffset"
-               c_th3s_setbaroffset :: Ptr RawTH3S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetBarOffset" c_th3s_setbaroffset ::
+               Ptr RawTH3S -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetBarWidth"
-               c_th3s_setbarwidth :: Ptr RawTH3S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetBarWidth" c_th3s_setbarwidth ::
+               Ptr RawTH3S -> CFloat -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBinContent1"
-               c_th3s_setbincontent1 :: Ptr RawTH3S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setBinContent1" c_th3s_setbincontent1 ::
+               Ptr RawTH3S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBinContent2"
-               c_th3s_setbincontent2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setBinContent2" c_th3s_setbincontent2 ::
                Ptr RawTH3S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBinContent3"
-               c_th3s_setbincontent3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setBinContent3" c_th3s_setbincontent3 ::
                Ptr RawTH3S -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBinError1"
-               c_th3s_setbinerror1 :: Ptr RawTH3S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setBinError1" c_th3s_setbinerror1 ::
+               Ptr RawTH3S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBinError2"
-               c_th3s_setbinerror2 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setBinError2" c_th3s_setbinerror2 ::
                Ptr RawTH3S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBinError3"
-               c_th3s_setbinerror3 ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setBinError3" c_th3s_setbinerror3 ::
                Ptr RawTH3S -> CInt -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBins1"
-               c_th3s_setbins1 :: Ptr RawTH3S -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_setBins1"
+               c_th3s_setbins1 :: Ptr RawTH3S -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBins2"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_setBins2"
                c_th3s_setbins2 ::
-               Ptr RawTH3S ->
-                 CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+               Ptr RawTH3S -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setBins3"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_setBins3"
                c_th3s_setbins3 ::
                Ptr RawTH3S ->
                  CInt ->
-                   (Ptr CDouble) ->
-                     CInt -> (Ptr CDouble) -> CInt -> (Ptr CDouble) -> IO ()
+                   Ptr CDouble -> CInt -> Ptr CDouble -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetBinsLength"
-               c_th3s_setbinslength :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetBinsLength" c_th3s_setbinslength ::
+               Ptr RawTH3S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetBuffer"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetBuffer"
                c_th3s_setbuffer :: Ptr RawTH3S -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetCellContent"
-               c_th3s_setcellcontent ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetCellContent" c_th3s_setcellcontent ::
                Ptr RawTH3S -> CInt -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetContent"
-               c_th3s_setcontent :: Ptr RawTH3S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetContent" c_th3s_setcontent ::
+               Ptr RawTH3S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetContour"
-               c_th3s_setcontour :: Ptr RawTH3S -> CInt -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetContour" c_th3s_setcontour ::
+               Ptr RawTH3S -> CInt -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetContourLevel"
-               c_th3s_setcontourlevel :: Ptr RawTH3S -> CInt -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetContourLevel" c_th3s_setcontourlevel ::
+               Ptr RawTH3S -> CInt -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetDirectory"
-               c_th3s_setdirectory :: Ptr RawTH3S -> Ptr RawTDirectory -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetDirectory" c_th3s_setdirectory ::
+               Ptr RawTH3S -> Ptr RawTDirectory -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetEntries"
-               c_th3s_setentries :: Ptr RawTH3S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetEntries" c_th3s_setentries ::
+               Ptr RawTH3S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetError"
-               c_th3s_seterror :: Ptr RawTH3S -> (Ptr CDouble) -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetError"
+               c_th3s_seterror :: Ptr RawTH3S -> Ptr CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setLabelColorA"
-               c_th3s_setlabelcolora :: Ptr RawTH3S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setLabelColorA" c_th3s_setlabelcolora ::
+               Ptr RawTH3S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setLabelSizeA"
-               c_th3s_setlabelsizea :: Ptr RawTH3S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setLabelSizeA" c_th3s_setlabelsizea ::
+               Ptr RawTH3S -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setLabelFontA"
-               c_th3s_setlabelfonta :: Ptr RawTH3S -> CInt -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setLabelFontA" c_th3s_setlabelfonta ::
+               Ptr RawTH3S -> CShort -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_setLabelOffsetA"
-               c_th3s_setlabeloffseta ::
-               Ptr RawTH3S -> CDouble -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_setLabelOffsetA" c_th3s_setlabeloffseta ::
+               Ptr RawTH3S -> CFloat -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetMaximum"
-               c_th3s_setmaximum :: Ptr RawTH3S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetMaximum" c_th3s_setmaximum ::
+               Ptr RawTH3S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetMinimum"
-               c_th3s_setminimum :: Ptr RawTH3S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetMinimum" c_th3s_setminimum ::
+               Ptr RawTH3S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetNormFactor"
-               c_th3s_setnormfactor :: Ptr RawTH3S -> CDouble -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetNormFactor" c_th3s_setnormfactor ::
+               Ptr RawTH3S -> CDouble -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetStats"
-               c_th3s_setstats :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetStats"
+               c_th3s_setstats :: Ptr RawTH3S -> CBool -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetOption"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetOption"
                c_th3s_setoption :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetXTitle"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetXTitle"
                c_th3s_setxtitle :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetYTitle"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetYTitle"
                c_th3s_setytitle :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetZTitle"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetZTitle"
                c_th3s_setztitle :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_ShowBackground"
-               c_th3s_showbackground ::
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_ShowBackground" c_th3s_showbackground ::
                Ptr RawTH3S -> CInt -> CString -> IO (Ptr RawTH1)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_ShowPeaks"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_ShowPeaks"
                c_th3s_showpeaks ::
                Ptr RawTH3S -> CDouble -> CString -> CDouble -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Smooth"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Smooth"
                c_th3s_smooth :: Ptr RawTH3S -> CInt -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Sumw2" c_th3s_sumw2
-               :: Ptr RawTH3S -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Sumw2"
+               c_th3s_sumw2 :: Ptr RawTH3S -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetName"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetName"
                c_th3s_setname :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetNameTitle"
-               c_th3s_setnametitle :: Ptr RawTH3S -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetNameTitle" c_th3s_setnametitle ::
+               Ptr RawTH3S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetTitle"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetTitle"
                c_th3s_settitle :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetLineColor"
-               c_th3s_getlinecolor :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetLineColor" c_th3s_getlinecolor ::
+               Ptr RawTH3S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetLineStyle"
-               c_th3s_getlinestyle :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetLineStyle" c_th3s_getlinestyle ::
+               Ptr RawTH3S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetLineWidth"
-               c_th3s_getlinewidth :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetLineWidth" c_th3s_getlinewidth ::
+               Ptr RawTH3S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_ResetAttLine"
-               c_th3s_resetattline :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_ResetAttLine" c_th3s_resetattline ::
+               Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetLineAttributes"
-               c_th3s_setlineattributes :: Ptr RawTH3S -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetLineAttributes" c_th3s_setlineattributes
+               :: Ptr RawTH3S -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetLineColor"
-               c_th3s_setlinecolor :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetLineColor" c_th3s_setlinecolor ::
+               Ptr RawTH3S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetLineStyle"
-               c_th3s_setlinestyle :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetLineStyle" c_th3s_setlinestyle ::
+               Ptr RawTH3S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetLineWidth"
-               c_th3s_setlinewidth :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetLineWidth" c_th3s_setlinewidth ::
+               Ptr RawTH3S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetFillColor"
-               c_th3s_setfillcolor :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetFillColor" c_th3s_setfillcolor ::
+               Ptr RawTH3S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetFillStyle"
-               c_th3s_setfillstyle :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetFillStyle" c_th3s_setfillstyle ::
+               Ptr RawTH3S -> CInt -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMarkerColor"
-               c_th3s_getmarkercolor :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMarkerColor" c_th3s_getmarkercolor ::
+               Ptr RawTH3S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMarkerStyle"
-               c_th3s_getmarkerstyle :: Ptr RawTH3S -> IO CInt
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMarkerStyle" c_th3s_getmarkerstyle ::
+               Ptr RawTH3S -> IO CShort
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetMarkerSize"
-               c_th3s_getmarkersize :: Ptr RawTH3S -> IO CDouble
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_GetMarkerSize" c_th3s_getmarkersize ::
+               Ptr RawTH3S -> IO CFloat
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_ResetAttMarker"
-               c_th3s_resetattmarker :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_ResetAttMarker" c_th3s_resetattmarker ::
+               Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe
+foreign import ccall interruptible
                "HROOTHistTH3S.h TH3S_SetMarkerAttributes"
                c_th3s_setmarkerattributes :: Ptr RawTH3S -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetMarkerColor"
-               c_th3s_setmarkercolor :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetMarkerColor" c_th3s_setmarkercolor ::
+               Ptr RawTH3S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetMarkerStyle"
-               c_th3s_setmarkerstyle :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetMarkerStyle" c_th3s_setmarkerstyle ::
+               Ptr RawTH3S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SetMarkerSize"
-               c_th3s_setmarkersize :: Ptr RawTH3S -> CInt -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_SetMarkerSize" c_th3s_setmarkersize ::
+               Ptr RawTH3S -> CShort -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Draw" c_th3s_draw
-               :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Clear"
+               c_th3s_clear :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_FindObject"
-               c_th3s_findobject :: Ptr RawTH3S -> CString -> IO (Ptr RawTObject)
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Draw"
+               c_th3s_draw :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_GetName"
+foreign import ccall interruptible
+               "HROOTHistTH3S.h TH3S_FindObject" c_th3s_findobject ::
+               Ptr RawTH3S -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetName"
                c_th3s_getname :: Ptr RawTH3S -> IO CString
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_IsA" c_th3s_isa ::
-               Ptr RawTH3S -> IO (Ptr RawTClass)
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_IsA"
+               c_th3s_isa :: Ptr RawTH3S -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Paint" c_th3s_paint
-               :: Ptr RawTH3S -> CString -> IO ()
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Paint"
+               c_th3s_paint :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_printObj"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_printObj"
                c_th3s_printobj :: Ptr RawTH3S -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_SaveAs"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SaveAs"
                c_th3s_saveas :: Ptr RawTH3S -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_Write" c_th3s_write
-               :: Ptr RawTH3S -> CString -> CInt -> CInt -> IO CInt
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Write"
+               c_th3s_write :: Ptr RawTH3S -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTH3S.h TH3S_delete"
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_Write_"
+               c_th3s_write_ :: Ptr RawTH3S -> IO CInt
+
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_delete"
                c_th3s_delete :: Ptr RawTH3S -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_GetAt"
+               c_th3s_getat :: Ptr RawTH3S -> CInt -> IO CDouble
+
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetArray"
+               c_th3s_setarray :: Ptr RawTH3S -> CInt -> IO ()
+
+foreign import ccall interruptible "HROOTHistTH3S.h TH3S_SetAt"
+               c_th3s_setat :: Ptr RawTH3S -> CDouble -> CInt -> IO ()
diff --git a/src/HROOT/Hist/TH3S/Implementation.hs b/src/HROOT/Hist/TH3S/Implementation.hs
--- a/src/HROOT/Hist/TH3S/Implementation.hs
+++ b/src/HROOT/Hist/TH3S/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.TH3S.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.TH3S.RawType
 import HROOT.Hist.TH3S.FFI
 import HROOT.Hist.TH3S.Interface
 import HROOT.Hist.TH3S.Cast
+import HROOT.Hist.TH3S.RawType
+import HROOT.Hist.TH3S.Cast
+import HROOT.Hist.TH3S.Interface
 import HROOT.Hist.TH1D.RawType
 import HROOT.Hist.TH1D.Cast
 import HROOT.Hist.TH1D.Interface
@@ -57,16 +66,16 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 import HROOT.Core.TArray.RawType
 import HROOT.Core.TArray.Cast
 import HROOT.Core.TArray.Interface
 
-instance ITH3S TH3S
+instance () => ITH3S (TH3S) where
 
-instance ITH3 TH3S where
+instance () => ITH3 (TH3S) where
         fill3 = xform3 c_th3s_fill3
         fill3w = xform4 c_th3s_fill3w
         fitSlicesZ = xform7 c_th3s_fitslicesz
@@ -77,13 +86,12 @@
         rebinZ3 = xform2 c_th3s_rebinz3
         rebin3D = xform4 c_th3s_rebin3d
 
-instance ITArrayS TH3S
+instance () => ITArrayS (TH3S) where
 
-instance ITH1 TH3S where
+instance () => ITH1 (TH3S) where
         add = xform2 c_th3s_add
         addBinContent = xform2 c_th3s_addbincontent
         chi2Test = xform3 c_th3s_chi2test
-        computeIntegral = xform0 c_th3s_computeintegral
         directoryAutoAdd = xform1 c_th3s_directoryautoadd
         divide = xform5 c_th3s_divide
         drawCopyTH1 = xform1 c_th3s_drawcopyth1
@@ -155,9 +163,6 @@
         getRMS = xform1 c_th3s_getrms
         getRMSError = xform1 c_th3s_getrmserror
         getSkewness = xform1 c_th3s_getskewness
-        integral1 = xform3 c_th3s_integral1
-        interpolate1 = xform1 c_th3s_interpolate1
-        interpolate2 = xform2 c_th3s_interpolate2
         interpolate3 = xform3 c_th3s_interpolate3
         kolmogorovTest = xform2 c_th3s_kolmogorovtest
         labelsDeflate = xform1 c_th3s_labelsdeflate
@@ -212,14 +217,14 @@
         smooth = xform2 c_th3s_smooth
         sumw2 = xform0 c_th3s_sumw2
 
-instance ITAtt3D TH3S
+instance () => ITAtt3D (TH3S) where
 
-instance ITNamed TH3S where
+instance () => ITNamed (TH3S) where
         setName = xform1 c_th3s_setname
         setNameTitle = xform2 c_th3s_setnametitle
         setTitle = xform1 c_th3s_settitle
 
-instance ITAttLine TH3S where
+instance () => ITAttLine (TH3S) where
         getLineColor = xform0 c_th3s_getlinecolor
         getLineStyle = xform0 c_th3s_getlinestyle
         getLineWidth = xform0 c_th3s_getlinewidth
@@ -229,11 +234,11 @@
         setLineStyle = xform1 c_th3s_setlinestyle
         setLineWidth = xform1 c_th3s_setlinewidth
 
-instance ITAttFill TH3S where
+instance () => ITAttFill (TH3S) where
         setFillColor = xform1 c_th3s_setfillcolor
         setFillStyle = xform1 c_th3s_setfillstyle
 
-instance ITAttMarker TH3S where
+instance () => ITAttMarker (TH3S) where
         getMarkerColor = xform0 c_th3s_getmarkercolor
         getMarkerStyle = xform0 c_th3s_getmarkerstyle
         getMarkerSize = xform0 c_th3s_getmarkersize
@@ -243,7 +248,8 @@
         setMarkerStyle = xform1 c_th3s_setmarkerstyle
         setMarkerSize = xform1 c_th3s_setmarkersize
 
-instance ITObject TH3S where
+instance () => ITObject (TH3S) where
+        clear = xform1 c_th3s_clear
         draw = xform1 c_th3s_draw
         findObject = xform1 c_th3s_findobject
         getName = xform0 c_th3s_getname
@@ -252,8 +258,12 @@
         printObj = xform1 c_th3s_printobj
         saveAs = xform2 c_th3s_saveas
         write = xform3 c_th3s_write
+        write_ = xform0 c_th3s_write_
 
-instance IDeletable TH3S where
+instance () => IDeletable (TH3S) where
         delete = xform0 c_th3s_delete
 
-instance ITArray TH3S
+instance () => ITArray (TH3S) where
+        getAt = xform1 c_th3s_getat
+        setArray = xform1 c_th3s_setarray
+        setAt = xform2 c_th3s_setat
diff --git a/src/HROOT/Hist/TH3S/Interface.hs b/src/HROOT/Hist/TH3S/Interface.hs
--- a/src/HROOT/Hist/TH3S/Interface.hs
+++ b/src/HROOT/Hist/TH3S/Interface.hs
@@ -4,6 +4,7 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.TH3S.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
@@ -11,7 +12,7 @@
 import HROOT.Hist.TH3.Interface
 import HROOT.Core.TArrayS.Interface
 
-class (ITH3 a, ITArrayS a) => ITH3S a
+class (ITH3 a, ITArrayS a) => ITH3S a where
 
 upcastTH3S :: forall a . (FPtr a, ITH3S a) => a -> TH3S
 upcastTH3S h
diff --git a/src/HROOT/Hist/TH3S/RawType.hs b/src/HROOT/Hist/TH3S/RawType.hs
--- a/src/HROOT/Hist/TH3S/RawType.hs
+++ b/src/HROOT/Hist/TH3S/RawType.hs
@@ -8,9 +8,9 @@
 data RawTH3S
 
 newtype TH3S = TH3S (Ptr RawTH3S)
-             deriving (Eq, Ord, Show)
+                 deriving (Eq, Ord, Show)
 
-instance FPtr TH3S where
+instance () => FPtr (TH3S) where
         type Raw TH3S = RawTH3S
         get_fptr (TH3S ptr) = ptr
         cast_fptr_to_obj = TH3S
diff --git a/src/HROOT/Hist/THStack/Cast.hs b/src/HROOT/Hist/THStack/Cast.hs
--- a/src/HROOT/Hist/THStack/Cast.hs
+++ b/src/HROOT/Hist/THStack/Cast.hs
@@ -8,10 +8,11 @@
 import HROOT.Hist.THStack.RawType
 import HROOT.Hist.THStack.Interface
 
-instance (ITHStack a, FPtr a) => Castable a (Ptr RawTHStack) where
+instance (ITHStack a, FPtr a) => Castable (a) (Ptr RawTHStack)
+         where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
 
-instance Castable THStack (Ptr RawTHStack) where
+instance () => Castable (THStack) (Ptr RawTHStack) where
         cast x f = f (castPtr (get_fptr x))
         uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/THStack/FFI.hsc b/src/HROOT/Hist/THStack/FFI.hsc
--- a/src/HROOT/Hist/THStack/FFI.hsc
+++ b/src/HROOT/Hist/THStack/FFI.hsc
@@ -1,49 +1,69 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
 module HROOT.Hist.THStack.FFI where
+import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import HROOT.Hist.THStack.RawType
+import HROOT.Hist.THStack.RawType
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TClass.RawType
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_SetName"
-               c_thstack_setname :: Ptr RawTHStack -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_SetName" c_thstack_setname ::
+               Ptr RawTHStack -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_SetNameTitle"
-               c_thstack_setnametitle ::
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_SetNameTitle" c_thstack_setnametitle ::
                Ptr RawTHStack -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_SetTitle"
-               c_thstack_settitle :: Ptr RawTHStack -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_SetTitle" c_thstack_settitle ::
+               Ptr RawTHStack -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_Draw"
-               c_thstack_draw :: Ptr RawTHStack -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_Clear" c_thstack_clear ::
+               Ptr RawTHStack -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_FindObject"
-               c_thstack_findobject ::
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_Draw" c_thstack_draw ::
+               Ptr RawTHStack -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_FindObject" c_thstack_findobject ::
                Ptr RawTHStack -> CString -> IO (Ptr RawTObject)
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_GetName"
-               c_thstack_getname :: Ptr RawTHStack -> IO CString
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_GetName" c_thstack_getname ::
+               Ptr RawTHStack -> IO CString
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_IsA"
+foreign import ccall interruptible "HROOTHistTHStack.h THStack_IsA"
                c_thstack_isa :: Ptr RawTHStack -> IO (Ptr RawTClass)
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_Paint"
-               c_thstack_paint :: Ptr RawTHStack -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_Paint" c_thstack_paint ::
+               Ptr RawTHStack -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_printObj"
-               c_thstack_printobj :: Ptr RawTHStack -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_printObj" c_thstack_printobj ::
+               Ptr RawTHStack -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_SaveAs"
-               c_thstack_saveas :: Ptr RawTHStack -> CString -> CString -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_SaveAs" c_thstack_saveas ::
+               Ptr RawTHStack -> CString -> CString -> IO ()
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_Write"
-               c_thstack_write ::
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_Write" c_thstack_write ::
                Ptr RawTHStack -> CString -> CInt -> CInt -> IO CInt
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_delete"
-               c_thstack_delete :: Ptr RawTHStack -> IO ()
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_Write_" c_thstack_write_ ::
+               Ptr RawTHStack -> IO CInt
 
-foreign import ccall safe "HROOTHistTHStack.h THStack_newTHStack"
-               c_thstack_newthstack :: CString -> CString -> IO (Ptr RawTHStack)
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_delete" c_thstack_delete ::
+               Ptr RawTHStack -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTHStack.h THStack_newTHStack" c_thstack_newthstack ::
+               CString -> CString -> IO (Ptr RawTHStack)
diff --git a/src/HROOT/Hist/THStack/Implementation.hs b/src/HROOT/Hist/THStack/Implementation.hs
--- a/src/HROOT/Hist/THStack/Implementation.hs
+++ b/src/HROOT/Hist/THStack/Implementation.hs
@@ -1,17 +1,26 @@
 {-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
   ForeignFunctionInterface, IncoherentInstances,
-  MultiParamTypeClasses, OverlappingInstances, TypeFamilies,
-  TypeSynonymInstances #-}
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
 module HROOT.Hist.THStack.Implementation where
-import FFICXX.Runtime.Cast
+import Data.Monoid
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
 import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
 import HROOT.Hist.THStack.RawType
 import HROOT.Hist.THStack.FFI
 import HROOT.Hist.THStack.Interface
 import HROOT.Hist.THStack.Cast
+import HROOT.Hist.THStack.RawType
+import HROOT.Hist.THStack.Cast
+import HROOT.Hist.THStack.Interface
 import HROOT.Core.TClass.RawType
 import HROOT.Core.TClass.Cast
 import HROOT.Core.TClass.Interface
@@ -21,18 +30,19 @@
 import HROOT.Core.TObject.RawType
 import HROOT.Core.TObject.Cast
 import HROOT.Core.TObject.Interface
-import HROOT.Core.Deletable.RawType
-import HROOT.Core.Deletable.Cast
-import HROOT.Core.Deletable.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
 
-instance ITHStack THStack
+instance () => ITHStack (THStack) where
 
-instance ITNamed THStack where
+instance () => ITNamed (THStack) where
         setName = xform1 c_thstack_setname
         setNameTitle = xform2 c_thstack_setnametitle
         setTitle = xform1 c_thstack_settitle
 
-instance ITObject THStack where
+instance () => ITObject (THStack) where
+        clear = xform1 c_thstack_clear
         draw = xform1 c_thstack_draw
         findObject = xform1 c_thstack_findobject
         getName = xform0 c_thstack_getname
@@ -41,8 +51,9 @@
         printObj = xform1 c_thstack_printobj
         saveAs = xform2 c_thstack_saveas
         write = xform3 c_thstack_write
+        write_ = xform0 c_thstack_write_
 
-instance IDeletable THStack where
+instance () => IDeletable (THStack) where
         delete = xform0 c_thstack_delete
 
 newTHStack ::
diff --git a/src/HROOT/Hist/THStack/Interface.hs b/src/HROOT/Hist/THStack/Interface.hs
--- a/src/HROOT/Hist/THStack/Interface.hs
+++ b/src/HROOT/Hist/THStack/Interface.hs
@@ -4,13 +4,14 @@
   TypeSynonymInstances #-}
 module HROOT.Hist.THStack.Interface where
 import Data.Word
+import Data.Int
 import Foreign.C
 import Foreign.Ptr
 import FFICXX.Runtime.Cast
 import HROOT.Hist.THStack.RawType
 import HROOT.Core.TNamed.Interface
 
-class ITNamed a => ITHStack a
+class (ITNamed a) => ITHStack a where
 
 upcastTHStack :: forall a . (FPtr a, ITHStack a) => a -> THStack
 upcastTHStack h
diff --git a/src/HROOT/Hist/THStack/RawType.hs b/src/HROOT/Hist/THStack/RawType.hs
--- a/src/HROOT/Hist/THStack/RawType.hs
+++ b/src/HROOT/Hist/THStack/RawType.hs
@@ -8,9 +8,9 @@
 data RawTHStack
 
 newtype THStack = THStack (Ptr RawTHStack)
-                deriving (Eq, Ord, Show)
+                    deriving (Eq, Ord, Show)
 
-instance FPtr THStack where
+instance () => FPtr (THStack) where
         type Raw THStack = RawTHStack
         get_fptr (THStack ptr) = ptr
         cast_fptr_to_obj = THStack
diff --git a/src/HROOT/Hist/TMultiGraph.hs b/src/HROOT/Hist/TMultiGraph.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TMultiGraph.hs
@@ -0,0 +1,7 @@
+module HROOT.Hist.TMultiGraph
+       (TMultiGraph(..), ITMultiGraph(..), upcastTMultiGraph,
+        downcastTMultiGraph, newTMultiGraph)
+       where
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Hist.TMultiGraph.Interface
+import HROOT.Hist.TMultiGraph.Implementation
diff --git a/src/HROOT/Hist/TMultiGraph/Cast.hs b/src/HROOT/Hist/TMultiGraph/Cast.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TMultiGraph/Cast.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE FlexibleInstances, FlexibleContexts, TypeFamilies,
+  MultiParamTypeClasses, OverlappingInstances, IncoherentInstances
+  #-}
+module HROOT.Hist.TMultiGraph.Cast where
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
+import System.IO.Unsafe
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Hist.TMultiGraph.Interface
+
+instance (ITMultiGraph a, FPtr a) =>
+         Castable (a) (Ptr RawTMultiGraph)
+         where
+        cast x f = f (castPtr (get_fptr x))
+        uncast x f = f (cast_fptr_to_obj (castPtr x))
+
+instance () => Castable (TMultiGraph) (Ptr RawTMultiGraph) where
+        cast x f = f (castPtr (get_fptr x))
+        uncast x f = f (cast_fptr_to_obj (castPtr x))
diff --git a/src/HROOT/Hist/TMultiGraph/FFI.hsc b/src/HROOT/Hist/TMultiGraph/FFI.hsc
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TMultiGraph/FFI.hsc
@@ -0,0 +1,78 @@
+{-# LANGUAGE ForeignFunctionInterface, InterruptibleFFI #-}
+module HROOT.Hist.TMultiGraph.FFI where
+import Data.Word
+import Data.Int
+import Foreign.C
+import Foreign.Ptr
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Core.TObject.RawType
+import HROOT.Core.TClass.RawType
+import HROOT.Hist.TGraph.RawType
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_SetName" c_tmultigraph_setname
+               :: Ptr RawTMultiGraph -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_SetNameTitle"
+               c_tmultigraph_setnametitle ::
+               Ptr RawTMultiGraph -> CString -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_SetTitle"
+               c_tmultigraph_settitle :: Ptr RawTMultiGraph -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_Clear" c_tmultigraph_clear ::
+               Ptr RawTMultiGraph -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_Draw" c_tmultigraph_draw ::
+               Ptr RawTMultiGraph -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_FindObject"
+               c_tmultigraph_findobject ::
+               Ptr RawTMultiGraph -> CString -> IO (Ptr RawTObject)
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_GetName" c_tmultigraph_getname
+               :: Ptr RawTMultiGraph -> IO CString
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_IsA" c_tmultigraph_isa ::
+               Ptr RawTMultiGraph -> IO (Ptr RawTClass)
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_Paint" c_tmultigraph_paint ::
+               Ptr RawTMultiGraph -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_printObj"
+               c_tmultigraph_printobj :: Ptr RawTMultiGraph -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_SaveAs" c_tmultigraph_saveas ::
+               Ptr RawTMultiGraph -> CString -> CString -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_Write" c_tmultigraph_write ::
+               Ptr RawTMultiGraph -> CString -> CInt -> CInt -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_Write_" c_tmultigraph_write_ ::
+               Ptr RawTMultiGraph -> IO CInt
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_delete" c_tmultigraph_delete ::
+               Ptr RawTMultiGraph -> IO ()
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_newTMultiGraph"
+               c_tmultigraph_newtmultigraph ::
+               CString -> CString -> IO (Ptr RawTMultiGraph)
+
+foreign import ccall interruptible
+               "HROOTHistTMultiGraph.h TMultiGraph_AddG" c_tmultigraph_addg ::
+               Ptr RawTMultiGraph -> Ptr RawTGraph -> CString -> IO ()
diff --git a/src/HROOT/Hist/TMultiGraph/Implementation.hs b/src/HROOT/Hist/TMultiGraph/Implementation.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TMultiGraph/Implementation.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE EmptyDataDecls, FlexibleContexts, FlexibleInstances,
+  ForeignFunctionInterface, IncoherentInstances,
+  MultiParamTypeClasses, OverlappingInstances, TemplateHaskell,
+  TypeFamilies, TypeSynonymInstances #-}
+module HROOT.Hist.TMultiGraph.Implementation where
+import Data.Monoid
+import Data.Word
+import Data.Int
+import Foreign.C
+import Foreign.Ptr
+import Language.Haskell.TH
+import Language.Haskell.TH.Syntax
+import System.IO.Unsafe
+import FFICXX.Runtime.Cast
+import FFICXX.Runtime.CodeGen.Cxx
+import FFICXX.Runtime.TH
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Hist.TMultiGraph.FFI
+import HROOT.Hist.TMultiGraph.Interface
+import HROOT.Hist.TMultiGraph.Cast
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Hist.TMultiGraph.Cast
+import HROOT.Hist.TMultiGraph.Interface
+import HROOT.Core.TClass.RawType
+import HROOT.Core.TClass.Cast
+import HROOT.Core.TClass.Interface
+import HROOT.Hist.TGraph.RawType
+import HROOT.Hist.TGraph.Cast
+import HROOT.Hist.TGraph.Interface
+import HROOT.Core.TNamed.RawType
+import HROOT.Core.TNamed.Cast
+import HROOT.Core.TNamed.Interface
+import HROOT.Core.TObject.RawType
+import HROOT.Core.TObject.Cast
+import HROOT.Core.TObject.Interface
+import STD.Deletable.RawType
+import STD.Deletable.Cast
+import STD.Deletable.Interface
+
+instance () => ITMultiGraph (TMultiGraph) where
+        addG = xform2 c_tmultigraph_addg
+
+instance () => ITNamed (TMultiGraph) where
+        setName = xform1 c_tmultigraph_setname
+        setNameTitle = xform2 c_tmultigraph_setnametitle
+        setTitle = xform1 c_tmultigraph_settitle
+
+instance () => ITObject (TMultiGraph) where
+        clear = xform1 c_tmultigraph_clear
+        draw = xform1 c_tmultigraph_draw
+        findObject = xform1 c_tmultigraph_findobject
+        getName = xform0 c_tmultigraph_getname
+        isA = xform0 c_tmultigraph_isa
+        paint = xform1 c_tmultigraph_paint
+        printObj = xform1 c_tmultigraph_printobj
+        saveAs = xform2 c_tmultigraph_saveas
+        write = xform3 c_tmultigraph_write
+        write_ = xform0 c_tmultigraph_write_
+
+instance () => IDeletable (TMultiGraph) where
+        delete = xform0 c_tmultigraph_delete
+
+newTMultiGraph ::
+                 (Castable c1 CString, Castable c0 CString) =>
+                 c0 -> c1 -> IO TMultiGraph
+newTMultiGraph = xform1 c_tmultigraph_newtmultigraph
diff --git a/src/HROOT/Hist/TMultiGraph/Interface.hs b/src/HROOT/Hist/TMultiGraph/Interface.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TMultiGraph/Interface.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE EmptyDataDecls, ExistentialQuantification,
+  FlexibleContexts, FlexibleInstances, ForeignFunctionInterface,
+  MultiParamTypeClasses, ScopedTypeVariables, TypeFamilies,
+  TypeSynonymInstances #-}
+module HROOT.Hist.TMultiGraph.Interface where
+import Data.Word
+import Data.Int
+import Foreign.C
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
+import HROOT.Hist.TMultiGraph.RawType
+import HROOT.Core.TNamed.Interface
+import HROOT.Hist.TGraph.Interface
+
+class (ITNamed a) => ITMultiGraph a where
+        addG ::
+               (Castable c1 CString, ITGraph c0, FPtr c0) =>
+               a -> c0 -> c1 -> IO ()
+
+upcastTMultiGraph ::
+                  forall a . (FPtr a, ITMultiGraph a) => a -> TMultiGraph
+upcastTMultiGraph h
+  = let fh = get_fptr h
+        fh2 :: Ptr RawTMultiGraph = castPtr fh
+      in cast_fptr_to_obj fh2
+
+downcastTMultiGraph ::
+                    forall a . (FPtr a, ITMultiGraph a) => TMultiGraph -> a
+downcastTMultiGraph h
+  = let fh = get_fptr h
+        fh2 = castPtr fh
+      in cast_fptr_to_obj fh2
diff --git a/src/HROOT/Hist/TMultiGraph/RawType.hs b/src/HROOT/Hist/TMultiGraph/RawType.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/TMultiGraph/RawType.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE ForeignFunctionInterface, TypeFamilies,
+  MultiParamTypeClasses, FlexibleInstances, TypeSynonymInstances,
+  EmptyDataDecls, ExistentialQuantification, ScopedTypeVariables #-}
+module HROOT.Hist.TMultiGraph.RawType where
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
+
+data RawTMultiGraph
+
+newtype TMultiGraph = TMultiGraph (Ptr RawTMultiGraph)
+                        deriving (Eq, Ord, Show)
+
+instance () => FPtr (TMultiGraph) where
+        type Raw TMultiGraph = RawTMultiGraph
+        get_fptr (TMultiGraph ptr) = ptr
+        cast_fptr_to_obj = TMultiGraph
diff --git a/src/HROOT/Hist/Template.hs b/src/HROOT/Hist/Template.hs
new file mode 100644
--- /dev/null
+++ b/src/HROOT/Hist/Template.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE EmptyDataDecls, FlexibleInstances,
+  ForeignFunctionInterface, InterruptibleFFI, MultiParamTypeClasses,
+  TypeFamilies #-}
+module HROOT.Hist.Template () where
+import Foreign.C.Types
+import Foreign.Ptr
+import FFICXX.Runtime.Cast
