diff --git a/include/utils/Tokenizer.h b/include/utils/Tokenizer.h
index bfe8923..21e58e6 100644
--- a/include/utils/Tokenizer.h
+++ b/include/utils/Tokenizer.h
@@ -19,6 +19,7 @@
 
 #include <assert.h>
 #include <utils/Errors.h>
+#include <utils/FileMap.h>
 #include <utils/String8.h>
 
 namespace android {
@@ -27,7 +28,7 @@
  * A simple tokenizer for loading and parsing ASCII text files line by line.
  */
 class Tokenizer {
-    Tokenizer(const String8& filename, const char* buffer, size_t length);
+    Tokenizer(const String8& filename, FileMap* fileMap, const char* buffer, size_t length);
 
 public:
     ~Tokenizer();
@@ -108,6 +109,7 @@
     Tokenizer(const Tokenizer& other); // not copyable
 
     String8 mFilename;
+    FileMap* mFileMap;
     const char* mBuffer;
     size_t mLength;
 
diff --git a/libs/utils/Tokenizer.cpp b/libs/utils/Tokenizer.cpp
index 19dadf0..9251973 100644
--- a/libs/utils/Tokenizer.cpp
+++ b/libs/utils/Tokenizer.cpp
@@ -22,7 +22,6 @@
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/mman.h>
 #include <utils/Log.h>
 #include <utils/Tokenizer.h>
 
@@ -37,13 +36,16 @@
 }
 
 
-Tokenizer::Tokenizer(const String8& filename, const char* buffer, size_t length) :
-        mFilename(filename), mBuffer(buffer), mLength(length),
+Tokenizer::Tokenizer(const String8& filename, FileMap* fileMap,
+        const char* buffer, size_t length) :
+        mFilename(filename), mFileMap(fileMap), mBuffer(buffer), mLength(length),
         mCurrent(buffer), mLineNumber(1) {
 }
 
 Tokenizer::~Tokenizer() {
-    munmap((void*)mBuffer, mLength);
+    if (mFileMap) {
+        mFileMap->release();
+    }
 }
 
 status_t Tokenizer::open(const String8& filename, Tokenizer** outTokenizer) {
@@ -55,29 +57,29 @@
         result = -errno;
         LOGE("Error opening file '%s', %s.", filename.string(), strerror(errno));
     } else {
-        struct stat64 stat;
-        if (fstat64(fd, &stat)) {
+        struct stat stat;
+        if (fstat(fd, &stat)) {
             result = -errno;
             LOGE("Error getting size of file '%s', %s.", filename.string(), strerror(errno));
         } else {
             size_t length = size_t(stat.st_size);
-            void* buffer = mmap(NULL, length, PROT_READ, MAP_FILE | MAP_PRIVATE, fd, 0);
-            if (buffer == MAP_FAILED) {
-                result = -errno;
+            FileMap* fileMap = new FileMap();
+            if (!fileMap->create(NULL, fd, 0, length, true)) {
+                result = NO_MEMORY;
                 LOGE("Error mapping file '%s', %s.", filename.string(), strerror(errno));
             } else {
-                if (madvise(buffer, length, MADV_SEQUENTIAL)) {
-                    LOGW("Error calling madvise for mmapped file '%s', %s.", filename.string(),
-                            strerror(errno));
-                }
+                fileMap->advise(FileMap::SEQUENTIAL);
 
-                *outTokenizer = new Tokenizer(filename, static_cast<const char*>(buffer), length);
+                *outTokenizer = new Tokenizer(filename, fileMap,
+                        static_cast<const char*>(fileMap->getDataPtr()), length);
                 if (!*outTokenizer) {
                     result = NO_MEMORY;
                     LOGE("Error allocating tokenizer for file=%s.", filename.string());
-                    munmap(buffer, length);
                 }
             }
+            if (result) {
+                fileMap->release();
+            }
         }
         close(fd);
     }
