diff --git a/Bindings/Sound/SC3.hsc b/Bindings/Sound/SC3.hsc
--- a/Bindings/Sound/SC3.hsc
+++ b/Bindings/Sound/SC3.hsc
@@ -5,8 +5,10 @@
 
 #strict_import
 
+-- | Synthesis engine handle.
 #opaque_t World
 
+-- | Synthesis engine options.
 #starttype struct WorldOptions
 	#field mPassword                         , CString
 	#field mNumBuffers                       , CUInt
@@ -44,27 +46,87 @@
 	#field mSharedMemoryID                   , CInt
 #stoptype
 
+-- | Default synthesis engine options.
 #cinline kDefaultWorldOptions , IO (Ptr <struct WorldOptions>)
 
+-- | Reply address.
 #opaque_t struct ReplyAddress
 
+-- | Access the callback data pointer in a reply address.
+#ccall ReplyAddress_ReplyData , Ptr <ReplyAddress> -> IO (Ptr ())
+
+-- | Reply function callback.
+--
+-- Arguments:
+--
+-- * 'Ptr' 'C'ReplyAddress' - Reply address handle
+--
+-- * 'Ptr' 'CChar' - OSC packet data
+--
+-- * 'CInt' - OSC packet size in bytes
 #callback ReplyFunc , Ptr <ReplyAddress> -> Ptr CChar -> CInt -> IO ()
 
--- | Access the data pointer in reply address.
-#ccall ReplyAddress_ReplyData       , Ptr <ReplyAddress> -> IO (Ptr ())
+-- | Create a new synthesis engine.
+#ccall World_New , Ptr <WorldOptions> -> IO (Ptr <World>)
 
--- | Create a new world.
-#ccall World_New                    , Ptr <WorldOptions> -> IO (Ptr <World>)
-#ccall World_Cleanup                , Ptr <World> -> IO ()
+-- | Free the synthesis engine.
+--
+-- This function should only be called after 'c'World_WaitForQuit' has returned.
+#ccall World_Cleanup , Ptr <World> -> IO ()
+
+-- | Perform non-realtime synthesis with the given 'C'WorldOptions'.
 #ccall World_NonRealTimeSynthesis   , Ptr <World> -> Ptr <WorldOptions> -> IO ()
-#ccall World_OpenUDP                , Ptr <World> -> CInt -> IO CInt
-#ccall World_OpenTCP                , Ptr <World> -> CInt -> CInt -> CInt -> IO CInt
-#ccall World_WaitForQuit            , Ptr <World> -> IO ()
+
+-- | Open a UDP input port for receiving OSC commands.
+--
+-- Returns non-zero if the call was successful.
+#ccall World_OpenUDP , Ptr <World> -> CInt -> IO CInt
+
+-- | Open a TCP input port for receiving OSC commands.
+--
+-- Returns non-zero if the call was successful.
+#ccall World_OpenTCP , Ptr <World> -> CInt -> CInt -> CInt -> IO CInt
+
+-- | Wait for the synthesis engine to quit.
+--
+-- In order to stop the synthesis engine, send a \"/quit\" OSC message with
+-- 'c'World_SendPacket', 'c'World_SendPacketWithContext' or through an open
+-- network port.
+#ccall World_WaitForQuit , Ptr <World> -> IO ()
+
+-- | Send an OSC packet to the synthesis engine.
+--
+-- Returns 'True' if the packet was sent successfully.
+--
+-- Arguments:
+--
+-- * 'CInt' - OSC packet size in bytes
+--
+-- * 'Ptr' 'CChar' - OSC packet data
+--
+-- * 'C'ReplyFunc' - Reply function callback.
 #ccall World_SendPacket             , Ptr <World> -> CInt -> Ptr CChar -> <ReplyFunc> -> IO Bool
+
+-- | Send an OSC packet to the synthesis engine with callback data.
+--
+-- Returns 'True' if the packet was sent successfully.
+--
+-- Arguments:
+--
+-- * 'CInt' - OSC packet size in bytes
+--
+-- * 'Ptr' 'CChar' - OSC packet data
+--
+-- * 'C'ReplyFunc' - Reply function callback.
+--
+-- * 'Ptr' () - Reply function callback data.
 #ccall World_SendPacketWithContext  , Ptr <World> -> CInt -> Ptr CChar -> <ReplyFunc> -> Ptr () -> IO Bool
 
 -- | Haskell print function.
 #callback HaskellPrintFunc , Ptr CChar -> IO ()
 
 -- | Set the global Haskell print function.
+--
+-- This function, when set, is called by the synthesis engine to print
+-- character strings to an appropriate output channel.
 #ccall SetHaskellPrintFunc , <HaskellPrintFunc> -> IO ()
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,30 @@
-**bindings-sc3** is a Haskell library that provides lowlevel bindings to the [SuperCollider][] synthesis engine library `libscsynth`.
+**bindings-sc3** is a Haskell library that provides low-level bindings to the [SuperCollider][] synthesis engine library `libscsynth`.
 
-For more information please visit the [website][].
+### Installation
 
-[supercollider]: http://supercollider.sourceforge.net
-[website]: http://space.k-hornz.de/software/bindings-sc3
+Currently, **bindings-sc3** requires [SuperCollider][] to be built from source (at least revision `12838871d99ff72cfa047aa07e1a53ba2b1c8f5b`). See the [SuperCollider development page][sc_development] for information on how to get the sources from the git repository and build SuperCollider (you need to pass `-DLIBSCSYNTH=ON` to `cmake` in order to build the shared library).
+
+#### MacOS X
+
+Assuming the environment variable `SC` points to the SuperCollider source tree, the bindings can then be installed as follows:
+
+    DYLD_LIBRARY_PATH=$SC/server/scsynth \
+        cabal install --extra-include-dirs=$SC/include/common \
+                      --extra-include-dirs=$SC/include/plugin_interface \
+                      --extra-include-dirs=$SC/include/server \
+                      --extra-lib-dirs=$SC/server/scsynth/
+
+### Reporting bugs
+
+Please report bugs in our [issue tracker][issues].
+
+### Development
+
+**bindings-sc3**'s source code is hosted at [github][]. You can check out a copy of the repository with the following command:
+
+    git://github.com/kaoskorobase/bindings-sc3.git
+
+[supercollider]: http://supercollider.sourceforge.net/
+[sc_development]: http://supercollider.sourceforge.net/developers/
+[issues]: https://github.com/kaoskorobase/bindings-sc3/issues/
+[github]: https://github.com/kaoskorobase/bindings-sc3/
diff --git a/bindings-sc3.cabal b/bindings-sc3.cabal
--- a/bindings-sc3.cabal
+++ b/bindings-sc3.cabal
@@ -1,29 +1,23 @@
 Name:                   bindings-sc3
-Version:                0.3.0
-Synopsis:               Bindings to the SuperCollider synthesis engine library.
+Version:                0.4.1
+Synopsis:               Low-level bindings to the SuperCollider synthesis engine library.
 Description:
+    DEPRECATED. This library is looking for a new maintainer.
+    .
     This library provides low level bindings to the SuperCollider synthesis
     engine library (@libscsynth@). If you are looking for a higher level
-    Haskell interface, please use the hsc3-process package
+    Haskell interface, please use the /hsc3-process/ package
     (<http://hackage.haskell.org/package/hsc3-process>).
     .
     ChangeLog: <https://github.com/kaoskorobase/bindings-sc3/blob/master/ChangeLog.md>
     .
-    In order to build this package, you need to first build the dynamic library
-    version of SuperCollider <supercollider.sourceforge.net> by passing
-    @-DLIBSCSYNTH=ON@ to @cmake@. Then build this library by passing the
-    location of the SuperCollider header files and dynamic library directory to
-    cabal:
-    .
-    @
-    cabal install bindings-sc3 \
-        --extra-include-dirs=$SC_SOURCES/include/common \
-        --extra-include-dirs=$SC_SOURCES/include/plugin_interface \
-        --extra-include-dirs=$SC_SOURCES/include/server \
-        --extra-library-dirs=$SC_SOURCES/server/scsynth
-    @
+    In order to use this package, you need to build the dynamic library version
+    of SuperCollider <supercollider.sourceforge.net> by passing
+    @-DLIBSCSYNTH=ON@ to @cmake@ and put it in a location where it can be found by the
+    linker (e.g. @/usr/local/lib@ on Unix systems, alternatively use the @--extra-lib-dirs@
+    flag of @cabal configure@).
     .
-    If you copy @libscsynth@ to a system library location, you may omit @--extra-library-dirs@.
+    The required SuperCollider version is 3.5.
 License:                GPL
 License-File:           LICENSE
 Category:               FFI, Sound
@@ -31,21 +25,26 @@
 Author:                 Stefan Kersten <sk@k-hornz.de>
 Maintainer:             Stefan Kersten <sk@k-hornz.de>
 Stability:              experimental
-Homepage:               http://space.k-hornz.de/software/bindings-sc3/
-Bug-Reports:            http://github.com/kaoskorobase/bindings-sc3/issues/
-Tested-With:            GHC == 6.12
+Homepage:               https://github.com/kaoskorobase/bindings-sc3/
+Bug-Reports:            https://github.com/kaoskorobase/bindings-sc3/issues/
+Tested-With:            GHC == 6.12, GHC == 7.0, GHC == 7.2
 Build-Type:             Simple
 Cabal-Version:          >= 1.6
 
 Data-Files:
     README.md
+    include/SC_Export.h
+    include/SC_Reply.h
+    include/SC_Types.h
+    include/SC_WorldOptions.h
 
 Library
     Extensions:         ForeignFunctionInterface
     Exposed-Modules:    Bindings.Sound.SC3
-    C-Sources:		    cbits/helper_functions.c
+    C-Sources:		cbits/helper_functions.c
     Build-Depends:      base >= 3 && < 5
                       , bindings-DSL >= 1.0 && < 1.1
+    Include-Dirs:       ./include
     Extra-Libraries:    scsynth
 
 Source-Repository head
diff --git a/include/SC_Export.h b/include/SC_Export.h
new file mode 100644
--- /dev/null
+++ b/include/SC_Export.h
@@ -0,0 +1,51 @@
+/*
+    SuperCollider real time audio synthesis system
+    Copyright (c) 2010 Tim Blechmann. All rights reserved.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+#ifndef _SC_EXPORTS_
+#define _SC_EXPORTS_
+
+#if defined _WIN32 || defined __CYGWIN__
+#  define SC_API_IMPORT __declspec(dllimport)
+#  define SC_API_EXPORT __declspec(dllexport)
+#else
+#  if __GNUC__ >= 4
+#    define SC_API_IMPORT __attribute__ ((visibility("default")))
+#    define SC_API_EXPORT __attribute__ ((visibility("default")))
+#  else
+#    define SC_API_IMPORT
+#    define SC_API_EXPORT
+#  endif
+#endif
+
+#ifdef __cplusplus
+#  define C_LINKAGE extern "C"
+#else
+#  define C_LINKAGE
+#endif
+
+#ifdef BUILDING_SUPERCOLLIDER // if SuperCollider is being built, instead of used
+#  define SC_DLLEXPORT_C C_LINKAGE SC_API_EXPORT
+#  define SC_DLLEXPORT SC_API_EXPORT
+#else
+#  define SC_DLLEXPORT_C C_LINKAGE SC_API_IMPORT
+#  define SC_DLLEXPORT SC_API_IMPORT
+#endif
+
+#endif
+
diff --git a/include/SC_Reply.h b/include/SC_Reply.h
new file mode 100644
--- /dev/null
+++ b/include/SC_Reply.h
@@ -0,0 +1,58 @@
+/*
+	SuperCollider real time audio synthesis system
+    Copyright (c) 2002 James McCartney. All rights reserved.
+	http://www.audiosynth.com
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+
+#ifndef _SC_Reply_
+#define _SC_Reply_
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#if defined(_WIN32)
+# include <winsock2.h>
+#else
+# include <netinet/in.h>
+#endif // _WIN32
+
+struct ReplyAddress;
+
+typedef void (*ReplyFunc)(struct ReplyAddress *inReplyAddr, char* inBuf, int inSize);
+
+void null_reply_func(struct ReplyAddress* addr, char* msg, int size);
+
+struct ReplyAddress
+{
+	struct sockaddr_in mSockAddr;
+	int mSockAddrLen;
+	int mSocket;
+	ReplyFunc mReplyFunc;
+	void *mReplyData;
+};
+
+#if defined(__cplusplus)
+bool operator==(const ReplyAddress& a, const ReplyAddress& b);
+#endif // __cplusplus
+
+inline void SendReply(struct ReplyAddress *inReplyAddr, char* inBuf, int inSize)
+{
+	(inReplyAddr->mReplyFunc)(inReplyAddr, inBuf, inSize);
+}
+
+#endif
diff --git a/include/SC_Types.h b/include/SC_Types.h
new file mode 100644
--- /dev/null
+++ b/include/SC_Types.h
@@ -0,0 +1,76 @@
+/*
+	SuperCollider real time audio synthesis system
+    Copyright (c) 2002 James McCartney. All rights reserved.
+	http://www.audiosynth.com
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+#ifndef _SC_Types_
+#define _SC_Types_
+
+#include <sys/types.h>
+
+#if !defined(__cplusplus)
+# include <stdbool.h>
+#endif // __cplusplus
+
+typedef int SCErr;
+
+#ifdef _WIN32
+typedef __int64	int64;
+typedef unsigned __int64 uint64;
+#else
+typedef long long int64;
+typedef unsigned long long uint64;
+#endif
+
+typedef int int32;
+typedef unsigned int uint32;
+
+typedef short int16;
+typedef unsigned short uint16;
+
+typedef signed char int8;
+typedef unsigned char uint8;
+
+typedef float float32;
+typedef double float64;
+
+typedef union {
+	uint32 u;
+	int32 i;
+	float32 f;
+} elem32;
+
+typedef union {
+	uint64 u;
+	int64 i;
+	float64 f;
+} elem64;
+
+const unsigned int kSCNameLen = 8;
+const unsigned int kSCNameByteLen = 8 * sizeof(int32);
+
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+#define sc_typeof_cast(x) (decltype(x))
+#elif defined(__GNUC__)
+#define sc_typeof_cast(x) (__typeof__(x))
+#else
+#define sc_typeof_cast(x) /* (typeof(x)) */
+#endif
+
+#endif
+
diff --git a/include/SC_WorldOptions.h b/include/SC_WorldOptions.h
new file mode 100644
--- /dev/null
+++ b/include/SC_WorldOptions.h
@@ -0,0 +1,115 @@
+/*
+	SuperCollider real time audio synthesis system
+    Copyright (c) 2002 James McCartney. All rights reserved.
+	http://www.audiosynth.com
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+*/
+
+
+#ifndef _SC_WorldOptions_
+#define _SC_WorldOptions_
+
+#include <stdarg.h>
+#include "SC_Reply.h"
+#include "SC_Types.h"
+#include "SC_Export.h"
+
+typedef int (*PrintFunc)(const char *format, va_list ap);
+
+struct WorldOptions
+{
+	const char* mPassword;
+	uint32 mNumBuffers;
+	uint32 mMaxLogins;
+	uint32 mMaxNodes;
+	uint32 mMaxGraphDefs;
+	uint32 mMaxWireBufs;
+	uint32 mNumAudioBusChannels;
+	uint32 mNumInputBusChannels;
+	uint32 mNumOutputBusChannels;
+	uint32 mNumControlBusChannels;
+	uint32 mBufLength;
+	uint32 mRealTimeMemorySize;
+
+	int mNumSharedControls;
+	float *mSharedControls;
+
+	bool mRealTime;
+	bool mMemoryLocking;
+
+	const char *mNonRealTimeCmdFilename;
+	const char *mNonRealTimeInputFilename;
+	const char *mNonRealTimeOutputFilename;
+	const char *mNonRealTimeOutputHeaderFormat;
+	const char *mNonRealTimeOutputSampleFormat;
+
+	uint32 mPreferredSampleRate;
+	uint32 mNumRGens;
+
+	uint32 mPreferredHardwareBufferFrameSize;
+
+	uint32 mLoadGraphDefs;
+
+	const char *mInputStreamsEnabled;
+	const char *mOutputStreamsEnabled;
+	const char *mInDeviceName;
+
+	int mVerbosity;
+
+	bool mRendezvous;
+
+	const char *mUGensPluginPath;
+
+	const char *mOutDeviceName;
+
+	const char *mRestrictedPath;
+
+	int mSharedMemoryID;
+};
+
+const struct WorldOptions kDefaultWorldOptions =
+{
+	0,1024,64,1024,1024,64,128,8,8,4096,64,8192, 0,0, 1, 0, 0,0,0,0,0
+#if defined(_WIN32)
+	,44100
+#else
+	,0
+#endif
+	,64, 0, 1
+	,0, 0, 0
+	,0
+	,1
+	,0
+	,0
+	,0
+	,0
+};
+
+struct SndBuf;
+
+SC_DLLEXPORT_C void SetPrintFunc(PrintFunc func);
+SC_DLLEXPORT_C struct World* World_New(struct WorldOptions *inOptions);
+SC_DLLEXPORT_C void World_Cleanup(struct World *inWorld);
+SC_DLLEXPORT_C void World_NonRealTimeSynthesis(struct World *inWorld, struct WorldOptions *inOptions);
+SC_DLLEXPORT_C int World_OpenUDP(struct World *inWorld, int inPort);
+SC_DLLEXPORT_C int World_OpenTCP(struct World *inWorld, int inPort, int inMaxConnections, int inBacklog);
+SC_DLLEXPORT_C void World_WaitForQuit(struct World *inWorld);
+SC_DLLEXPORT_C bool World_SendPacket(struct World *inWorld, int inSize, char *inData, ReplyFunc inFunc);
+SC_DLLEXPORT_C bool World_SendPacketWithContext(struct World *inWorld, int inSize, char *inData, ReplyFunc inFunc, void *inContext);
+SC_DLLEXPORT_C int World_CopySndBuf(struct World *world, uint32 index, struct SndBuf *outBuf, bool onlyIfChanged, bool *didChange);
+SC_DLLEXPORT_C int scprintf(const char *fmt, ...);
+
+#endif // _SC_WorldOptions_
