diff --git a/lib/mbtiles.js b/lib/mbtiles.js
index <HASH>..<HASH> 100644
--- a/lib/mbtiles.js
+++ b/lib/mbtiles.js
@@ -448,7 +448,6 @@ MBTiles.prototype._commit = function(callback) {
                 break;
             }
         });
-
         mbtiles._db.run('COMMIT', function(err) {
             mbtiles._committing = false;
             mbtiles.emit('commit');
@@ -616,6 +615,16 @@ MBTiles.prototype.putGeocoderData = function(type, shard, data, callback) {
     });
 };
 
+// Implements carmen#getGeocoderData method.
+MBTiles.prototype.geocoderDataForEach = function(type, callback, completeCallback) {
+    return this._db.each('SELECT shard, data FROM geocoder_data WHERE type = ? ORDER BY shard', type, function(err, row) {
+        if (err && err.code === 'SQLITE_ERROR' && err.errno === 1) return callback();
+        if (err) return callback(err);
+        if (!row) return callback();
+        callback(row.shard, zlib.inflateSync(row.data));
+    }, completeCallback);
+};
+
 // Implements carmen#getIndexableDocs method.
 MBTiles.prototype.getIndexableDocs = function(pointer, callback) {
     pointer = pointer || {};
And infrastructure for iterating over geocoder data