diff --git a/LslPlus.cabal b/LslPlus.cabal
--- a/LslPlus.cabal
+++ b/LslPlus.cabal
@@ -1,5 +1,5 @@
 Name:           LslPlus
-version:        0.4.0
+version:        0.4.1
 Synopsis:	    An execution and testing framework for the Linden Scripting Language (LSL)
 Description:	
 	Provides a framework for executing Linden Scripting Language scripts offline,
@@ -20,7 +20,7 @@
 Extra-source-files: NOTICE
 
 Executable LslPlus
-  Build-Depends:  ghc >= 6.10, base >= 4.0 && < 4.1, haskell98, filepath >= 1.1.0.0 && < 1.2, parsec >= 2.1.0.0 && < 3,
+  Build-Depends:  base >= 4.0 && < 4.1, haskell98, filepath >= 1.1.0.0 && < 1.2, parsec >= 2.1.0.0 && < 3,
                   HaXml >= 1.19 && < 1.20, directory > 1 && < 1.1, mtl >= 1.1 && < 1.2, array >= 0.2 && < 0.3,
                   network >= 2.1 && < 2.3, random >= 1.0, containers >= 0.1 && < 0.3, old-time, utf8-string >= 0.3 && < 0.4,
                   pureMD5 >= 0.2 && < 3, bytestring >= 0.9 && < 0.10, template-haskell >= 2.3.0.0 && < 2.4, syb >= 0.1.0.0 && < 0.2.0.0
diff --git a/src/Language/Lsl/Internal/Exec.hs b/src/Language/Lsl/Internal/Exec.hs
--- a/src/Language/Lsl/Internal/Exec.hs
+++ b/src/Language/Lsl/Internal/Exec.hs
@@ -29,7 +29,7 @@
 
 import Language.Lsl.Internal.Breakpoint(Breakpoint(..),StepManager(..),pushStepManagerFrame,popStepManagerFrame,emptyStepManager,mkBreakpoint)
 import Language.Lsl.Internal.CodeHelper(renderCall)
-import Language.Lsl.Internal.FuncSigs(funcSigs)
+import Language.Lsl.Internal.FuncSigs(convertArgs)
 import Language.Lsl.Internal.Util(fromInt,lookupM,ctx,findM)
 import Language.Lsl.Syntax(Expr(..),
                   CompiledLSLScript(..),
@@ -54,7 +54,8 @@
                   rmCtx)
 import Language.Lsl.Internal.Type(LSLType(..),LSLValue(..),typeOfLSLComponent,typeOfLSLValue,toFloat,toSVal,
                 lslShowVal,replaceLslValueComponent,vecMulScalar,rotMulVec,parseVector,parseRotation,
-                parseInt,parseFloat,invRot,rotMul,vcross,Component(..),lslValueComponent)
+                parseInt,parseFloat,invRot,rotMul,vcross,Component(..),lslValueComponent,
+                convertValues)
 import Language.Lsl.Internal.Key(nullKey,nextKey)
 import Language.Lsl.Internal.Evaluation(EvalResult(..),Event(..),ScriptInfo(..))
 import Language.Lsl.Internal.Constants(findConstVal,llcZeroRotation,llcZeroVector)
@@ -1088,9 +1089,7 @@
 
 evalPredef' name = 
     do (LVal args) <- popVal
-       let args' = case find (\ (fname,_,_) -> name == fname) funcSigs of
-                   Nothing -> args
-                   Just (_,_,argTypes) -> convertArgs argTypes args
+       let args' = convertArgs name args
        key <- getMyPrimKey
        sid <- getScriptName
        oid <- getObjectId
@@ -1100,12 +1099,12 @@
        (evalResult,retval) <- doAction name scriptInfo args'    
        pushVal retval
        return evalResult
-    where convertArgs argTypes args = zipWith convertArg argTypes args
-          convertArg LLFloat (IVal i) = FVal $ fromInt i
-          convertArg LLInteger (FVal f) = IVal $ floor f
-          convertArg LLKey (SVal s) = KVal s
-          convertArg LLString (KVal k) = SVal k
-          convertArg _ v = v
+--     where convertArgs argTypes args = zipWith convertArg argTypes args
+--           convertArg LLFloat (IVal i) = FVal $ fromInt i
+--           convertArg LLInteger (FVal f) = IVal $ floor f
+--           convertArg LLKey (SVal s) = KVal s
+--           convertArg LLString (KVal k) = SVal k
+--           convertArg _ v = v
           
 ctxList es = map (Ctx Nothing) es
 
diff --git a/src/Language/Lsl/Internal/FuncSigs.hs b/src/Language/Lsl/Internal/FuncSigs.hs
--- a/src/Language/Lsl/Internal/FuncSigs.hs
+++ b/src/Language/Lsl/Internal/FuncSigs.hs
@@ -1,9 +1,12 @@
 module Language.Lsl.Internal.FuncSigs(
     funcDescriptions,
     funcMeta,
-    funcSigs) where
+    funcSigs,
+    findSig,
+    convertArgs) where
 
-import Language.Lsl.Internal.Type(LSLType(..))
+import Data.List(find)
+import Language.Lsl.Internal.Type(LSLType(..), convertValues,LSLValue)
 
 -- TODO: import real info into funcMeta, and derive funcSigs from that
 funcMeta :: [(String,LSLType,[(String,LSLType)],String)]
@@ -16,6 +19,13 @@
             in (name, rt,zip argNames args,description)
     in map sig2Meta funcSigs
         
+findSig name = find (\ (fname,_,_) -> name == fname) funcSigs
+
+convertArgs :: RealFrac a => String -> [LSLValue a] -> [LSLValue a]
+convertArgs name args = case findSig name of
+    Nothing -> args
+    Just (_,_,argTypes) -> convertValues argTypes args
+
 funcSigs :: [(String,LSLType,[LSLType])]
 funcSigs = [
     ("llAbs",LLInteger,[LLInteger]),
diff --git a/src/Language/Lsl/Internal/Optimize.hs b/src/Language/Lsl/Internal/Optimize.hs
--- a/src/Language/Lsl/Internal/Optimize.hs
+++ b/src/Language/Lsl/Internal/Optimize.hs
@@ -18,7 +18,7 @@
 import Language.Lsl.Parse
 import Language.Lsl.Render
 import Language.Lsl.Internal.Constants(allConstants,Constant(..),findConstVal)
-import Language.Lsl.Internal.FuncSigs(funcSigs)
+import Language.Lsl.Internal.FuncSigs(funcSigs,convertArgs)
 import Language.Lsl.Internal.InternalLLFuncs(internalLLFuncs,internalLLFuncNames)
 import Language.Lsl.Internal.OptimizerOptions(OptimizerOption(..))
 import Language.Lsl.Syntax(CompiledLSLScript(..),Expr(..),Statement(..),Var(..),
@@ -985,7 +985,7 @@
         Nothing -> return e
         Just vs -> 
             case lookup nm internalLLFuncs of
-                Just f -> return (valToExpr $ snd (Id.runIdentity (f () vs)))
+                Just f -> return (valToExpr $ snd (Id.runIdentity (f () (convertArgs nm vs))))
                 Nothing -> do
                     pureFuncs <- get >>= return . siPureFuncs
                     script <- get >>= return . siScript
diff --git a/src/Language/Lsl/Internal/SerializationGenerator.hs b/src/Language/Lsl/Internal/SerializationGenerator.hs
--- a/src/Language/Lsl/Internal/SerializationGenerator.hs
+++ b/src/Language/Lsl/Internal/SerializationGenerator.hs
@@ -84,7 +84,7 @@
     
 instance JavaRep String where
     representative = ""
-    xmlSerialize t s = emit (maybe "string" id t) (maybe [] (const [("class","string")]) t) [showString s]
+    xmlSerialize t s = emit (maybe "string" id t) (maybe [] (const [("class","string")]) t) [(showString . xmlEscape) s]
     xmlDefaultTag _ = "string"
     subElemDescriptor tag = el tag id simpleContent
     elemDescriptor = el "string" id simpleContent
diff --git a/src/Language/Lsl/Internal/Type.hs b/src/Language/Lsl/Internal/Type.hs
--- a/src/Language/Lsl/Internal/Type.hs
+++ b/src/Language/Lsl/Internal/Type.hs
@@ -3,6 +3,7 @@
     LSLType(..),
     LSLValue(..),
     Component(..),
+    convertValues,
     typeOfLSLValue,
     typeOfLSLComponent,
     parseFloat,
@@ -260,3 +261,11 @@
 
 rot2RVal (x,y,z,s) = RVal x y z s
 rVal2Rot (RVal x y z s) = (x,y,z,s)
+
+
+convertValues argTypes args = zipWith convertArg argTypes args
+    where convertArg LLFloat (IVal i) = FVal $ fromInt i
+          convertArg LLInteger (FVal f) = IVal $ floor f
+          convertArg LLKey (SVal s) = KVal s
+          convertArg LLString (KVal k) = SVal k
+          convertArg _ v = v
diff --git a/src/Language/Lsl/Render.hs b/src/Language/Lsl/Render.hs
--- a/src/Language/Lsl/Render.hs
+++ b/src/Language/Lsl/Render.hs
@@ -12,7 +12,7 @@
 renderCompiledScript stamp (CompiledLSLScript comment globals funcs states) =
    (renderString "// LSL script generated: " . renderString stamp . renderString "\n" .
     renderString comment .
-    renderGlobals globals . renderFuncs funcs . renderStates states) ""
+    renderGlobals globals . renderFuncs funcs . renderStates states . renderString "\n") ""
 
 renderSequence r = (foldl' (.) blank) . (map r)
 
@@ -20,8 +20,8 @@
 
 renderGlobal (GDecl (Ctx sc var) val) = renderPreText sc . renderVar var . 
     case val of 
-        Nothing -> renderString ";\n"
-        Just expr -> renderString " = " . renderSimple expr . renderString ";\n"
+        Nothing -> renderString ";"
+        Just expr -> renderString " = " . renderSimple expr . renderString ";"
 
 renderCtxSimple (Ctx _ expr) = renderSimple expr
 renderSimple (Neg expr) = renderChar '-' . renderCtxExpr expr
@@ -44,10 +44,10 @@
 
 renderState (Ctx ssc (State (Ctx sc "default") handlers)) = 
     renderPreText ssc .
-    renderString "default {\n" . renderHandlers handlers . renderString "}\n"
+    renderString "default {\n" . renderHandlers handlers . renderString "}"
 renderState (Ctx ssc (State (Ctx _ name) handlers)) =
     renderPreText ssc .
-    renderString "state " . renderString name . renderString " {\n" . renderHandlers handlers . renderString "}\n"
+    renderString "state " . renderString name . renderString " {\n" . renderHandlers handlers . renderString "}"
  
 renderHandlers = renderSequence renderHandler
 
@@ -72,9 +72,9 @@
 
 renderFuncs = renderSequence renderCtxFunc
 
-renderCtxFunc (Ctx _ func) = renderFunc func
+renderCtxFunc (Ctx sc func) = renderPreText sc . renderFunc func
 renderFunc (Func dec stmts) = 
-    renderFuncDec dec . renderString "{\n" . renderStatements 0 stmts . renderString "}\n"
+    renderFuncDec dec . renderString "{\n" . renderStatements 0 stmts . renderString "}"
 
 renderIndent 0 = renderString "    "
 renderIndent n = renderString "    " . renderIndent (n - 1)
@@ -230,7 +230,7 @@
 blank = id
 
 renderPreText :: (Maybe SourceContext) -> String -> String
-renderPreText = maybe blank (renderString . srcPreText)
+renderPreText = maybe (renderString "\n") (renderString . srcPreText)
 
 renderPreText1 :: (String -> String) -> (Maybe SourceContext) -> String -> String
-renderPreText1 f = maybe f (renderString . srcPreText)
+renderPreText1 f = maybe (renderString "\n" . f) (renderString . srcPreText)
