diff --git a/src/remote.c b/src/remote.c
index bcd66c2..f8edbc7 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -100,9 +100,29 @@ Remote_url__get__(Remote *self)
 }
 
 
+int
+Remote_url__set__(Remote *self, PyObject* py_url)
+{
+    int err;
+    char* url;
+
+    url = py_str_to_c_str(py_url, NULL);
+    if (url != NULL) {
+        err = git_remote_set_url(self->remote, url);
+
+        if (err == GIT_OK)
+          return 0;
+
+        Error_set(err);
+    }
+
+    return -1;
+}
+
+
 PyGetSetDef Remote_getseters[] = {
     GETSET(Remote, name),
-    GETTER(Remote, url),
+    GETSET(Remote, url),
     {NULL}
 };
 
diff --git a/test/test_remote.py b/test/test_remote.py
index 36f4eb5..2ca347f 100644
--- a/test/test_remote.py
+++ b/test/test_remote.py
@@ -58,6 +58,17 @@ class RepositoryTest(utils.RepoTestCase):
         self.assertRaisesAssign(ValueError, remote, 'name', '')
 
 
+    def test_remote_set_url(self):
+        remote = self.repo.remotes[0]
+
+        self.assertEqual(REMOTE_URL, remote.url)
+        new_url = 'git://github.com/cholin/pygit2.git'
+        remote.url = new_url
+        self.assertEqual(new_url, remote.url)
+
+        self.assertRaisesAssign(ValueError, remote, 'url', '')
+
+
     def test_remote_list(self):
         self.assertEqual(1, len(self.repo.remotes))
         remote = self.repo.remotes[0]