diff --git a/plugin.xml b/plugin.xml
index 458798e..394492c 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -2,8 +2,8 @@
 
 <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
 xmlns:android="http://schemas.android.com/apk/res/android"
-           id="org.apache.cordova.core.file"
-      version="0.2.2-dev">
+           id="org.apache.cordova.file"
+      version="0.2.2">
     <name>File</name>
     <description>Cordova File Plugin</description>
     <license>Apache 2.0</license>
diff --git a/www/Entry.js b/www/Entry.js
index c4985dc..0e1bc02 100644
--- a/www/Entry.js
+++ b/www/Entry.js
@@ -107,7 +107,7 @@
             if (entry) {
                 if (successCallback) {
                     // create appropriate Entry object
-                    var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath) : new (require('org.apache.cordova.core.file.FileEntry'))(entry.name, entry.fullPath);
+                    var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath) : new (require('org.apache.cordova.file.FileEntry'))(entry.name, entry.fullPath);
                     successCallback(result);
                 }
             }
@@ -148,7 +148,7 @@
             if (entry) {
                 if (successCallback) {
                     // create appropriate Entry object
-                    var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath) : new (require('org.apache.cordova.core.file.FileEntry'))(entry.name, entry.fullPath);
+                    var result = (entry.isDirectory) ? new (require('./DirectoryEntry'))(entry.name, entry.fullPath) : new (require('org.apache.cordova.file.FileEntry'))(entry.name, entry.fullPath);
                     successCallback(result);
                 }
             }
diff --git a/www/blackberry10/DirectoryEntry.js b/www/blackberry10/DirectoryEntry.js
index 295f88e..cb6628d 100644
--- a/www/blackberry10/DirectoryEntry.js
+++ b/www/blackberry10/DirectoryEntry.js
@@ -33,7 +33,7 @@
 
 function err(sandboxState, errorCallback) {
     return function (e) {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
         errorCallback(e);
     }
 };
@@ -50,22 +50,22 @@
         sandboxState = sandboxed;
     }, function (e) {
         console.log("[ERROR]: Could not retrieve sandbox state ", e);
-    }, "org.apache.cordova.core.file", "isSandboxed");
+    }, "org.apache.cordova.file", "isSandboxed");
 
     argscheck.checkArgs('sOFF', 'DirectoryEntry.getDirectory', arguments);
 
     if (fileUtils.isOutsideSandbox(path)) {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [false]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [false]);
         window.webkitRequestFileSystem(window.PERSISTENT, this.filesystem._size, function (fs) {
-            cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]);
+            cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
             fs.root.getDirectory(currentPath + '/' + path, options, function (entry) {
                 successCallback(fileUtils.createEntry(entry));
             }, err(sandboxState, errorCallback));
         }, err(sandboxState, errorCallback));
     } else {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [true]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [true]);
         window.webkitRequestFileSystem(fileUtils.getFileSystemName(this.filesystem) === "persistent" ? window.PERSISTENT : window.TEMPORARY, this.filesystem._size, function (fs) {
-            cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]);
+            cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
             fs.root.getDirectory(currentPath + '/' + path, options, function (entry) {
                 successCallback(fileUtils.createEntry(entry));
             }, err(sandboxState, errorCallback));
@@ -86,22 +86,22 @@
         sandboxState = sandboxed;
     }, function (e) {
         console.log("[ERROR]: Could not retrieve sandbox state ", e);
-    }, "org.apache.cordova.core.file", "isSandboxed");
+    }, "org.apache.cordova.file", "isSandboxed");
 
     argscheck.checkArgs('sOFF', 'DirectoryEntry.getFile', arguments);
 
     if (fileUtils.isOutsideSandbox(path)) {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [false]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [false]);
         window.webkitRequestFileSystem(window.PERSISTENT, this.filesystem._size, function (fs) {
-            cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]);
+            cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
             fs.root.getFile(currentPath + '/' + path, options, function (entry) {
                 successCallback(fileUtils.createEntry(entry));
             }, err(sandboxState, errorCallback));
         }, err(sandboxState, errorCallback));
     } else {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [true]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [true]);
         window.webkitRequestFileSystem(fileUtils.getFileSystemName(this.filesystem) === "persistent" ? window.PERSISTENT: window.TEMPORARY, this.filesystem._size, function (fs) {
-            cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]);
+            cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
             fs.root.getFile(currentPath + '/' + path, options, function (entry) {
                 successCallback(fileUtils.createEntry(entry));
             }, err(sandboxState, errorCallback));
diff --git a/www/blackberry10/resolveLocalFileSystemURI.js b/www/blackberry10/resolveLocalFileSystemURI.js
index 06c1f73..4d5af61 100644
--- a/www/blackberry10/resolveLocalFileSystemURI.js
+++ b/www/blackberry10/resolveLocalFileSystemURI.js
@@ -35,12 +35,12 @@
         sandboxState = sandboxed;
     }, function (e) {
         console.log("[ERROR]: Could not retrieve sandbox state ", e);
-    }, "org.apache.cordova.core.file", "isSandboxed");
+    }, "org.apache.cordova.file", "isSandboxed");
 
     if (fileUtils.isOutsideSandbox(stripURI(decodedURI))) {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [false]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [false]);
     } else {
-        cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [true]);
+        cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [true]);
     }
     window.webkitResolveLocalFileSystemURL(decodedURI, function (entry) {
         success(fileUtils.createEntry(entry));
@@ -51,5 +51,5 @@
             fail(e);
         });
     });
-    cordova.exec(null, null, "org.apache.cordova.core.file", "setSandbox", [sandboxState]);
+    cordova.exec(null, null, "org.apache.cordova.file", "setSandbox", [sandboxState]);
 };
