diff --git a/src/application.js b/src/application.js
index de4cdfc..5fc24af 100644
--- a/src/application.js
+++ b/src/application.js
@@ -54,7 +54,12 @@ const Application = new Lang.Class({
         /* Translators: This is the program name. */
         GLib.set_application_name(_("Maps"));
 
-        this.parent({ application_id: 'org.gnome.Maps' });
+        this._uri = null;
+ 
+        this.parent({ application_id: 'org.gnome.Maps',
+                      flags: Gio.ApplicationFlags.HANDLES_COMMAND_LINE
+                    });
+
     },
 
     _onQuitActivate: function() {
@@ -69,6 +74,20 @@ const Application = new Lang.Class({
         this.set_app_menu(menu);
     },
 
+    vfunc_command_line: function(cmdline) {
+        let argv = cmdline.get_arguments();
+        let argc = argv.length;
+
+        let uriIndex = argv.indexOf('--uri');
+        if (uriIndex != -1 && uriIndex + 1 < argc) {
+            this._uri = argv[uriIndex + 1];
+        }
+
+        this.activate();
+        return 0;
+    },
+
+
     vfunc_startup: function() {
         this.parent();
         String.prototype.format = Format.format;
@@ -92,7 +111,7 @@ const Application = new Lang.Class({
         if (this._mainWindow)
             return;
 
-        this._mainWindow = new MainWindow.MainWindow(this);
+        this._mainWindow = new MainWindow.MainWindow(this, this._uri);
         this._mainWindow.window.connect('destroy', this._onWindowDestroy.bind(this));
     },
 
diff --git a/src/mainWindow.js b/src/mainWindow.js
index dffd00e..2405d65 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -25,12 +25,14 @@ const Gdk = imports.gi.Gdk;
 const GLib = imports.gi.GLib;
 const Gtk = imports.gi.Gtk;
 const Champlain = imports.gi.Champlain;
+const Geocode = imports.gi.GeocodeGlib;
 
 const Lang = imports.lang;
 const Mainloop = imports.mainloop;
 
 const Application = imports.application;
 const MapView = imports.mapView;
+const MapLocation = imports.mapLocation;
 const SearchPopup = imports.searchPopup;
 const ContextMenu = imports.contextMenu;
 const PlaceStore = imports.placeStore;
@@ -47,7 +49,7 @@ const _WINDOW_MIN_HEIGHT = 500;
 const MainWindow = new Lang.Class({
     Name: 'MainWindow',
 
-    _init: function(app) {
+    _init: function(app, uri) {
         this._configureId = 0;
         let ui = Utils.getUIObject('main-window', [ 'app-window',
                                                     'window-content',
@@ -61,9 +63,31 @@ const MainWindow = new Lang.Class({
 
         this.mapView = new MapView.MapView();
         ui.windowContent.add(this.mapView);
-
         this.mapView.gotoUserLocation(false);
 
+
+        if (uri) {
+            let location = Geocode.Location.new(0, 0, 0);
+            location.set_from_uri(uri);
+            let mapLocation = new MapLocation.MapLocation(Geocode.Place.new_with_location("Starting location", 
+                    Geocode.PlaceType.UNKNOWN, location), this.mapView);
+            mapLocation.goTo(false);
+
+            let reverse = Geocode.Reverse.new_for_location(location);
+
+            reverse.resolve_async (null, (function(reverse, res) {
+				try {
+                     let place = reverse.resolve_finish(res);
+                     this.mapView.showNGotoLocation(place);
+                 } catch (e) {
+                     log ("Error finding place at " +
+                         this._latitude + ", " +
+                         this._longitude + ": " +
+                         e.message);
+                 }
+            }).bind(this));
+        }
+
         this._contextMenu = new ContextMenu.ContextMenu(this.mapView);
 
         this._initPlaces();
