Index: src/FileSystemJsObject.cpp
===================================================================
--- a/src/FileSystemJsObject.cpp
+++ b/src/FileSystemJsObject.cpp
@@ -28,32 +28,32 @@
 
 using namespace AdblockPlus;
 
 namespace
 {
   class IoThread : public Thread
   {
   public:
-    IoThread(JsEnginePtr jsEngine, JsValuePtr callback)
+    IoThread(const JsEnginePtr& jsEngine, const JsConstValuePtr& callback)
       : Thread(true), jsEngine(jsEngine), fileSystem(jsEngine->GetFileSystem()),
         callback(callback)
     {
     }
 
   protected:
     JsEnginePtr jsEngine;
     FileSystemPtr fileSystem;
-    JsValuePtr callback;
+    JsConstValuePtr callback;
   };
 
   class ReadThread : public IoThread
   {
   public:
-    ReadThread(JsEnginePtr jsEngine, JsValuePtr callback,
+    ReadThread(const JsEnginePtr& jsEngine, const JsConstValuePtr& callback,
                const std::string& path)
       : IoThread(jsEngine, callback), path(path)
     {
     }
 
     void Run()
     {
       std::string content;
@@ -83,17 +83,17 @@
 
   private:
     std::string path;
   };
 
   class WriteThread : public IoThread
   {
   public:
-    WriteThread(JsEnginePtr jsEngine, JsValuePtr callback,
+    WriteThread(const JsEnginePtr& jsEngine, const JsConstValuePtr& callback,
                 const std::string& path, const std::string& content)
       : IoThread(jsEngine, callback), path(path), content(content)
     {
     }
 
     void Run()
     {
       std::string error;
@@ -122,17 +122,17 @@
   private:
     std::string path;
     std::string content;
   };
 
   class MoveThread : public IoThread
   {
   public:
-    MoveThread(JsEnginePtr jsEngine, JsValuePtr callback,
+    MoveThread(const JsEnginePtr& jsEngine, const JsConstValuePtr& callback,
                const std::string& fromPath, const std::string& toPath)
       : IoThread(jsEngine, callback), fromPath(fromPath), toPath(toPath)
     {
     }
 
     void Run()
     {
       std::string error;
@@ -159,17 +159,17 @@
   private:
     std::string fromPath;
     std::string toPath;
   };
 
   class RemoveThread : public IoThread
   {
   public:
-    RemoveThread(JsEnginePtr jsEngine, JsValuePtr callback,
+    RemoveThread(const JsEnginePtr& jsEngine, const JsConstValuePtr& callback,
                  const std::string& path)
       : IoThread(jsEngine, callback), path(path)
     {
     }
 
     void Run()
     {
       std::string error;
@@ -196,17 +196,17 @@
   private:
     std::string path;
   };
 
 
   class StatThread : public IoThread
   {
   public:
-    StatThread(JsEnginePtr jsEngine, JsValuePtr callback,
+    StatThread(const JsEnginePtr& jsEngine, const JsConstValuePtr& callback,
                const std::string& path)
       : IoThread(jsEngine, callback), path(path)
     {
     }
 
     void Run()
     {
       std::string error;
@@ -239,17 +239,17 @@
 
   private:
     std::string path;
   };
 
   v8::Handle<v8::Value> ReadCallback(const v8::Arguments& arguments)
   {
     AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arguments);
-    AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
+    AdblockPlus::JsConstValueList converted = jsEngine->ConvertArguments(arguments);
 
     v8::Isolate* isolate = arguments.GetIsolate();
     if (converted.size() != 2)
       return v8::ThrowException(Utils::ToV8String(isolate,
         "_fileSystem.read requires 2 parameters"));
     if (!converted[1]->IsFunction())
       return v8::ThrowException(Utils::ToV8String(isolate,
         "Second argument to _fileSystem.read must be a function"));
@@ -257,17 +257,17 @@
         converted[0]->AsString());
     readThread->Start();
     return v8::Undefined();
   }
 
   v8::Handle<v8::Value> WriteCallback(const v8::Arguments& arguments)
   {
     AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arguments);
-    AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
+    AdblockPlus::JsConstValueList converted = jsEngine->ConvertArguments(arguments);
 
     v8::Isolate* isolate = arguments.GetIsolate();
     if (converted.size() != 3)
       return v8::ThrowException(Utils::ToV8String(isolate,
         "_fileSystem.write requires 3 parameters"));
     if (!converted[2]->IsFunction())
       return v8::ThrowException(Utils::ToV8String(isolate,
         "Third argument to _fileSystem.write must be a function"));
@@ -275,17 +275,17 @@
         converted[0]->AsString(), converted[1]->AsString());
     writeThread->Start();
     return v8::Undefined();
   }
 
   v8::Handle<v8::Value> MoveCallback(const v8::Arguments& arguments)
   {
     AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arguments);
-    AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
+    AdblockPlus::JsConstValueList converted = jsEngine->ConvertArguments(arguments);
 
     v8::Isolate* isolate = arguments.GetIsolate();
     if (converted.size() != 3)
       return v8::ThrowException(Utils::ToV8String(isolate,
         "_fileSystem.move requires 3 parameters"));
     if (!converted[2]->IsFunction())
       return v8::ThrowException(Utils::ToV8String(isolate,
         "Third argument to _fileSystem.move must be a function"));
@@ -293,17 +293,17 @@
         converted[0]->AsString(), converted[1]->AsString());
     moveThread->Start();
     return v8::Undefined();
   }
 
   v8::Handle<v8::Value> RemoveCallback(const v8::Arguments& arguments)
   {
     AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arguments);
-    AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
+    AdblockPlus::JsConstValueList converted = jsEngine->ConvertArguments(arguments);
 
     v8::Isolate* isolate = arguments.GetIsolate();
     if (converted.size() != 2)
       return v8::ThrowException(Utils::ToV8String(isolate,
         "_fileSystem.remove requires 2 parameters"));
     if (!converted[1]->IsFunction())
       return v8::ThrowException(Utils::ToV8String(isolate,
         "Second argument to _fileSystem.remove must be a function"));
@@ -311,17 +311,17 @@
         converted[0]->AsString());
     removeThread->Start();
     return v8::Undefined();
   }
 
   v8::Handle<v8::Value> StatCallback(const v8::Arguments& arguments)
   {
     AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arguments);
-    AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
+    AdblockPlus::JsConstValueList converted = jsEngine->ConvertArguments(arguments);
 
     v8::Isolate* isolate = arguments.GetIsolate();
     if (converted.size() != 2)
       return v8::ThrowException(Utils::ToV8String(isolate,
         "_fileSystem.stat requires 2 parameters"));
     if (!converted[1]->IsFunction())
       return v8::ThrowException(Utils::ToV8String(isolate,
         "Second argument to _fileSystem.stat must be a function"));
@@ -329,17 +329,17 @@
         converted[0]->AsString());
     statThread->Start();
     return v8::Undefined();
   }
 
   v8::Handle<v8::Value> ResolveCallback(const v8::Arguments& arguments)
   {
     AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arguments);
-    AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
+    AdblockPlus::JsConstValueList converted = jsEngine->ConvertArguments(arguments);
 
     v8::Isolate* isolate = arguments.GetIsolate();
     if (converted.size() != 1)
       return v8::ThrowException(Utils::ToV8String(isolate,
         "_fileSystem.resolve requires 1 parameter"));
 
     std::string resolved = jsEngine->GetFileSystem()->Resolve(converted[0]->AsString());
 
