diff --git a/src/remote.c b/src/remote.c
index e1e745c..bcd66c2 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -71,6 +71,25 @@ Remote_name__get__(Remote *self)
     return PyUnicode_FromString(git_remote_name(self->remote));
 }
 
+int
+Remote_name__set__(Remote *self, PyObject* py_name)
+{
+    int err;
+    char* name;
+
+    name = py_str_to_c_str(py_name, NULL);
+    if (name != NULL) {
+        err = git_remote_rename(self->remote, name, NULL, NULL);
+
+        if (err == GIT_OK)
+          return 0;
+
+        Error_set(err);
+    }
+
+    return -1;
+}
+
 
 PyDoc_STRVAR(Remote_url__doc__, "Url of the remote refspec");
 
@@ -82,7 +101,7 @@ Remote_url__get__(Remote *self)
 
 
 PyGetSetDef Remote_getseters[] = {
-    GETTER(Remote, name),
+    GETSET(Remote, name),
     GETTER(Remote, url),
     {NULL}
 };
diff --git a/test/test_remote.py b/test/test_remote.py
index 60796ee..36f4eb5 100644
--- a/test/test_remote.py
+++ b/test/test_remote.py
@@ -48,6 +48,16 @@ class RepositoryTest(utils.RepoTestCase):
         self.assertRaises(ValueError,self.repo.remote_create, *(name, url))
 
 
+    def test_remote_rename(self):
+        remote = self.repo.remotes[0]
+
+        self.assertEqual(REMOTE_NAME, remote.name)
+        remote.name = 'new'
+        self.assertEqual('new', remote.name)
+
+        self.assertRaisesAssign(ValueError, remote, 'name', '')
+
+
     def test_remote_list(self):
         self.assertEqual(1, len(self.repo.remotes))
         remote = self.repo.remotes[0]