diff --git a/include/pygit2/config.h b/include/pygit2/config.h
index 3ae9d4b..bf3e598 100644
--- a/include/pygit2/config.h
+++ b/include/pygit2/config.h
@@ -10,6 +10,8 @@ PyObject* Config_get_system_config(void);
 PyObject* Config_add_file(Config *self, PyObject *args);
 PyObject* Config_getitem(Config *self, PyObject *key);
 PyObject* Config_foreach(Config *self, PyObject *args);
+PyObject* Config_get_multivar(Config *self, PyObject *args);
+PyObject* Config_set_multivar(Config *self, PyObject *args);
 int Config_setitem(Config *self, PyObject *key, PyObject *value);
 
 #endif
diff --git a/src/pygit2/config.c b/src/pygit2/config.c
index ab18962..6183b50 100644
--- a/src/pygit2/config.c
+++ b/src/pygit2/config.c
@@ -255,6 +255,64 @@ Config_add_file(Config *self, PyObject *args)
     Py_RETURN_NONE;
 }
 
+int
+Config_get_multivar_fn_wrapper(const char *value, void *data)
+{
+    PyObject *list = (PyObject *)data;
+    PyObject *item = NULL;
+
+    if (!(item = PyUnicode_FromString(value)))
+        return -2;
+
+    PyList_Append(list, item);
+
+    return 0;
+}
+
+PyObject *
+Config_get_multivar(Config *self, PyObject *args)
+{
+    int err;
+    PyObject *list = PyList_New(0);
+    const char *name = NULL;
+    const char *regex = NULL;
+
+    if (!PyArg_ParseTuple(args, "s|s", &name, &regex))
+        return NULL;
+
+    if ((err = git_config_get_multivar(self->config, name, regex,
+            Config_get_multivar_fn_wrapper, (void *)list)) < 0) {
+        if (err == GIT_ENOTFOUND)
+            Error_set(err);
+        else
+            PyErr_SetNone(PyExc_TypeError);
+        return NULL;
+    }
+
+    return list;
+}
+
+PyObject *
+Config_set_multivar(Config *self, PyObject *args)
+{
+    int err;
+    const char *name;
+    const char *regex;
+    const char *value;
+
+    if (!PyArg_ParseTuple(args, "sss", &name, &regex, &value))
+        return NULL;
+    if ((err = git_config_set_multivar(self->config, name, regex, value)) < 0) {
+        if (err == GIT_ENOTFOUND)
+            Error_set(err);
+        else
+            PyErr_SetNone(PyExc_TypeError);
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
 PyMethodDef Config_methods[] = {
     {"get_system_config", (PyCFunction)Config_get_system_config,
      METH_NOARGS | METH_STATIC,
@@ -270,6 +328,13 @@ PyMethodDef Config_methods[] = {
      "an integer other than 0, this function returns that value."},
     {"add_file", (PyCFunction)Config_add_file, METH_VARARGS,
      "Add a config file instance to an existing config."},
+    {"get_multivar", (PyCFunction)Config_get_multivar, METH_VARARGS,
+     "Get each value of a multivar ''name'' as a list. The optional ''regex'' "
+     "parameter is expected to be a regular expression to filter the which "
+     "variables we're interested in."},
+    {"set_multivar", (PyCFunction)Config_set_multivar, METH_VARARGS,
+     "Set a multivar ''name'' to ''value''. ''regexp'' is a regular expression "
+     "to indicate which values to replace"},
     {NULL}
 };
 
diff --git a/test/test_config.py b/test/test_config.py
index 328217e..c2ab641 100644
--- a/test/test_config.py
+++ b/test/test_config.py
@@ -111,6 +111,13 @@ class ConfigTest(utils.RepoTestCase):
         new_file.write("[this]\n\tthat = foobar\n\tthat = foobeer\n")
         new_file.close()
 
+        config.add_file(config_filename, 0)
+        self.assertTrue('this.that' in config)
+        self.assertEqual(len(config.get_multivar('this.that')), 2)
+        l = config.get_multivar('this.that', 'bar')
+        self.assertEqual(len(l),1)
+        self.assertEqual(l[0], 'foobar')
+
     def test_write(self):
         config = self.repo.config
 
@@ -139,6 +146,21 @@ class ConfigTest(utils.RepoTestCase):
         del config['core.dummy3']
         self.assertFalse('core.dummy3' in config)
 
+        new_file = open(config_filename, "w")
+        new_file.write("[this]\n\tthat = foobar\n\tthat = foobeer\n")
+        new_file.close()
+
+        config.add_file(config_filename, 0)
+        self.assertTrue('this.that' in config)
+        config.set_multivar('this.that', '^.*beer', 'fool')
+        l = config.get_multivar('this.that', 'fool')
+        self.assertEqual(len(l),1)
+        self.assertEqual(l[0], 'fool')
+        config.set_multivar('this.that', 'foo.*', '123456')
+        l = config.get_multivar('this.that', 'foo.*')
+        for i in l:
+            self.assertEqual(i, '123456')
+
     def test_foreach(self):
         config = self.repo.config
         lst = {}