diff --git a/HGamer3D-API.cabal b/HGamer3D-API.cabal
--- a/HGamer3D-API.cabal
+++ b/HGamer3D-API.cabal
@@ -1,17 +1,13 @@
 Name:                HGamer3D-API
-Version:             0.1.5
+Version:             0.1.6
 Synopsis:            Library to enable 3D game development for Haskell - API
 Description:         
 	Library, to enable 3D game development for Haskell,
 	based on bindings to 3D Graphics, Audio and GUI libraries.
-	THIS MODULE: APIs
-    List of features and modules: 
-	  Data Module (Basic Data Types),
-      OGRE Binding (3D Graphics Engine), 
-      OIS Binding (Input System),
-      cAudio Binding (Audio),
-      CEGUI Binding (GUI System),
-      APIs (Haskell style APIs, different ways, to approach API)
+	
+	This is the API module, which gives the higher level API for primary
+	use.
+	
     Platform: Windows only
 	License: Apache License, Version 2.0
 	Install: see http://www.althainz.de/HGamer3D/Download-and-Installation.html
@@ -27,9 +23,9 @@
 Extra-source-files:  Setup.hs 
 
 Library
-  Build-Depends:     base >= 3 && < 5, HGamer3D-Data == 0.1.5, HGamer3D-Ogre-Binding == 0.1.5, HGamer3D-OIS-Binding == 0.1.5
+  Build-Depends:     base >= 3 && < 5, HGamer3D-Data == 0.1.5, HGamer3D-Ogre-Binding == 0.1.5, HGamer3D-SFML-Binding == 0.1.6
 
-  Exposed-modules:   HGamer3D.APIs.One
+  Exposed-modules:   HGamer3D.APIs.One,HGamer3D.APIs.Two.Audio,HGamer3D.APIs.Two.InputSystem
   Other-modules:     
 
   c-sources:         
diff --git a/HGamer3D/APIs/One.hs b/HGamer3D/APIs/One.hs
--- a/HGamer3D/APIs/One.hs
+++ b/HGamer3D/APIs/One.hs
@@ -46,7 +46,6 @@
 
 	-- Data types - basic systems
 	
-	InputSystem (InputSystem, isOisbSystem, isOisbSchema),
 	ViewSystem (ViewSystem, vsCamera, vsRenderWindow, vsViewport),
 	EngineSystem (EngineSystem, esRoot, esSceneManager, esResourceGroupManager, esTextureManager, esControllerManager),
 	
@@ -115,26 +114,6 @@
 	-- Time Functions
 	getTime,
 	
-	-- Event Functions
-	Action (Action),
-	createTriggerAction,
-	bindKey,
-	isActionActive,
-	createAnalogAxisAction,
-	bindMouseAxis,
-	bindJoystickAxis,
-	bindMouseButton,
-	bindJoystickButton,
-	getActionAbsoluteValue,
-	getActionRelativeValue,
-
-	isMouseAvailable,
-	isJoystickAvailable,
-	getAvailableAxisMouse,
-	getAvailableButtonsMouse,
-	getAvailableAxisJoystick,
-	getAvailableButtonsJoystick,
-	
 	-- run it
 	renderLoop,
 	
@@ -145,8 +124,6 @@
 import GHC.Ptr
 
 import HGamer3D.Bindings.Ogre.ClassPtr
-import HGamer3D.Bindings.OIS.ClassPtr
-
 import HGamer3D.Bindings.Ogre.Utils
 
 import HGamer3D.Data.Colour
@@ -187,17 +164,6 @@
 import HGamer3D.Bindings.Ogre.TypeHG3DClass
 import HGamer3D.Bindings.Ogre.EnumPrefabType
 
-import HGamer3D.Bindings.OIS.Utils
-import HGamer3D.Bindings.OIS.ClassSystem
-import HGamer3D.Bindings.OIS.ClassAction
-import HGamer3D.Bindings.OIS.ClassActionSchema
-import HGamer3D.Bindings.OIS.ClassAnalogAxisAction
-import HGamer3D.Bindings.OIS.EnumActionType
-import HGamer3D.Bindings.OIS.ClassDevice
-
-
-import HGamer3D.Bindings.OIS.TypeHG3DClass
-
 import HGamer3D.Data.HG3DClass
 
 
@@ -206,12 +172,6 @@
 ---
 
 
--- |The encapsulation of the state of input devices, like keyboard, mouse, ...
-data InputSystem = InputSystem {
-	isOisbSystem::HG3DClass,
-	isOisbSchema::HG3DClass
-} deriving (Show, Eq)
-
 -- |The encapsulation of the state of the view, camera, window and viewport
 data ViewSystem = ViewSystem {
 	vsCamera::HG3DClass,
@@ -320,7 +280,7 @@
 -- the graphics engine, the input system and the view
 initializeHG3D :: String -- ^Name of the window, displayed
 			-> String  -- ^SceneManager type used
-			-> IO (EngineSystem, ViewSystem, InputSystem)
+			-> IO (EngineSystem, ViewSystem)
 initializeHG3D windowName sceneManagerType = do
 
 		root <- cRNew
@@ -328,11 +288,6 @@
 		fUAddResourceLocations "resources.cfg"
 		renderWindow <-cRInitialise root True windowName ""
 		
-		fUInitializeOis renderWindow
-		oisbSystem <- cSyGetSingletonPtr
-		oisbSchema <- cSyGetDefaultActionSchemaAutoCreate oisbSystem
-		
-		
 		sceneManager <- cRCreateSceneManager root sceneManagerType "SceneManager"
 		
 		camera <- cSmCreateCamera sceneManager "SimpleCamera"
@@ -359,8 +314,7 @@
 
 		return (
 			EngineSystem root sceneManager rgm tm cm,
-			ViewSystem  camera renderWindow viewport,
-			InputSystem oisbSystem oisbSchema
+			ViewSystem  camera renderWindow viewport
 			)
 
 
@@ -612,120 +566,13 @@
 	return (Time time)
 
 
--- event functions, OIS stuff
-
-data Action = Action HG3DClass
-
-runIsFrame :: InputSystem -> Float -> IO ()
-runIsFrame is delta = do
-	cSyProcess (isOisbSystem is) delta
-	return ()
-
-createTriggerAction :: InputSystem -> String -> IO (Action)
-createTriggerAction is actionName = do
-	let schema = isOisbSchema is
-	action <- cAsCreateTriggerAction schema actionName
-	return (Action action)
 	
-createAnalogAxisAction :: InputSystem -> Float -> Float -> String -> IO (Action)
-createAnalogAxisAction is minval maxval actionName = do
-	let schema = isOisbSchema is
-	action <- cAsCreateAnalogAxisAction schema actionName
-	cAaaSetMinimumValue action minval
-	cAaaSetMaximumValue action maxval
-	return (Action action)
-	
-bindKey :: Action -> String -> IO ()
-bindKey (Action action) keyChar = do
-	cABind4 action ("Keyboard/" ++ keyChar)
-	return ()
-
-isMouseAvailable :: InputSystem -> IO (Bool)
-isMouseAvailable is = do
-	avail <- cSyHasDevice (isOisbSystem is) "Mouse"
-	return (avail)
-
-bindMouseAxis :: Action -> String -> IO ()
-bindMouseAxis (Action action) axisName = do
-	cABind4 action ("Mouse/" ++ axisName)
-	return ()
-
-bindMouseButton :: Action -> String -> IO ()
-bindMouseButton (Action action) buttonName = do
-	cABind4 action ("Mouse/" ++ buttonName)
-	return ()
-
-isJoystickAvailable :: InputSystem -> String -> IO (Bool)
-isJoystickAvailable is name = do
-	avail <- cSyHasDevice (isOisbSystem is) name
-	return (avail)
-	
-bindJoystickAxis :: Action -> String -> String -> IO ()
-bindJoystickAxis (Action action) joystickName axisName = do
-	cABind4 action (joystickName ++ "/" ++ axisName)
-	return ()
-
-bindJoystickButton :: Action -> String -> String -> IO ()
-bindJoystickButton (Action action) joystickName buttonName = do
-	cABind4 action (joystickName ++ "/" ++ buttonName)
-	return ()
-
-                   
-getAvailableAxisMouse :: InputSystem -> IO [String]
-getAvailableAxisMouse is = do
-	dev <- cSyGetDevice (isOisbSystem is) "Mouse"
-	let axes = map (\x -> x ++ " Axis") ["X", "Y", "Z"]
-	bools <- mapM (cDHasState dev) axes
-	let avail = map fst $ filter snd (zip axes bools)
-	return (avail)
-	
-getAvailableButtonsMouse :: InputSystem -> IO [String]
-getAvailableButtonsMouse is = do
-	dev <- cSyGetDevice (isOisbSystem is) "Mouse"
-	let buttons = (map (\bt -> "Button " ++ (show bt)) [0..50]) ++ (map (\bt -> bt ++ " Button") ["Left", "Middle", "Right"])
-	bools <- mapM (cDHasState dev) buttons
-	let avail = map fst $ filter snd (zip buttons bools)
-	return (avail)
-	
-getAvailableAxisJoystick :: InputSystem -> String -> IO [String]
-getAvailableAxisJoystick is name = do
-	dev <- cSyGetDevice (isOisbSystem is) name
-	let axes = (map (\x -> "Axis " ++ (show x)) [0..50]) ++  (map (\x -> "Slider " ++ (show x)) [0..50])
-	bools <- mapM (cDHasState dev) axes
-	let avail = map fst $ filter snd (zip axes bools)
-	return (avail)
-	
-getAvailableButtonsJoystick :: InputSystem -> String -> IO [String]
-getAvailableButtonsJoystick is name = do
-	dev <- cSyGetDevice (isOisbSystem is) name
-	let buttons = (map (\bt -> "Button " ++ (show bt)) [0..50])
-	bools <- mapM (cDHasState dev) buttons
-	let avail = map fst $ filter snd (zip buttons bools)
-	return (avail)
-	
-
-isActionActive :: Action -> IO (Bool)
-isActionActive (Action action) = do
-	flag <- cAIsActive action
-	return (flag)
-	
-getActionAbsoluteValue :: Action -> IO (Float)
-getActionAbsoluteValue (Action action) = do
-	val <- cAaaGetAbsoluteValue action
-	return (val)
-	
-getActionRelativeValue :: Action -> IO (Float)
-getActionRelativeValue (Action action) = do
-	val <- cAaaGetRelativeValue action
-	return (val)
-	
--- renderStep a :: EngineSystem -> ViewSystem -> InputSystem -> Time -> a -> IO (Bool, a)
+-- renderStep a :: EngineSystem -> ViewSystem -> Time -> a -> IO (Bool, a)
 
-renderInternalStep :: EngineSystem -> ViewSystem -> InputSystem -> Time -> IO (Bool, Time)
-renderInternalStep es vs is (Time lastTime) = do
+renderInternalStep :: EngineSystem -> ViewSystem -> Time -> IO (Bool, Time)
+renderInternalStep es vs (Time lastTime) = do
 	(Time time) <- getTime es
 	let delta = time - lastTime
-	runIsFrame is delta
 	fUMessagePump
 	closed <- cRwIsClosed (vsRenderWindow vs)
 	if (closed) then
@@ -734,12 +581,12 @@
 			cRRenderOneFrame (esRoot es)
 			return (True, (Time time))
 
-renderLoop :: EngineSystem -> ViewSystem -> InputSystem -> Time -> a -> (EngineSystem -> ViewSystem -> InputSystem -> Time -> a -> IO (Bool, a)) -> IO ()
-renderLoop es vs is t a renderStep = do
-	(flagStep, time) <- renderInternalStep es vs is t
-	(flagLoop, a) <- renderStep es vs is time a
+renderLoop :: EngineSystem -> ViewSystem -> Time -> a -> (EngineSystem -> ViewSystem -> Time -> a -> IO (Bool, a)) -> IO ()
+renderLoop es vs t a renderStep = do
+	(flagStep, time) <- renderInternalStep es vs t
+	(flagLoop, a) <- renderStep es vs time a
 	if (flagStep && flagLoop) then do
-		renderLoop es vs is time a renderStep
+		renderLoop es vs time a renderStep
 		else return ()
 			
 
diff --git a/HGamer3D/APIs/Two/Audio.hs b/HGamer3D/APIs/Two/Audio.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/APIs/Two/Audio.hs
@@ -0,0 +1,174 @@
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.althainz.de/HGamer3D.html
+--
+-- (c) 2011 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- InputSystem.hs
+
+-- |This module is one sub module of the second attempt, to provide an 
+-- abstracted interface to the HGamer3D API Bindings. It is named 'Two',
+-- submodule Audio and handles Music and Sound.
+
+module HGamer3D.APIs.Two.Audio
+
+(
+	-- Enums
+	--
+	module HGamer3D.Bindings.SFML.EnumSoundSourceStatus,
+	
+	
+	-- Low Level Interface
+	--
+	
+	-- Listener Functions
+	setAudioVolume,
+	getAudioVolume,
+	setAudioPosition,
+	setAudioDirection,
+
+	-- Music Functions
+	newMusic,
+	deleteMusic,
+	openMusicFromFile,
+	
+	-- Sound Functions
+	newSound,
+	deleteSound,
+	setSoundBuffer,
+
+	playSound,
+	pauseSound,
+	stopSound,
+
+	setSoundLoop,
+	getSoundLoop,
+	resetSoundBuffer,
+	
+	-- SoundBuffer Functions
+	newBuffer, 
+	deleteBuffer, 
+	loadBufferFromFile, 
+
+	-- SoundSource Functions
+	setSourcePitch,
+	setSourceVolume,
+	setSourcePosition,
+	setSourceAttenuation,
+
+	getSourcePitch,
+	getSourceVolume,
+	getSourceMinDistance,
+	getSourceAttenuation,
+
+	attachSourceToListener,
+	isSourceAttachedToListener,
+
+	-- SoundStream Functions
+	playStream,
+	pauseStream,
+	stopStream,
+
+	setStreamLoop,
+	getStreamLoop,
+
+	
+)
+
+where
+
+import GHC.Ptr
+
+import HGamer3D.Bindings.SFML.ClassPtr
+import HGamer3D.Bindings.SFML.Utils
+
+import qualified HGamer3D.Bindings.SFML.ClassListener as Listener
+import qualified HGamer3D.Bindings.SFML.ClassMusic as Music 
+import qualified HGamer3D.Bindings.SFML.ClassSound as Sound
+import qualified HGamer3D.Bindings.SFML.ClassSoundBuffer as SoundBuffer
+import qualified HGamer3D.Bindings.SFML.ClassSoundSource as SoundSource
+import qualified HGamer3D.Bindings.SFML.ClassSoundStream as SoundStream
+import HGamer3D.Bindings.SFML.EnumSoundSourceStatus
+
+
+-- Low Level Interface
+--
+
+-- Listener Functions
+
+setAudioVolume = Listener.setGlobalVolume
+getAudioVolume = Listener.getGlobalVolume
+setAudioPosition = Listener.setPosition
+setAudioDirection = Listener.setDirection
+
+
+-- Music Functions
+--
+
+newMusic = Music.new
+deleteMusic = Music.delete
+openMusicFromFile = Music.openFromFile
+
+-- Sound Functions
+--
+
+newSound = Sound.new
+deleteSound = Sound.delete
+
+playSound = Sound.play
+pauseSound = Sound.pause
+stopSound = Sound.stop
+
+setSoundBuffer = Sound.setBuffer
+setSoundLoop = Sound.setLoop
+getSoundLoop = Sound.getLoop
+resetSoundBuffer = Sound.resetBuffer
+
+-- Sound Buffer Functions
+--
+
+newBuffer = SoundBuffer.new
+deleteBuffer = SoundBuffer.delete
+loadBufferFromFile = SoundBuffer.loadFromFile
+
+-- Sound Source Functions
+--
+
+setSourcePitch = SoundSource.setPitch
+setSourceVolume = SoundSource.setVolume
+setSourcePosition = SoundSource.setPosition
+setSourceAttenuation = SoundSource.setAttenuation
+
+getSourcePitch = SoundSource.getPitch
+getSourceVolume = SoundSource.getVolume
+getSourceMinDistance = SoundSource.getMinDistance
+getSourceAttenuation = SoundSource.getAttenuation
+
+attachSourceToListener = SoundSource.setRelativeToListener
+isSourceAttachedToListener = SoundSource.isRelativeToListener
+
+
+-- Sound Stream Functions
+--
+
+playStream = SoundStream.play
+pauseStream = SoundStream.pause
+stopStream = SoundStream.stop
+
+setStreamLoop = SoundStream.setLoop
+getStreamLoop = SoundStream.getLoop
+
+
+
diff --git a/HGamer3D/APIs/Two/InputSystem.hs b/HGamer3D/APIs/Two/InputSystem.hs
new file mode 100644
--- /dev/null
+++ b/HGamer3D/APIs/Two/InputSystem.hs
@@ -0,0 +1,89 @@
+-- This source file is part of HGamer3D
+-- (A project to enable 3D game development in Haskell)
+-- For the latest info, see http://www.althainz.de/HGamer3D.html
+--
+-- (c) 2011 Peter Althainz
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+-- InputSystem.hs
+
+-- |This module is one sub module of the second attempt, to provide an 
+-- abstracted interface to the HGamer3D API Bindings. It is named 'Two',
+-- submodule Input System and handles Mouse, Keyboard and Joystick Input.
+
+module HGamer3D.APIs.Two.InputSystem
+
+(
+	-- Enums
+	--
+	module HGamer3D.Bindings.SFML.EnumJoystickAxis,
+	module HGamer3D.Bindings.SFML.EnumKey,
+	module HGamer3D.Bindings.SFML.EnumMouseButton,
+	
+	-- Joystick Functions
+	isJoystickConnected,
+	updateJoystickStatus,
+	getJoystickButtonCount,
+	isJoystickButtonPressed,
+	hasJoystickAxis,
+	getJoystickPosition,
+	
+	-- Keyboard Functions
+	isKeyPressed,
+	
+	-- Mouse Functions
+	isMouseButtonPressed,
+	getMousePosition,
+	
+	
+	
+)
+
+where
+
+import GHC.Ptr
+
+import HGamer3D.Bindings.SFML.ClassPtr
+import HGamer3D.Bindings.SFML.Utils
+
+import qualified HGamer3D.Bindings.SFML.ClassJoystick as Joystick
+import qualified HGamer3D.Bindings.SFML.ClassKeyboard as Keyboard
+import qualified HGamer3D.Bindings.SFML.ClassMouse as Mouse
+import qualified HGamer3D.Bindings.SFML.ClassMouseHG3D as Mouse2
+import HGamer3D.Bindings.SFML.EnumJoystickAxis
+import HGamer3D.Bindings.SFML.EnumKey
+import HGamer3D.Bindings.SFML.EnumMouseButton
+
+-- Joystick funtions
+--
+
+isJoystickConnected = Joystick.isConnected
+updateJoystickStatus = Joystick.update
+getJoystickButtonCount = Joystick.getButtonCount
+isJoystickButtonPressed = Joystick.isButtonPressed
+hasJoystickAxis = Joystick.hasAxis
+getJoystickPosition = Joystick.getAxisPosition
+
+-- Keyboard functions
+--
+
+isKeyPressed = Keyboard.isKeyPressed
+
+-- Mouse functions
+--
+
+isMouseButtonPressed = Mouse.isButtonPressed
+getMousePosition = Mouse2.getPosition
+
+
