diff --git a/datasources/GeoJson.js b/datasources/GeoJson.js
index <HASH>..<HASH> 100644
--- a/datasources/GeoJson.js
+++ b/datasources/GeoJson.js
@@ -86,6 +86,10 @@ GeoJsonSource.prototype = {
       }.bind(this));
     }
   },
+  
+  project: function(destinationProjection) {
+    this._project(destinationProjection);
+  },
 
   _project: function(mapProjection) {
     var doBounds = !this._projectedData[mapProjection];
diff --git a/lib/Map.js b/lib/Map.js
index <HASH>..<HASH> 100644
--- a/lib/Map.js
+++ b/lib/Map.js
@@ -141,6 +141,22 @@ Map.prototype = {
     }
   },
   
+  /**
+   * Triggers all the map's datasources to prepare themselves. Usually this
+   * connecting to a database, loading and processing a file, etc.
+   * Calling this method is completely optional, but allows you to speed up 
+   * rendering of the first tile.
+   */
+  prepare: function() {
+    var projection = this.projection;
+    
+    this.datasources.forEach(function(datasource) {
+      datasource.load && datasource.load(function(error) {
+        datasource.project && datasource.project(projection);
+      });
+    });
+  },
+  
   _processStyles: function() {
     this.processedStyles = this._renderer.processStyles(this.styles);
   }
Add ability to pre-emptively load and project data