diff --git a/bindings-mpdecimal.cabal b/bindings-mpdecimal.cabal
--- a/bindings-mpdecimal.cabal
+++ b/bindings-mpdecimal.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.6.0.0
+version:             0.8.0.0
 
 -- A short (one-line) description of the package.
 synopsis:  bindings to mpdecimal library
diff --git a/lib/Bindings/Mpdecimal.hsc b/lib/Bindings/Mpdecimal.hsc
--- a/lib/Bindings/Mpdecimal.hsc
+++ b/lib/Bindings/Mpdecimal.hsc
@@ -5,27 +5,28 @@
 import Foreign.Ptr
 #strict_import
 
--- -- Sizes and integral types
+--  Version
+#ccall mpd_version , IO CString
+
+#num MPD_MAJOR_VERSION
+#num MPD_MINOR_VERSION
+#num MPD_MICRO_VERSION
+#num NULL
+
+#num MPD_VERSION
+
+--  Sizes and integral types
 #integral_t mpd_uint_t
 #integral_t mpd_size_t
 #integral_t mpd_ssize_t
 #integral_t uint32_t
 #integral_t size_t
 #integral_t uint8_t
+#integral_t uint16_t
 #integral_t int32_t
 #integral_t uint64_t
 #integral_t int64_t
-#integral_t uint16_t
 
--- - Version
-#ccall mpd_version , IO CString
-
-#num MPD_MAJOR_VERSION
-#num MPD_MINOR_VERSION
-#num MPD_MICRO_VERSION
-
-#num MPD_VERSION
-
 --  Configuration
 
 --  Modular and base arithmetic
@@ -90,6 +91,9 @@
 #num MPD_CLAMP_IEEE_754
 #num MPD_CLAMP_GUARD
 
+#globalvar mpd_round_string , CChar
+#globalvar mpd_clamp_string , CChar
+
 {- typedef struct mpd_context_t {
             mpd_ssize_t prec;
             mpd_ssize_t emax;
@@ -154,7 +158,7 @@
 
 #num MPD_MINALLOC_MIN
 #num MPD_MINALLOC_MAX
-#globalvar MPD_MINALLOC , <mpd_ssize_t>
+#globalvar MPD_MINALLOC , CInt
 
 --  Traphandler
 
@@ -255,9 +259,6 @@
 #ccall mpd_to_eng , Ptr <mpd_t> -> CInt -> IO CString
 #ccall mpd_to_sci_size , Ptr CString -> Ptr <mpd_t> -> CInt -> IO <mpd_ssize_t>
 #ccall mpd_to_eng_size , Ptr CString -> Ptr <mpd_t> -> CInt -> IO <mpd_ssize_t>
-#ccall mpd_validate_lconv , Ptr <mpd_spec_t> -> IO CInt
-#ccall mpd_parse_fmt_str , Ptr <mpd_spec_t> -> CString -> CInt -> IO CInt
-#ccall mpd_qformat_spec , Ptr <mpd_t> -> Ptr <mpd_spec_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO CString
 #ccall mpd_qformat , Ptr <mpd_t> -> CString -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO CString
 
 #num MPD_NUM_FLAGS
@@ -328,7 +329,7 @@
 #ccall mpd_qcopy , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO CInt
 #ccall mpd_qncopy , Ptr <mpd_t> -> IO (Ptr <mpd_t>)
 #ccall mpd_qcopy_abs , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO CInt
-#ccall mpd_qcopy_negate , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO CInt
+#ccall mpd_qcopy_negate , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO <uint32_t>
 #ccall mpd_qcopy_sign , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO CInt
 #ccall mpd_qand , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
 #ccall mpd_qinvert , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
@@ -338,11 +339,11 @@
 #ccall mpd_qxor , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
 #ccall mpd_same_quantum , Ptr <mpd_t> -> Ptr <mpd_t> -> IO CInt
 #ccall mpd_qrotate , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
-#ccall mpd_qshiftl , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <uint32_t> -> IO CInt
-#ccall mpd_qshiftr , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <uint32_t> -> IO CULong
+#ccall mpd_qshiftl , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <mpd_context_t> -> IO CInt
+#ccall mpd_qshiftr , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <uint32_t> -> IO <mpd_uint_t>
 #ccall mpd_qshiftr_inplace , Ptr <mpd_t> -> <mpd_ssize_t> -> IO <mpd_uint_t>
 #ccall mpd_qshift , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
-#ccall mpd_qshiftn , Ptr <mpd_t> -> Ptr <mpd_t> -> CInt -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
+#ccall mpd_qshiftn , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
 #ccall mpd_qcmp , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO CInt
 #ccall mpd_qcompare , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO CInt
 #ccall mpd_qcompare_signal , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO CInt
@@ -410,18 +411,18 @@
 #ccall mpd_qmul_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
 #ccall mpd_qdiv_i64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <int64_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
 #ccall mpd_qdiv_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
-#ccall mpd_sizeinbase , Ptr <mpd_t> -> <uint32_t> -> IO CSize
+#ccall mpd_sizeinbase , Ptr <mpd_t> -> <uint32_t> -> IO <size_t>
 #ccall mpd_qimport_u16 , Ptr <mpd_t> -> Ptr <uint16_t> -> <size_t> -> <uint8_t> -> <uint32_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
 #ccall mpd_qimport_u32 , Ptr <mpd_t> -> Ptr <uint32_t> -> <size_t> -> <uint8_t> -> <uint32_t> -> Ptr <mpd_context_t> -> Ptr <uint32_t> -> IO ()
-#ccall mpd_qexport_u16 , Ptr (Ptr <uint16_t>) -> <size_t> -> <uint32_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO <size_t>
-#ccall mpd_qexport_u32 , Ptr (Ptr <uint32_t>) -> CSize -> <uint32_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO <size_t>
+#ccall mpd_qexport_u16 , Ptr (Ptr CUShort) -> <size_t> -> <uint32_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO <size_t>
+#ccall mpd_qexport_u32 , Ptr (Ptr <uint32_t>) -> <size_t> -> <uint32_t> -> Ptr <mpd_t> -> Ptr <uint32_t> -> IO <size_t>
 
 --  Signalling functions
--- START HERE
+
 #ccall mpd_format , Ptr <mpd_t> -> CString -> Ptr <mpd_context_t> -> IO CString
-#ccall mpd_import_u16 , Ptr <mpd_t> -> Ptr <uint16_t> -> <size_t> -> <uint8_t> -> <uint32_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_import_u32 , Ptr <mpd_t> -> Ptr <uint32_t> -> <size_t> -> <uint8_t> -> <uint32_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_export_u16 , Ptr (Ptr <uint16_t>) -> <size_t> -> <uint32_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <size_t>
+#ccall mpd_import_u16 , Ptr <mpd_t> -> Ptr CUShort -> <size_t> -> CUChar -> <uint32_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_import_u32 , Ptr <mpd_t> -> Ptr <uint32_t> -> <size_t> -> CUChar -> <uint32_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_export_u16 , Ptr (Ptr CUShort) -> <size_t> -> <uint32_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <size_t>
 #ccall mpd_export_u32 , Ptr (Ptr <uint32_t>) -> <size_t> -> <uint32_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <size_t>
 #ccall mpd_finalize , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_check_nan , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO CInt
@@ -431,20 +432,20 @@
 #ccall mpd_sset_ssize , Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_sset_i32 , Ptr <mpd_t> -> <int32_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_sset_uint , Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_sset_u32 , Ptr <mpd_t> -> <uint32_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_sset_u32 , Ptr <mpd_t> -> <int32_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_set_ssize , Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_set_i32 , Ptr <mpd_t> -> <int32_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_set_uint , Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_set_u32 , Ptr <mpd_t> -> <uint32_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_set_i64 , Ptr <mpd_t> -> <int64_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_set_u64 , Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_set_u64 , Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_get_ssize , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <mpd_ssize_t>
 #ccall mpd_get_uint , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <mpd_uint_t>
 #ccall mpd_abs_uint , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <mpd_uint_t>
 #ccall mpd_get_i32 , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <int32_t>
 #ccall mpd_get_u32 , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <uint32_t>
 #ccall mpd_get_i64 , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <int64_t>
-#ccall mpd_get_u64 , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <mpd_uint_t>
+#ccall mpd_get_u64 , Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO <uint64_t>
 #ccall mpd_and , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_copy , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_canonical , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO ()
@@ -515,13 +516,13 @@
 #ccall mpd_sqrt , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_invroot , Ptr <mpd_t> -> Ptr <mpd_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_add_i64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <int64_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_add_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_add_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_sub_i64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <int64_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_sub_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_sub_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_div_i64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <int64_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_div_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_div_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> IO ()
 #ccall mpd_mul_i64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <int64_t> -> Ptr <mpd_context_t> -> IO ()
-#ccall mpd_mul_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <mpd_uint_t> -> Ptr <mpd_context_t> -> IO ()
+#ccall mpd_mul_u64 , Ptr <mpd_t> -> Ptr <mpd_t> -> <uint64_t> -> Ptr <mpd_context_t> -> IO ()
 
 --  Get attributes of a decimal
 
@@ -535,7 +536,7 @@
 
 #ccall mpd_lsd , <mpd_uint_t> -> IO <mpd_uint_t>
 
-#ccall mpd_digits_to_size , <mpd_ssize_t> -> IO <mpd_ssize_t>
+#ccall mpd_digits_to_size , CInt -> IO CInt
 
 #ccall mpd_exp_digits , <mpd_ssize_t> -> IO CInt
 #ccall mpd_iscanonical , Ptr <mpd_t> -> IO CInt
@@ -563,7 +564,7 @@
 
 #ccall mpd_iseven , Ptr <mpd_t> -> IO CInt
 
-#ccall mpd_sign , Ptr <mpd_t> -> IO <uint8_t>
+#ccall mpd_sign , Ptr <mpd_t> -> IO CUChar
 
 #ccall mpd_arith_sign , Ptr <mpd_t> -> IO CInt
 #ccall mpd_radix , IO CLong
@@ -573,7 +574,7 @@
 #ccall mpd_isstatic_data , Ptr <mpd_t> -> IO CInt
 #ccall mpd_isshared_data , Ptr <mpd_t> -> IO CInt
 #ccall mpd_isconst_data , Ptr <mpd_t> -> IO CInt
-#ccall mpd_trail_zeros , Ptr <mpd_t> -> IO <mpd_ssize_t>
+#ccall mpd_trail_zeros , Ptr <mpd_t> -> IO CInt
 
 --  Set attributes of a decimal
 
@@ -596,32 +597,9 @@
 #ccall mpd_set_flags , Ptr <mpd_t> -> <uint8_t> -> IO ()
 #ccall mpd_copy_flags , Ptr <mpd_t> -> Ptr <mpd_t> -> IO ()
 
---  Memory handling
-
-#globalvar mpd_mallocfunc , <size_t> -> IO (Ptr ())
-#callback funptr_mpd_mallocfunc , <size_t> -> IO (Ptr ())
-
-#globalvar mpd_callocfunc , <size_t> -> <size_t> -> IO (Ptr ())
-#callback funptr_mpd_callocfunc , <size_t> -> <size_t> -> IO (Ptr ())
-
-#globalvar mpd_reallocfunc , Ptr () -> <size_t> -> IO (Ptr ())
-#callback funptr_mpd_reallocfunc , Ptr () -> <size_t> -> IO (Ptr ())
-
-#globalvar mpd_free , Ptr () -> IO ()
-#callback funptr_mpd_free , Ptr () -> IO ()
+-- Memory handling
+-- I skipped many functions.
 
-#ccall mpd_callocfunc_em , <size_t> -> <size_t> -> IO (Ptr ())
-#ccall mpd_alloc , <size_t> -> <size_t> -> IO (Ptr ())
-#ccall mpd_calloc , <size_t> -> <size_t> -> IO (Ptr ())
-#ccall mpd_realloc , Ptr () -> <size_t> -> <size_t> -> Ptr <uint8_t> -> IO (Ptr ())
-#ccall mpd_sh_alloc , <size_t> -> <size_t> -> <size_t> -> IO (Ptr ())
 #ccall mpd_qnew , IO (Ptr <mpd_t>)
 #ccall mpd_new , Ptr <mpd_context_t> -> IO (Ptr <mpd_t>)
-#ccall mpd_qnew_size , <mpd_ssize_t> -> IO (Ptr <mpd_t>)
 #ccall mpd_del , Ptr <mpd_t> -> IO ()
-#ccall mpd_uint_zero , Ptr <mpd_uint_t> -> <size_t> -> IO ()
-#ccall mpd_qresize , Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <uint32_t> -> IO CInt
-#ccall mpd_qresize_zero , Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <uint32_t> -> IO CInt
-#ccall mpd_minalloc , Ptr <mpd_t> -> IO ()
-#ccall mpd_resize , Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <mpd_context_t> -> IO CInt
-#ccall mpd_resize_zero , Ptr <mpd_t> -> <mpd_ssize_t> -> Ptr <mpd_context_t> -> IO CInt
