diff --git a/src/pygit2/repository.c b/src/pygit2/repository.c
index 3f31805..14393fa 100644
--- a/src/pygit2/repository.c
+++ b/src/pygit2/repository.c
@@ -661,7 +661,7 @@ Repository_create_reference(Repository *self,  PyObject *args, PyObject* keywds)
     git_reference *c_reference;
     char *c_name, *c_target;
     git_oid oid;
-    int err, symbolic = 0, force = 0;
+    int err = 0, symbolic = 0, force = 0;
 
     static char *kwlist[] = {"name", "source", "force", "symbolic", NULL};
 
@@ -669,7 +669,14 @@ Repository_create_reference(Repository *self,  PyObject *args, PyObject* keywds)
                                      &c_name, &py_obj, &force, &symbolic))
         return NULL;
 
-    if(symbolic) {
+    if(!symbolic) {
+        err = py_str_to_git_oid_expand(self->repo, py_obj, &oid);
+        if (err < 0) {
+            return Error_set(err);
+        }
+
+        err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, force);
+    } else {
         #if PY_MAJOR_VERSION == 2
         c_target = PyString_AsString(py_obj);
         #else
@@ -680,12 +687,6 @@ Repository_create_reference(Repository *self,  PyObject *args, PyObject* keywds)
 
         err = git_reference_create_symbolic(&c_reference, self->repo, c_name,
                                             c_target, force);
-    } else {
-        err = py_str_to_git_oid_expand(self->repo, py_obj, &oid);
-        if (err < 0)
-            return Error_set(err);
-
-        err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, force);
     }
 
     if (err < 0)
diff --git a/test/test_refs.py b/test/test_refs.py
index 56e918b..5ba77e1 100644
--- a/test/test_refs.py
+++ b/test/test_refs.py
@@ -175,9 +175,11 @@ class ReferencesTest(utils.RepoTestCase):
         reference = self.repo.lookup_reference('refs/tags/version1')
         self.assertEqual(reference.hex, LAST_COMMIT)
 
-        self.assertRaises(GitError, self.repo.create_reference, 
+        # try to create existing reference 
+        self.assertRaises(ValueError, self.repo.create_reference, 
         'refs/tags/version1', LAST_COMMIT)
 
+        # try to create existing reference with force
         reference =  self.repo.create_reference('refs/tags/version1',
                         LAST_COMMIT, force=True)
         self.assertEqual(reference.hex, LAST_COMMIT)
@@ -191,9 +193,12 @@ class ReferencesTest(utils.RepoTestCase):
         self.assertEqual(reference.type, GIT_REF_SYMBOLIC)
         self.assertEqual(reference.target, 'refs/heads/master')
 
-        self.assertRaises(GitError, self.repo.create_reference, 
+
+        # try to create existing symbolic reference
+        self.assertRaises(ValueError, self.repo.create_reference, 
         'refs/tags/beta','refs/heads/master', symbolic=True)
 
+        # try to create existing symbolic reference with force
         reference =  self.repo.create_reference('refs/tags/beta',
                         'refs/heads/master', force=True, symbolic=True)
         self.assertEqual(reference.type, GIT_REF_SYMBOLIC)