diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,8 @@
+-- Adjustments specific to this package,
+-- all Gtk2Hs-specific boilerplate is kept in
+-- gtk2hs-buildtools:Gtk2HsSetup
+--
+import Gtk2HsSetup ( gtk2hsUserHooks )
+import Distribution.Simple ( defaultMainWithHooks )
+
+main = defaultMainWithHooks gtk2hsUserHooks
diff --git a/hierarchy.list b/hierarchy.list
new file mode 100644
--- /dev/null
+++ b/hierarchy.list
@@ -0,0 +1,342 @@
+# This list is the result of a copy-and-paste from the GtkObject hierarchy
+# html documentation. Deprecated widgets are uncommented. Some additional
+# object have been defined at the end of the copied list.
+
+# The Gtk prefix of every object is removed, the other prefixes are
+# kept.  The indentation implies the object hierarchy. In case the
+# type query function cannot be derived from the name or the type name
+# is different, an alternative name and type query function can be
+# specified by appending 'as typename, <query_func>'.  In case this
+# function is not specified, the <name> is converted to
+# gtk_<name'>_get_type where <name'> is <name> where each upperscore
+# letter is converted to an underscore and lowerletter. The underscore
+# is omitted if an upperscore letter preceeded: GtkHButtonBox ->
+# gtk_hbutton_box_get_type. The generation of a type can be
+# conditional by appending 'if <tag>'. Such types are only produces if
+# --tag=<tag> is given on the command line of TypeGenerator.
+
+
+    GObject 
+        GdkDrawable 
+            GdkWindow		as DrawWindow, gdk_window_object_get_type
+#            GdkDrawableImplX11
+#                GdkWindowImplX11
+            GdkPixmap
+            GdkGLPixmap		if gtkglext
+            GdkGLWindow		if gtkglext
+        GdkColormap
+	GdkScreen		if gtk-2.2
+	GdkDisplay		if gtk-2.2
+	GdkVisual
+	GdkDevice
+        GtkSettings
+        GtkTextBuffer
+            GtkSourceBuffer	if sourceview
+            GtkSourceBuffer	if gtksourceview2
+        GtkTextTag
+            GtkSourceTag	if sourceview
+        GtkTextTagTable
+            GtkSourceTagTable	if sourceview
+        GtkStyle
+	GtkRcStyle
+        GdkDragContext
+        GdkPixbuf
+	GdkPixbufAnimation
+	    GdkPixbufSimpleAnim
+	GdkPixbufAnimationIter
+        GtkTextChildAnchor
+        GtkTextMark
+	    GtkSourceMarker	if sourceview
+            GtkSourceMark       if gtksourceview2
+        GtkObject
+            GtkWidget
+                GtkMisc
+                    GtkLabel
+                        GtkAccelLabel
+                        GtkTipsQuery	if deprecated
+                    GtkArrow
+                    GtkImage
+                GtkContainer
+                    WebKitWebView as WebView, webkit_web_view_get_type            if webkit 
+                    GtkBin
+                        GtkAlignment
+                        GtkFrame
+                            GtkAspectFrame
+                        GtkButton
+                            GtkToggleButton
+                                GtkCheckButton
+                                    GtkRadioButton
+                            GtkColorButton		if gtk-2.4
+                            GtkFontButton		if gtk-2.4
+                            GtkOptionMenu		if deprecated
+                        GtkItem
+                            GtkMenuItem
+                                GtkCheckMenuItem
+                                    GtkRadioMenuItem
+                                GtkTearoffMenuItem
+                                GtkImageMenuItem
+                                GtkSeparatorMenuItem
+                            GtkListItem			if deprecated
+#			    GtkTreeItem
+                        GtkWindow
+                            GtkDialog
+			    	GtkAboutDialog		if gtk-2.6
+                                GtkColorSelectionDialog
+                                GtkFileSelection
+				GtkFileChooserDialog	if gtk-2.4
+                                GtkFontSelectionDialog
+                                GtkInputDialog
+                                GtkMessageDialog
+                            GtkPlug	if plugNsocket
+                        GtkEventBox
+                        GtkHandleBox
+                        GtkScrolledWindow
+                        GtkViewport
+			GtkExpander			if gtk-2.4
+			GtkComboBox			if gtk-2.4
+			    GtkComboBoxEntry		if gtk-2.4
+			GtkToolItem			if gtk-2.4
+			    GtkToolButton		if gtk-2.4
+				GtkMenuToolButton	if gtk-2.6
+				GtkToggleToolButton	if gtk-2.4
+				    GtkRadioToolButton	if gtk-2.4
+			    GtkSeparatorToolItem	if gtk-2.4
+			GtkMozEmbed		if mozembed
+			VteTerminal as Terminal if vte
+                    GtkBox
+                        GtkButtonBox
+                            GtkHButtonBox
+                            GtkVButtonBox
+                        GtkVBox
+                            GtkColorSelection
+                            GtkFontSelection
+			    GtkFileChooserWidget	if gtk-2.4
+                        GtkHBox
+                            GtkCombo	if deprecated
+                            GtkFileChooserButton	if gtk-2.6
+                            GtkStatusbar
+                    GtkCList		if deprecated
+                        GtkCTree	if deprecated
+                    GtkFixed
+                    GtkPaned
+                        GtkHPaned
+                        GtkVPaned
+                    GtkIconView		if gtk-2.6
+                    GtkLayout
+                    GtkList		if deprecated
+                    GtkMenuShell
+                        GtkMenu
+                        GtkMenuBar
+                    GtkNotebook
+#                    GtkPacker
+                    GtkSocket		if plugNsocket
+                    GtkTable
+                    GtkTextView
+                        GtkSourceView	if sourceview
+                        GtkSourceView	if gtksourceview2
+                    GtkToolbar
+                    GtkTreeView
+                GtkCalendar
+                GtkCellView		if gtk-2.6
+		GtkDrawingArea
+                GtkEntry
+                    GtkSpinButton
+                GtkRuler
+                    GtkHRuler
+                    GtkVRuler
+                GtkRange
+                    GtkScale
+                        GtkHScale
+                        GtkVScale
+                    GtkScrollbar
+                        GtkHScrollbar
+                        GtkVScrollbar
+                GtkSeparator
+                    GtkHSeparator
+                    GtkVSeparator
+                GtkInvisible
+#                GtkOldEditable
+#                    GtkText
+                GtkPreview		if deprecated
+# Progress is deprecated, ProgressBar contains everything necessary
+#                GtkProgress
+                GtkProgressBar
+            GtkAdjustment
+            GtkIMContext
+                GtkIMMulticontext
+            GtkItemFactory		if deprecated
+            GtkTooltips
+			
+# These object were added by hand because they do not show up in the hierarchy
+# chart.
+# These are derived from GtkObject:
+	    GtkTreeViewColumn
+	    GtkCellRenderer
+		GtkCellRendererPixbuf
+		GtkCellRendererText
+		    GtkCellRendererCombo	if gtk-2.6
+		GtkCellRendererToggle
+		GtkCellRendererProgress	if gtk-2.6
+	    GtkFileFilter		if gtk-2.4
+            GtkBuilder if gtk-2.12
+# These are actually interfaces, but all objects that implement it are at
+# least GObjects.
+	GtkCellLayout			if gtk-2.4
+	GtkTreeSortable			if gtk-2.4
+	GtkTooltip				if gtk-2.12
+# These are derived from GObject:
+  	GtkStatusIcon                   if gtk-2.10
+        GtkTreeSelection
+        GtkTreeModel
+            GtkTreeStore
+            GtkListStore
+	GtkTreeModelSort
+	GtkTreeModelFilter		if gtk-2.4
+	GtkIconFactory
+	GtkIconTheme
+	GtkSizeGroup
+	GtkClipboard			if gtk-2.2
+	GtkAccelGroup
+	GtkAccelMap			if gtk-2.4
+	GtkEntryCompletion		if gtk-2.4
+	GtkAction			if gtk-2.4
+	    GtkToggleAction		if gtk-2.4
+		GtkRadioAction		if gtk-2.4
+	GtkActionGroup			if gtk-2.4
+	GtkUIManager			if gtk-2.4
+	GtkWindowGroup
+        GtkSourceLanguage		if sourceview
+        GtkSourceLanguage		if gtksourceview2
+        GtkSourceLanguagesManager	if sourceview
+        GtkSourceLanguageManager	if gtksourceview2
+	GladeXML			as GladeXML, glade_xml_get_type if libglade
+	GConfClient			as GConf if gconf
+# These ones are actualy interfaces, but interface implementations are GObjects
+	GtkEditable
+	GtkSourceStyle			as SourceStyleObject if gtksourceview2
+	GtkSourceStyleScheme		if sourceview
+	GtkSourceStyleScheme		if gtksourceview2
+	GtkSourceStyleSchemeManager	if gtksourceview2
+	GtkFileChooser			if gtk-2.4
+## This now became a GObject in version 2:
+	GdkGC				as GC, gdk_gc_get_type
+## These are Pango structures
+	PangoContext		as PangoContext, pango_context_get_type if pango
+	PangoLayout		as PangoLayoutRaw, pango_layout_get_type if pango
+	PangoFont		as Font, pango_font_get_type if pango
+	PangoFontFamily		as FontFamily, pango_font_family_get_type if pango
+	PangoFontFace		as FontFace, pango_font_face_get_type if pango
+	PangoFontMap		as FontMap, pango_font_face_get_type if pango
+	PangoFontset		as FontSet, pango_fontset_get_type if pango
+## This type is only available for PANGO_ENABLE_BACKEND compiled source
+##	    PangoFontsetSimple	as FontSetSimple, pango_fontset_simple_get_type
+
+## GtkGlExt classes
+	GdkGLContext		if gtkglext
+	GdkGLConfig		if gtkglext
+	GdkGLDrawable		if gtkglext
+
+## GnomeVFS classes
+	GnomeVFSVolume		as Volume, gnome_vfs_volume_get_type if gnomevfs
+	GnomeVFSDrive		as Drive, gnome_vfs_drive_get_type if gnomevfs
+	GnomeVFSVolumeMonitor	as VolumeMonitor, gnome_vfs_volume_monitor_get_type if gnomevfs
+
+## GIO classes
+# Note on all the "as" clauses: the prefix G is unfortunate since it leads
+# to two consecutive upper case letters which are not translated with an
+# underscore each (e.g. GConf -> gconf, GtkHButtonBox -> gtk_hbutton_box).
+#        GUnixMountMonitor		as UnixMountMonitor, g_unix_mount_monitor_get_type if gio
+        GOutputStream			as OutputStream, g_output_stream_get_type if gio
+            GFilterOutputStream		as FilterOutputStream, g_filter_output_stream_get_type if gio
+                GDataOutputStream	as DataOutputStream, g_data_output_stream_get_type if gio
+                GBufferedOutputStream   as BufferedOutputStream, g_buffered_output_stream_get_type if gio
+#            GUnixOutputStream		as UnixOutputStream, g_unix_output_stream_get_type if gio
+            GFileOutputStream           as FileOutputStream, g_file_output_stream_get_type if gio
+            GMemoryOutputStream		as MemoryOutputStream, g_memory_output_stream_get_type if gio
+        GInputStream			as InputStream, g_input_stream_get_type if gio
+#            GUnixInputStream		as UnixInputStream, g_unix_input_stream_get_type if gio
+            GMemoryInputStream		as MemoryInputStream, g_memory_input_stream_get_type if gio
+            GFilterInputStream		as FilterInputStream, g_filter_input_stream_get_type if gio
+                GBufferedInputStream	as BufferedInputStream, g_buffered_input_stream_get_type if gio
+                    GDataInputStream	as DataInputStream, g_data_input_stream_get_type if gio
+            GFileInputStream		as FileInputStream, g_file_input_stream_get_type if gio
+#        GDesktopAppInfo			as DesktopAppInfo, g_desktop_app_info_get_type if gio
+        GFileMonitor			as FileMonitor, g_file_monitor_get_type if gio
+        GVfs				as Vfs, g_vfs_get_type if gio
+        GMountOperation			as MountOperation, g_mount_operation_get_type if gio
+        GThemedIcon			as ThemedIcon, g_themed_icon_get_type if gio
+        GEmblem			as Emblem, g_emblem_get_type if gio
+        GEmblemedIcon			as EmblemedIcon, g_emblemed_icon_get_type if gio
+        GFileEnumerator			as FileEnumerator, g_file_enumerator_get_type if gio
+        GFilenameCompleter		as FilenameCompleter, g_filename_completer_get_type if gio
+        GFileIcon			as FileIcon, g_file_icon_get_type if gio
+        GVolumeMonitor			as VolumeMonitor, g_volume_monitor_get_type if gio
+        GCancellable			as Cancellable, g_cancellable_get_type if gio
+        GSimpleAsyncResult		as SimpleAsyncResult, g_async_result_get_type if gio
+        GFileInfo			as FileInfo, g_file_info_get_type if gio
+		GAppLaunchContext   as AppLaunchContext, g_app_launch_context_get_type if gio
+## these are actually GInterfaces
+        GIcon				as Icon, g_icon_get_type if gio
+        GSeekable			as Seekable, g_seekable_get_type if gio
+        GAppInfo			as AppInfo, g_app_info_get_type if gio
+        GVolume				as Volume, g_volume_get_type if gio
+        GAsyncResult			as AsyncResult, g_async_result_get_type if gio
+        GLoadableIcon			as LoadableIcon, g_loadable_icon_get_type if gio
+        GDrive				as Drive, g_drive_get_type if gio
+        GFile				noEq as File, g_file_get_type if gio
+        GMount				as Mount, g_mount_get_type if gio
+
+## GStreamer classes
+	GstObject			as Object,		gst_object_get_type			if gstreamer
+	    GstPad			as Pad,			gst_pad_get_type			if gstreamer
+	        GstGhostPad		as GhostPad,		gst_ghost_pad_get_type			if gstreamer
+	    GstPluginFeature		as PluginFeature,	gst_plugin_feature_get_type		if gstreamer
+	        GstElementFactory	as ElementFactory,	gst_element_factory_get_type		if gstreamer
+	        GstTypeFindFactory	as TypeFindFactory,	gst_type_find_factory_get_type		if gstreamer
+	        GstIndexFactory		as IndexFactory,	gst_index_factory_get_type		if gstreamer
+	    GstElement			as Element,		gst_element_get_type			if gstreamer
+	        GstBin			as Bin,			gst_bin_get_type			if gstreamer
+	            GstPipeline		as Pipeline,		gst_pipeline_get_type			if gstreamer
+	        GstImplementsInterface  as ImplementsInterface, gst_implements_interface_get_type	if gstreamer
+	        GstTagSetter            as TagSetter,           gst_tag_setter_get_type			if gstreamer
+                GstBaseSrc              as BaseSrc,             gst_base_src_get_type			if gstreamer
+                    GstPushSrc          as PushSrc,             gst_push_src_get_type                   if gstreamer
+                GstBaseSink             as BaseSink,            gst_base_sink_get_type                  if gstreamer
+                GstBaseTransform        as BaseTransform,       gst_base_transform_get_type             if gstreamer
+	    GstPlugin			as Plugin,		gst_plugin_get_type			if gstreamer
+	    GstRegistry			as Registry,		gst_registry_get_type			if gstreamer
+	    GstBus			as Bus,			gst_bus_get_type			if gstreamer
+	    GstClock			as Clock,		gst_clock_get_type			if gstreamer
+	        GstAudioClock		as AudioClock,		gst_audio_clock_get_type		if gstreamer
+	        GstSystemClock		as SystemClock,		gst_system_clock_get_type		if gstreamer
+                GstNetClientClock       as NetClientClock,      gst_net_client_clock_get_type           if gstreamer
+	    GstIndex			as Index,		gst_index_get_type			if gstreamer
+	    GstPadTemplate		as PadTemplate,		gst_pad_template_get_type		if gstreamer
+	    GstTask			as Task,		gst_task_get_type			if gstreamer
+	    GstXML			as XML,			gst_xml_get_type			if gstreamer
+	    GstChildProxy               as ChildProxy,          gst_child_proxy_get_type		if gstreamer
+            GstCollectPads              as CollectPads,         gst_collect_pads_get_type               if gstreamer
+## these are actually GInterfaces
+	GstURIHandler                   as URIHandler,          gst_uri_handler_get_type		if gstreamer
+        GstAdapter                      as Adapter,             gst_adapter_get_type                    if gstreamer
+        GstController                   as Controller,          gst_controller_get_type                 if gstreamer
+
+        WebKitWebFrame as WebFrame, webkit_web_frame_get_type          if webkit 
+        WebKitWebSettings as WebSettings, webkit_web_settings_get_type    if webkit
+        WebKitNetworkRequest as NetworkRequest, webkit_network_request_get_type  if webkit
+        WebKitNetworkResponse as NetworkResponse, webkit_network_response_get_type    if webkit
+        WebKitDownload as Download, webkit_download_get_type  if webkit
+        WebKitWebBackForwardList as WebBackForwardList, webkit_web_back_forward_list_get_type if webkit
+        WebKitWebHistoryItem as WebHistoryItem, webkit_web_history_item_get_type if webkit
+        WebKitWebInspector as WebInspector, webkit_web_inspector_get_type if webkit
+        WebKitHitTestResult as HitTestResult, webkit_hit_test_result_get_type if webkit
+        WebKitSecurityOrigin as SecurityOrigin, webkit_security_origin_get_type if webkit
+        WebKitSoupAuthDialog as SoupAuthDialog, webkit_soup_auth_dialog_get_type if webkit
+        WebKitWebDatabase as WebDatabase, webkit_web_database_get_type if webkit
+        WebKitWebDataSource as WebDataSource, webkit_web_data_source_get_type if webkit
+        WebKitWebNavigationAction as WebNavigationAction, webkit_web_navigation_action_get_type if webkit
+        WebKitWebPolicyDecision as WebPolicyDecision, webkit_web_policy_decision_get_type if webkit
+        WebKitWebResource as WebResource, webkit_web_resource_get_type if webkit
+        WebKitWebWindowFeatures as WebWindowFeatures, webkit_web_window_features_get_type if webkit
+        WebKitGeolocationPolicyDecision as GeolocationPolicyDecision, webkit_geolocation_policy_decision_get_type if webkit
+
diff --git a/hsjscore.h b/hsjscore.h
new file mode 100644
--- /dev/null
+++ b/hsjscore.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Cjacker Huang <jzhuang@redflag-linux.com>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef __BLOCKS__
+#undef __BLOCKS__
+#endif
+#ifndef HS_WEBKITJAVASCRIPTCORE_H
+#define HS_WEBKITJAVASCRIPTCORE_H
+/* to avoid stdbool.h error in JavaScriptCore/JSBase.h*/
+#define _Bool unsigned char // unsigned short // previously, int
+
+#define CALLBACK
+#define WINAPI
+
+#include <JavaScriptCore/JSBase.h>
+#include <JavaScriptCore/JSContextRef.h>
+#include <JavaScriptCore/JSObjectRef.h>
+#include <JavaScriptCore/JSStringRef.h>
+#include <JavaScriptCore/JSValueRef.h>
+
+typedef JSStaticValue* JSStaticValueRef;
+
+typedef JSStaticFunction* JSStaticFunctionRef;
+
+typedef JSClassDefinition* JSClassDefinitionRef;
+#endif
diff --git a/marshal.list b/marshal.list
new file mode 100644
--- /dev/null
+++ b/marshal.list
@@ -0,0 +1,45 @@
+# see glib-genmarshal(1) for a detailed description of the file format,
+# possible parameter types are:
+#   VOID        indicates   no   return   type,  or  no  extra
+#               parameters. if VOID is used as  the  parameter
+#               list, no additional parameters may be present.
+#   BOOLEAN     for boolean types (gboolean)
+#   CHAR        for signed char types (gchar)
+#   UCHAR       for unsigned char types (guchar)
+#   INT         for signed integer types (gint)
+#   UINT        for unsigned integer types (guint)
+#   LONG        for signed long integer types (glong)
+#   ULONG       for unsigned long integer types (gulong)
+#   ENUM        for enumeration types (gint)
+#   FLAGS       for flag enumeration types (guint)
+#   FLOAT       for single-precision float types (gfloat)
+#   DOUBLE      for double-precision float types (gdouble)
+#   GLIBSTRING  for string types (gchar*)
+#   MGLIBSTRING for string types (gchar*) that could be NUL
+#   BOXED       for boxed (anonymous but reference counted) types (GBoxed*)
+#   POINTER     for anonymous pointer types (gpointer)
+#   NONE        deprecated alias for VOID
+#   BOOL        deprecated alias for BOOLEAN
+
+#
+# One discrepancy from Gtk+ is that for signals that may pass NULL for an object
+# reference, the Haskell signal should be passed a 'Maybe GObject'.
+# We therefore have two variants that are marshalled as a maybe type:
+#
+#   OBJECT      for GObject or derived types (GObject*)
+#   MOBJECT      for GObject or derived types (GObject*) that may be NULL
+
+# Furthermore, some objects needs to be destroyed synchronously from the main loop of
+# Gtk rather than during GC. These objects need to be marshalled using TOBJECT (for thread-safe
+# object). It doesn't hurt to use TOBJECT for an object that doesn't need it, except for the
+# some performance. As a rule of thumb, use TOBJECT for all libraries that build on package
+# 'gtk' and use OBJECT for all packages that only need packages 'glib', 'pango', 'cairo',
+# 'gio'. Again both variants exist. Note that the same names will be generated for OBJECT and
+# TOBJECT, so you have to remove the OBJECT handler if you need both.
+#
+#   TOBJECT      for GObject or derived types (GObject*)
+#   MTOBJECT      for GObject or derived types (GObject*) that may be NULL
+
+# If you add a new signal type, please check that it actually works!
+# If it is a Boxed type check that the reference counting is right.
+
diff --git a/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSBase.chs b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSBase.chs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSBase.chs
@@ -0,0 +1,56 @@
+{-# LANGUAGE EmptyDataDecls, ForeignFunctionInterface #-}
+
+module Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase where
+
+import Foreign.Ptr 
+import Foreign.C.Types 
+import Debug.Trace
+
+-- #include <stdbool.h>
+
+-- | conversion from CInt to Bool 
+--   strangely, n often becomes -256 for False
+getBool :: CUChar -> Bool --  CInt -> Bool 
+getBool n | n == 1 = True 
+          | otherwise = False 
+
+setBool :: Bool -> CUChar -- CInt 
+setBool True = 1
+setBool False = 0
+
+data OpaqueJSContextGroup 
+{#pointer JSContextGroupRef as JSContextGroupRef -> OpaqueJSContextGroup #} 
+
+data OpaqueJSContext 
+{#pointer JSContextRef as JSContextRef -> OpaqueJSContext #}
+{#pointer JSGlobalContextRef as JSGlobalContextRef -> OpaqueJSContext #}
+
+data OpaqueJSString 
+{#pointer JSStringRef as JSStringRef -> OpaqueJSString #}
+
+data OpaqueJSClass
+{#pointer JSClassRef as JSClassRef -> OpaqueJSClass #}
+
+data OpaqueJSPropertyNameArray
+{#pointer JSPropertyNameArrayRef as JSPropertyNameArrayRef -> OpaqueJSPropertyNameArray #}
+
+data OpaqueJSPropertyNameAccumulator 
+{#pointer JSPropertyNameAccumulatorRef as JSPropertyNameAccumulatorRef -> OpaqueJSPropertyNameAccumulator #}
+
+data OpaqueJSValue 
+{#pointer JSValueRef as JSValueRef -> OpaqueJSValue #}
+{#pointer JSObjectRef as JSObjectRef -> OpaqueJSValue #}
+
+{#pointer *JSValueRef as JSValueRefRef -> JSValueRef #}
+{#pointer *JSStringRef as JSStringRefRef -> JSStringRef #}
+
+
+{#fun JSEvaluateScript as ^ {id `JSContextRef', id `JSStringRef', id `JSObjectRef', id `JSStringRef', fromIntegral `Int', id `JSValueRefRef'} -> `JSValueRef' id #}
+ 
+{#fun JSCheckScriptSyntax as ^ {id `JSContextRef', id `JSStringRef', id `JSStringRef', fromIntegral `Int', id `JSValueRefRef'} -> `Bool' getBool #}
+
+{#fun JSGarbageCollect as ^ {id `JSContextRef'} -> `()' #}
+
+
+
+
diff --git a/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSContextRef.chs b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSContextRef.chs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSContextRef.chs
@@ -0,0 +1,32 @@
+{-# LANGUAGE EmptyDataDecls, ForeignFunctionInterface #-}
+
+module Graphics.UI.Gtk.WebKit.JavaScriptCore.JSContextRef where
+
+import Foreign.Ptr 
+import Foreign.C.Types 
+
+-- import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSObjectRef
+-- import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef 
+
+{#import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase #}
+
+-- {#pointer JSGlobalContextRef as JSGlobalContextRef -> OpaqueJSContext #}
+
+{#fun JSContextGroupCreate as ^ {} -> `JSContextGroupRef' id #}
+
+{#fun JSContextGroupRetain as ^ {id `JSContextGroupRef'} -> `JSContextGroupRef' id #}
+
+{#fun JSContextGroupRelease as ^ {id `JSContextGroupRef'} -> `()' #}
+
+{#fun JSGlobalContextCreate as ^ {id `JSClassRef'} -> `JSGlobalContextRef' id #}
+
+{#fun JSGlobalContextCreateInGroup as ^ {id `JSContextGroupRef', id `JSClassRef'} -> `JSGlobalContextRef' id #}
+
+{#fun JSGlobalContextRetain as ^ {id `JSGlobalContextRef'} -> `JSGlobalContextRef' id #}
+
+{#fun JSGlobalContextRelease as ^ { id `JSGlobalContextRef' } -> `()' #}
+
+{#fun JSContextGetGlobalObject as ^ { id `JSContextRef' } -> `JSObjectRef' id #}
+
+{#fun JSContextGetGroup as ^ { id `JSContextRef' } -> `JSContextGroupRef' id #}
+
diff --git a/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSObjectRef.chs b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSObjectRef.chs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSObjectRef.chs
@@ -0,0 +1,296 @@
+{-# LANGUAGE EmptyDataDecls, ForeignFunctionInterface #-}
+
+module Graphics.UI.Gtk.WebKit.JavaScriptCore.JSObjectRef where
+
+import Foreign.C.String
+import Foreign.C.Types
+import Foreign.Ptr
+import Foreign.Storable
+import Data.Word (Word)
+
+{# import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase #}
+
+-- {#pointer *JSValueRef as Ptr JSValueRef #}
+
+type JSCSize = {#type size_t #}
+
+type JSPropertyAttributes = {#type JSPropertyAttributes #}
+
+type JSClassAttributes = {#type JSClassAttributes #}
+
+type JSObjectInitializeCallback = {#type JSObjectInitializeCallback #}
+
+type JSObjectFinalizeCallback = {#type JSObjectFinalizeCallback #}
+
+type JSObjectHasPropertyCallback = {#type JSObjectHasPropertyCallback #}
+
+type JSObjectGetPropertyCallback = {#type JSObjectGetPropertyCallback #}
+
+type JSObjectSetPropertyCallback = {#type JSObjectSetPropertyCallback #}
+
+type JSObjectDeletePropertyCallback = {#type JSObjectDeletePropertyCallback #}
+
+type JSObjectGetPropertyNamesCallback = {#type JSObjectGetPropertyNamesCallback #}
+
+type JSObjectCallAsFunctionCallback' =
+       JSContextRef
+    -> JSObjectRef
+    -> JSObjectRef
+    -> JSCSize
+    -> JSValueRefRef
+    -> JSValueRefRef
+    -> IO JSValueRef
+
+type JSObjectCallAsFunctionCallback = {#type JSObjectCallAsFunctionCallback #}
+
+type JSObjectCallAsConstructorCallback' =
+       JSContextRef
+    -> JSObjectRef
+    -> JSCSize
+    -> JSValueRefRef
+    -> JSValueRefRef
+    -> IO JSValueRef
+
+type JSObjectCallAsConstructorCallback = {#type JSObjectCallAsConstructorCallback #}
+
+type JSObjectHasInstanceCallback = {#type JSObjectHasInstanceCallback #}
+
+type JSObjectConvertToTypeCallback = {#type JSObjectConvertToTypeCallback #}
+
+foreign import ccall "wrapper"
+  mkJSObjectCallAsFunctionCallback :: JSObjectCallAsFunctionCallback' -> IO JSObjectCallAsFunctionCallback
+
+type JSStaticValueRef = {#type JSStaticValueRef #}
+
+
+value_get_name :: JSStaticValueRef -> IO String
+value_get_name t = {#get JSStaticValue -> name #} t >>= peekCString
+
+value_set_name :: JSStaticValueRef -> String -> IO ()
+value_set_name t str = {#set JSStaticFunction -> name #} t =<< newCString str
+
+
+value_get_getProperty :: JSStaticValueRef -> IO JSObjectGetPropertyCallback
+value_get_getProperty t = {#get JSStaticValue -> getProperty #} t
+
+
+value_set_getProperty :: JSStaticValueRef -> JSObjectGetPropertyCallback -> IO ()
+value_set_getProperty t cbk = {#set JSStaticValue -> getProperty #} t cbk
+
+
+value_get_setProperty :: JSStaticValueRef -> IO JSObjectSetPropertyCallback
+value_get_setProperty t = {#get JSStaticValue -> setProperty #} t
+
+value_set_setProperty :: JSStaticValueRef -> JSObjectSetPropertyCallback -> IO ()
+value_set_setProperty t cbk = {#set JSStaticValue -> setProperty #} t cbk
+
+value_get_attributes :: JSStaticValueRef -> IO JSPropertyAttributes
+value_get_attributes t = {#get JSStaticValue -> attributes #} t
+
+value_set_attributes :: JSStaticValueRef -> JSPropertyAttributes -> IO ()
+value_set_attributes t attr = {#set JSStaticValue -> attributes #} t attr
+
+
+type JSStaticFunctionRef = {#type JSStaticFunctionRef #}
+
+func_get_name :: JSStaticFunctionRef -> IO String
+func_get_name t = {#get JSStaticFunction -> name #} t >>= peekCString
+
+func_set_name :: JSStaticFunctionRef -> String -> IO ()
+func_set_name t str = {#set JSStaticFunction -> name #} t =<< newCString str
+
+func_get_callAsFunction :: JSStaticFunctionRef -> IO JSObjectCallAsFunctionCallback
+func_get_callAsFunction t = {#get JSStaticFunction -> callAsFunction #} t
+
+func_set_callAsFunction :: JSStaticFunctionRef -> JSObjectCallAsFunctionCallback -> IO ()
+func_set_callAsFunction t cbk = {#set JSStaticFunction -> callAsFunction #} t cbk
+
+func_get_attributes :: JSStaticFunctionRef -> IO JSPropertyAttributes
+func_get_attributes t = {#get JSStaticFunction -> attributes #} t
+
+func_set_attributes :: JSStaticFunctionRef -> JSPropertyAttributes -> IO ()
+func_set_attributes t attr = {#set JSStaticFunction -> attributes #} t attr
+
+type JSClassDefinitionRef = {#type JSClassDefinitionRef #}
+
+class_get_version :: JSClassDefinitionRef -> IO Int
+class_get_version t = {#get JSClassDefinition -> version #} t >>= return . fromIntegral
+
+class_set_version :: JSClassDefinitionRef -> Int -> IO ()
+class_set_version t n = {#set JSClassDefinition -> version #} t (fromIntegral n)
+
+class_get_attributes :: JSClassDefinitionRef -> IO JSClassAttributes
+class_get_attributes t = {#get JSClassDefinition -> attributes #} t
+
+class_set_attributes :: JSClassDefinitionRef -> JSClassAttributes -> IO ()
+class_set_attributes t attr = {#set JSClassDefinition -> attributes #} t attr
+
+class_get_className :: JSClassDefinitionRef -> IO String
+class_get_className t = {#get JSClassDefinition -> className #} t >>= peekCString
+
+class_set_className :: JSClassDefinitionRef -> String -> IO ()
+class_set_className t cname = {#set JSClassDefinition -> className #} t =<< newCString cname
+
+class_get_parentClass :: JSClassDefinitionRef -> IO JSClassRef
+class_get_parentClass t = {#get JSClassDefinition -> parentClass #} t >>= return . castPtr
+
+class_set_parentClass :: JSClassDefinitionRef -> JSClassRef -> IO ()
+class_set_parentClass t c = {#set JSClassDefinition -> parentClass #} t (castPtr c)
+
+
+class_get_staticValues :: JSClassDefinitionRef -> IO JSStaticValueRef
+class_get_staticValues t = {#get JSClassDefinition -> staticValues #} t
+
+class_set_staticValues :: JSClassDefinitionRef -> JSStaticValueRef -> IO ()
+class_set_staticValues t v = {#set JSClassDefinition -> staticValues #} t v
+
+
+class_get_staticFunctions :: JSClassDefinitionRef -> IO JSStaticFunctionRef
+class_get_staticFunctions t = {#get JSClassDefinition -> staticFunctions #} t
+
+
+class_set_staticFunctions :: JSClassDefinitionRef -> JSStaticFunctionRef -> IO ()
+class_set_staticFunctions t f = {#set JSClassDefinition -> staticFunctions #} t f
+
+class_get_initialize :: JSClassDefinitionRef -> IO JSObjectInitializeCallback
+class_get_initialize t = {#get JSClassDefinition -> initialize #} t
+
+class_set_initialize :: JSClassDefinitionRef -> JSObjectInitializeCallback -> IO ()
+class_set_initialize t cbk = {#set JSClassDefinition -> initialize #} t cbk
+
+
+
+class_get_finalize :: JSClassDefinitionRef -> IO JSObjectFinalizeCallback
+class_get_finalize t = {#get JSClassDefinition -> finalize #} t
+
+class_set_finalize :: JSClassDefinitionRef -> JSObjectFinalizeCallback -> IO ()
+class_set_finalize t f = {#set JSClassDefinition -> finalize #} t f
+
+
+class_get_hasProperty :: JSClassDefinitionRef -> IO JSObjectHasPropertyCallback
+class_get_hasProperty t = {#get JSClassDefinition -> hasProperty #} t
+
+class_set_hasProperty :: JSClassDefinitionRef -> JSObjectHasPropertyCallback -> IO ()
+class_set_hasProperty t f = {#set JSClassDefinition -> hasProperty #} t f
+
+class_get_getProperty :: JSClassDefinitionRef -> IO JSObjectGetPropertyCallback
+class_get_getProperty t = {#get JSClassDefinition -> getProperty #} t
+
+class_set_getProperty :: JSClassDefinitionRef -> JSObjectGetPropertyCallback -> IO ()
+class_set_getProperty t f = {#set JSClassDefinition -> getProperty #} t f
+
+class_get_setProperty :: JSClassDefinitionRef -> IO JSObjectSetPropertyCallback
+class_get_setProperty t = {#get JSClassDefinition -> setProperty #} t
+
+class_set_setProperty :: JSClassDefinitionRef -> JSObjectSetPropertyCallback -> IO ()
+class_set_setProperty t f = {#set JSClassDefinition -> setProperty #} t f
+
+class_get_deleteProperty :: JSClassDefinitionRef -> IO JSObjectDeletePropertyCallback
+class_get_deleteProperty t = {#get JSClassDefinition -> deleteProperty #} t
+
+class_set_deleteProperty :: JSClassDefinitionRef -> JSObjectDeletePropertyCallback -> IO ()
+class_set_deleteProperty t f = {#set JSClassDefinition -> deleteProperty #} t f
+
+class_get_getPropertyNames :: JSClassDefinitionRef -> IO JSObjectGetPropertyNamesCallback
+class_get_getPropertyNames t = {#get JSClassDefinition -> getPropertyNames #} t
+
+class_set_getPropertyNames :: JSClassDefinitionRef -> JSObjectGetPropertyNamesCallback -> IO ()
+class_set_getPropertyNames t f = {#set JSClassDefinition -> getPropertyNames #} t f
+
+class_get_callAsFunction  :: JSClassDefinitionRef -> IO JSObjectCallAsFunctionCallback
+class_get_callAsFunction t = {#get JSClassDefinition -> callAsFunction #} t
+
+class_set_callAsFunction :: JSClassDefinitionRef -> JSObjectCallAsFunctionCallback -> IO ()
+class_set_callAsFunction t f = {#set JSClassDefinition -> callAsFunction #} t f
+
+
+class_get_callAsConstructor :: JSClassDefinitionRef -> IO JSObjectCallAsConstructorCallback
+class_get_callAsConstructor t = {#get JSClassDefinition -> callAsConstructor #} t
+
+class_set_callAsConstructor :: JSClassDefinitionRef -> JSObjectCallAsConstructorCallback -> IO ()
+class_set_callAsConstructor t f = {#set JSClassDefinition -> callAsConstructor #} t f
+
+
+class_get_hasInstance :: JSClassDefinitionRef -> IO JSObjectHasInstanceCallback
+class_get_hasInstance t = {#get JSClassDefinition -> hasInstance #} t
+
+class_set_hasInstance :: JSClassDefinitionRef -> JSObjectHasInstanceCallback -> IO ()
+class_set_hasInstance t f = {#set JSClassDefinition -> hasInstance #} t f
+
+
+class_get_convertToType :: JSClassDefinitionRef -> IO JSObjectConvertToTypeCallback
+class_get_convertToType t = {#get JSClassDefinition -> convertToType #} t
+
+class_set_convertToType :: JSClassDefinitionRef -> JSObjectConvertToTypeCallback -> IO ()
+class_set_convertToType t f = {#set JSClassDefinition -> convertToType #} t f
+
+
+-- kJSClassDefinitionEmpty
+
+{#fun JSClassCreate as ^ {id `JSClassDefinitionRef'} -> `JSClassRef' id #}
+
+{#fun JSClassRetain as ^ {id `JSClassRef'} -> `JSClassRef' id #}
+
+{#fun JSClassRelease as ^ {id `JSClassRef'} -> `()' #}
+
+{#fun JSObjectMake as ^ {id `JSContextRef', id `JSClassRef', id `Ptr ()'} -> `JSObjectRef' id #}
+
+{#fun JSObjectMakeFunctionWithCallback as ^ {id `JSContextRef', id `JSStringRef', id `JSObjectCallAsFunctionCallback'} -> `JSObjectRef' id #}
+
+{#fun JSObjectMakeConstructor as ^ {id `JSContextRef', id `JSClassRef', id `JSObjectCallAsConstructorCallback'} -> `JSObjectRef' id #}
+
+{#fun JSObjectMakeArray as ^ {id `JSContextRef', fromIntegral `CSize', id `JSValueRefRef', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+{#fun JSObjectMakeDate as ^ {id `JSContextRef', fromIntegral `CSize', id `JSValueRefRef', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+{#fun JSObjectMakeError as ^ {id `JSContextRef', fromIntegral `CSize', id `JSValueRefRef', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+{#fun JSObjectMakeRegExp as ^ {id `JSContextRef', fromIntegral `CSize', id `JSValueRefRef', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+
+{#fun JSObjectMakeFunction as ^ {id `JSContextRef', id `JSStringRef', id `CUInt', id `JSStringRefRef', id `JSStringRef', id `JSStringRef', fromIntegral `Int', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+{#fun JSObjectGetPrototype as ^ {id `JSContextRef', id `JSObjectRef'} -> `JSValueRef' id #}
+
+{#fun JSObjectSetPrototype as ^ {id `JSContextRef', id `JSObjectRef', id `JSValueRef'} -> `()' #}
+
+{#fun JSObjectHasProperty as ^ {id `JSContextRef', id `JSObjectRef', id `JSStringRef'} -> `Bool' getBool #}
+
+{#fun JSObjectGetProperty as ^ {id `JSContextRef', id `JSObjectRef', id `JSStringRef', id `JSValueRefRef'} -> `JSValueRef' id #}
+
+{#fun JSObjectSetProperty as ^ {id `JSContextRef', id `JSObjectRef', id `JSStringRef', id `JSValueRef', id `JSPropertyAttributes', id `JSValueRefRef'} -> `()' #}
+
+{#fun JSObjectDeleteProperty as ^ {id `JSContextRef', id `JSObjectRef', id `JSStringRef', id `JSValueRefRef'} -> `Bool' getBool #}
+
+{#fun JSObjectGetPropertyAtIndex as ^ {id `JSContextRef', id `JSObjectRef', id `CUInt', id `JSValueRefRef'} -> `JSValueRef' id #}
+
+{#fun JSObjectSetPropertyAtIndex as ^ {id `JSContextRef', id `JSObjectRef', id `CUInt', id `JSValueRef', id `JSValueRefRef'} -> `()' #}
+
+{#fun JSObjectGetPrivate as ^ {id `JSObjectRef'} -> `Ptr ()' id #}
+
+{#fun JSObjectSetPrivate as ^ {id `JSObjectRef', id `Ptr ()'} -> `Bool' getBool #}
+
+{#fun JSObjectIsFunction as ^ {id `JSContextRef', id `JSObjectRef'} -> `Bool' getBool #}
+
+{#fun JSObjectCallAsFunction as ^ {id `JSContextRef', id `JSObjectRef', id `JSObjectRef', fromIntegral `CSize', id `JSValueRefRef', id `JSValueRefRef'} -> `JSValueRef' id #}
+
+{#fun JSObjectCallAsConstructor as ^ {id `JSContextRef', id `JSObjectRef', fromIntegral `CSize', id `JSValueRefRef', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+{#fun JSObjectCopyPropertyNames as ^ {id `JSContextRef', id `JSObjectRef'} -> `JSPropertyNameArrayRef' id #}
+
+{#fun JSPropertyNameArrayRetain as ^ {id `JSPropertyNameArrayRef'} -> `JSPropertyNameArrayRef' id #}
+
+{#fun JSPropertyNameArrayRelease as ^ {id `JSPropertyNameArrayRef'} -> `()' #}
+
+{#fun JSPropertyNameArrayGetCount as ^ {id `JSPropertyNameArrayRef'} -> `CSize' fromIntegral #}
+
+{#fun JSPropertyNameArrayGetNameAtIndex as ^ {id `JSPropertyNameArrayRef', fromIntegral `CSize'} -> `JSStringRef' id #}
+
+{#fun JSPropertyNameAccumulatorAddName as ^ {id `JSPropertyNameAccumulatorRef', id `JSStringRef'} -> `()' #}
+
+
+
+
+
+
+
diff --git a/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSStringRef.chs b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSStringRef.chs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSStringRef.chs
@@ -0,0 +1,34 @@
+{-# LANGUAGE EmptyDataDecls, ForeignFunctionInterface #-}
+
+module Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef where
+
+import Foreign.Ptr 
+import Foreign.C.String
+import Foreign.C.Types 
+
+{#import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase #}
+{#import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef #}
+
+type JSChar = {#type JSChar #}
+{#pointer *JSChar as JSCharRef -> JSChar #}
+
+{#fun JSStringCreateWithCharacters as ^ { id `JSCharRef', fromIntegral `CSize' } -> `JSStringRef' id #}
+
+{#fun JSStringCreateWithUTF8CString as ^ { `String' } -> `JSStringRef' id #}
+
+{#fun JSStringRetain as ^ { id `JSStringRef' } -> `JSStringRef' id #}
+
+{#fun JSStringRelease as ^ { id `JSStringRef' } -> `()' #} 
+
+{#fun JSStringGetLength as ^ { id `JSStringRef' } -> `CSize' fromIntegral #}
+
+{#fun JSStringGetCharactersPtr as ^ {id `JSStringRef' } -> `JSCharRef' id #}
+
+{#fun JSStringGetMaximumUTF8CStringSize as ^ {id `JSStringRef'} -> `CSize' fromIntegral #}
+
+{#fun JSStringGetUTF8CString as ^ {id `JSStringRef', `String', fromIntegral `CSize'} -> `CSize' fromIntegral #}
+
+{#fun JSStringIsEqual as ^ {id `JSStringRef', id `JSStringRef' } -> `Bool' getBool #} 
+
+{#fun JSStringIsEqualToUTF8CString as ^ {id `JSStringRef', `String'} -> `Bool' getBool #}
+
diff --git a/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSValueRef.chs b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSValueRef.chs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Gtk/WebKit/JavaScriptCore/JSValueRef.chs
@@ -0,0 +1,64 @@
+{-# LANGUAGE EmptyDataDecls, ForeignFunctionInterface #-}
+
+module Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef where
+
+import Foreign.Ptr 
+import Foreign.C.Types 
+
+
+{#import Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase #}
+
+{#enum JSType {underscoreToCase} deriving (Show,Eq) #}
+
+toEnumFromIntegral :: (Enum a, Integral i) => i -> a  
+toEnumFromIntegral = toEnum . fromIntegral 
+
+
+
+{#fun JSValueGetType as ^ {id `JSContextRef', id `JSValueRef'}-> `JSType' toEnumFromIntegral #}
+
+{#fun JSValueIsUndefined as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsNull as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsBoolean as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsNumber as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsString as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsObject as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsObjectOfClass as ^ {id `JSContextRef', id `JSValueRef', id `JSClassRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsEqual as ^ {id `JSContextRef', id `JSValueRef', id `JSValueRef', id `JSValueRefRef'} -> `Bool' getBool #}
+
+{#fun JSValueIsStrictEqual as ^ {id `JSContextRef', id `JSValueRef', id `JSValueRef'} -> `Bool' getBool #} 
+
+{#fun JSValueIsInstanceOfConstructor as ^ {id `JSContextRef', id `JSValueRef', id `JSObjectRef', id `JSValueRefRef'} -> `Bool' getBool #}
+
+{#fun JSValueMakeUndefined as ^ {id `JSContextRef'} -> `JSValueRef' id #}
+
+{#fun JSValueMakeNull as ^ {id `JSContextRef'} -> `JSValueRef' id #}
+
+{#fun JSValueMakeBoolean as ^ {id `JSContextRef', setBool `Bool'} -> `JSValueRef' id #}
+
+{#fun JSValueMakeNumber as ^ {id `JSContextRef', realToFrac `Double' } -> `JSValueRef' id #}
+
+{#fun JSValueMakeString as ^ {id `JSContextRef', id `JSStringRef'} -> `JSValueRef' id #}
+
+{#fun JSValueMakeFromJSONString as ^ {id `JSContextRef', id `JSStringRef'} -> `JSValueRef' id #}
+
+{#fun JSValueCreateJSONString as ^ {id `JSContextRef', id `JSValueRef', fromIntegral `CUInt', id `JSValueRefRef'} -> `JSStringRef' id #}
+
+{#fun JSValueToBoolean as ^ {id `JSContextRef', id `JSValueRef'} -> `Bool' getBool #}
+
+{#fun JSValueToNumber as ^ {id `JSContextRef', id `JSValueRef', id `JSValueRefRef'} -> `Double' realToFrac #}
+
+{#fun JSValueToStringCopy as ^ {id `JSContextRef', id `JSValueRef', id `JSValueRefRef'} -> `JSStringRef' id #}
+
+{#fun JSValueToObject as ^ {id `JSContextRef', id `JSValueRef', id `JSValueRefRef'} -> `JSObjectRef' id #}
+
+{#fun JSValueProtect as ^ {id `JSContextRef', id `JSValueRef'} -> `()' #}
+
+{#fun JSValueUnprotect as ^ {id `JSContextRef', id `JSValueRef'} -> `()' #}
diff --git a/webkit2gtk3-javascriptcore.cabal b/webkit2gtk3-javascriptcore.cabal
new file mode 100644
--- /dev/null
+++ b/webkit2gtk3-javascriptcore.cabal
@@ -0,0 +1,55 @@
+Name:		webkit2gtk3-javascriptcore
+Version:	0.14.2.1
+Synopsis:       JavaScriptCore FFI from webkitgtk
+Description: 	FFI for JavaScriptCore module from webkitgtk
+License: 	BSD3
+License-file:	LICENSE
+Author:		Ian-Woo Kim
+Maintainer: 	Ian-Woo Kim <ianwookim@gmail.com>
+Build-Type:     Custom
+Cabal-Version:  >= 1.24
+Extra-Source-Files: hsjscore.h
+                    marshal.list
+		            hierarchy.list
+
+x-Types-File:       src/Graphics/UI/Gtk/WebKit/JavaScriptCore/Types.chs
+x-Types-Tag:        webkit webkit-dom
+x-Types-ModName:    Graphics.UI.Gtk.WebKit.JavaScriptCore.Types
+x-Types-Forward:    *Graphics.UI.GtkInternals
+x-Types-Destructor: objectUnrefFromMainloop
+x-Types-Hierarchy:  hierarchy.list
+
+Source-Repository head
+  type:         git
+  location:     https://github.com/gtk2hs/webkit-javascriptcore
+
+custom-setup
+  setup-depends: base >= 4.6,
+                 Cabal >= 1.24 && < 1.25,
+                 gtk2hs-buildtools >= 0.13.2.0 && < 0.14
+
+Library
+        hs-source-dirs: src
+        build-depends:  base >= 4 && < 5
+						
+        exposed-modules:
+                   Graphics.UI.Gtk.WebKit.JavaScriptCore.JSBase
+                   Graphics.UI.Gtk.WebKit.JavaScriptCore.JSContextRef
+                   Graphics.UI.Gtk.WebKit.JavaScriptCore.JSObjectRef
+                   Graphics.UI.Gtk.WebKit.JavaScriptCore.JSStringRef
+                   Graphics.UI.Gtk.WebKit.JavaScriptCore.JSValueRef
+        other-modules:
+
+		
+        default-language:   Haskell98
+        default-extensions: ForeignFunctionInterface
+
+        x-Signals-File:  src/Graphics/UI/Gtk/WebKit/JavaScriptCore/Signals.chs
+        x-Signals-Modname: src/Graphics.UI.Gtk.WebKit.JavaScriptCore.Signals
+        x-Signals-Types: marshal.list
+        x-Signals-Import: Graphics.UI.GtkInternals
+		
+        include-dirs: .
+        cpp-options: -DDISABLE_DEPRECATED -U__BLOCKS__ -D__attribute__(A)= -D_Nullable= -D_Nonnull=
+        x-c2hs-Header:  hsjscore.h
+        pkgconfig-depends: webkit2gtk-4.0 >=1.1.15
