diff --git a/src/blocks.c b/src/blocks.c
old mode 100644
new mode 100755
index 9a8a9a6..f1e3a7a
--- a/src/blocks.c
+++ b/src/blocks.c
@@ -594,7 +594,7 @@
   bool maybe_lazy;
 
   if (parser->options & CMARK_OPT_VALIDATE_UTF8) {
-    utf8proc_check(parser->curline, buffer, bytes);
+    cmark_utf8proc_check(parser->curline, buffer, bytes);
   } else {
     cmark_strbuf_put(parser->curline, buffer, bytes);
   }
diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c
old mode 100644
new mode 100755
index 7bb1f50..a2d927b
--- a/src/houdini_html_u.c
+++ b/src/houdini_html_u.c
@@ -75,7 +75,7 @@
           codepoint >= 0x110000) {
         codepoint = 0xFFFD;
       }
-      utf8proc_encode_char(codepoint, ob);
+      cmark_utf8proc_encode_char(codepoint, ob);
       return i + 1;
     }
   }
diff --git a/src/inlines.c b/src/inlines.c
old mode 100644
new mode 100755
index ba78278..f8e2575
--- a/src/inlines.c
+++ b/src/inlines.c
@@ -283,7 +283,7 @@
     while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) {
       before_char_pos -= 1;
     }
-    len = utf8proc_iterate(subj->input.data + before_char_pos,
+    len = cmark_utf8proc_iterate(subj->input.data + before_char_pos,
                            subj->pos - before_char_pos, &before_char);
     if (len == -1) {
       before_char = 10;
@@ -300,24 +300,24 @@
     }
   }
 
-  len = utf8proc_iterate(subj->input.data + subj->pos,
+  len = cmark_utf8proc_iterate(subj->input.data + subj->pos,
                          subj->input.len - subj->pos, &after_char);
   if (len == -1) {
     after_char = 10;
   }
-  left_flanking = numdelims > 0 && !utf8proc_is_space(after_char) &&
-                  !(utf8proc_is_punctuation(after_char) &&
-                    !utf8proc_is_space(before_char) &&
-                    !utf8proc_is_punctuation(before_char));
+  left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
+                  !(cmark_utf8proc_is_punctuation(after_char) &&
+                    !cmark_utf8proc_is_space(before_char) &&
+                    !cmark_utf8proc_is_punctuation(before_char));
   right_flanking =
-      numdelims > 0 && !utf8proc_is_space(before_char) &&
-      !(utf8proc_is_punctuation(before_char) &&
-        !utf8proc_is_space(after_char) && !utf8proc_is_punctuation(after_char));
+      numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
+      !(cmark_utf8proc_is_punctuation(before_char) &&
+        !cmark_utf8proc_is_space(after_char) && !cmark_utf8proc_is_punctuation(after_char));
   if (c == '_') {
     *can_open = left_flanking &&
-                (!right_flanking || utf8proc_is_punctuation(before_char));
+                (!right_flanking || cmark_utf8proc_is_punctuation(before_char));
     *can_close = right_flanking &&
-                 (!left_flanking || utf8proc_is_punctuation(after_char));
+                 (!left_flanking || cmark_utf8proc_is_punctuation(after_char));
   } else if (c == '\'' || c == '"') {
     *can_open = left_flanking && !right_flanking;
     *can_close = right_flanking;
diff --git a/src/references.c b/src/references.c
old mode 100644
new mode 100755
index 980a948..6cb2b20
--- a/src/references.c
+++ b/src/references.c
@@ -37,7 +37,7 @@
   if (ref->len == 0)
     return NULL;
 
-  utf8proc_case_fold(&normalized, ref->data, ref->len);
+  cmark_utf8proc_case_fold(&normalized, ref->data, ref->len);
   cmark_strbuf_trim(&normalized);
   cmark_strbuf_normalize_whitespace(&normalized);
 
diff --git a/src/render.c b/src/render.c
old mode 100644
new mode 100755
index 4912615..f1ec672
--- a/src/render.c
+++ b/src/render.c
@@ -55,7 +55,7 @@
       renderer->column = renderer->prefix->size;
     }
 
-    len = utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
+    len = cmark_utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
     if (len == -1) { // error condition
       return;        // return without rendering rest of string
     }
@@ -118,7 +118,7 @@
 }
 
 void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) {
-  utf8proc_encode_char(c, renderer->buffer);
+  cmark_utf8proc_encode_char(c, renderer->buffer);
   renderer->column += 1;
 }
 
diff --git a/src/utf8.c b/src/utf8.c
old mode 100644
new mode 100755
index 21e751d..a742a75
--- a/src/utf8.c
+++ b/src/utf8.c
@@ -107,7 +107,7 @@
   return length;
 }
 
-void utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) {
+void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, bufsize_t size) {
   bufsize_t i = 0;
 
   while (i < size) {
@@ -146,7 +146,7 @@
   }
 }
 
-int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) {
+int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst) {
   int length;
   int32_t uc = -1;
 
@@ -184,7 +184,7 @@
   return length;
 }
 
-void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
+void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
   uint8_t dst[4];
   bufsize_t len = 0;
 
@@ -222,13 +222,13 @@
   cmark_strbuf_put(buf, dst, len);
 }
 
-void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) {
+void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len) {
   int32_t c;
 
-#define bufpush(x) utf8proc_encode_char(x, dest)
+#define bufpush(x) cmark_utf8proc_encode_char(x, dest)
 
   while (len > 0) {
-    bufsize_t char_len = utf8proc_iterate(str, len, &c);
+    bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c);
 
     if (char_len >= 0) {
 #include "case_fold_switch.inc"
@@ -243,14 +243,14 @@
 }
 
 // matches anything in the Zs class, plus LF, CR, TAB, FF.
-int utf8proc_is_space(int32_t uc) {
+int cmark_utf8proc_is_space(int32_t uc) {
   return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 ||
           uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 ||
           uc == 8287 || uc == 12288);
 }
 
 // matches anything in the P[cdefios] classes.
-int utf8proc_is_punctuation(int32_t uc) {
+int cmark_utf8proc_is_punctuation(int32_t uc) {
   return (
       (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 ||
       uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 ||
diff --git a/src/utf8.h b/src/utf8.h
old mode 100644
new mode 100755
index 9f1a4ec..43b3757
--- a/src/utf8.h
+++ b/src/utf8.h
@@ -8,12 +8,12 @@
 extern "C" {
 #endif
 
-void utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len);
-void utf8proc_encode_char(int32_t uc, cmark_strbuf *buf);
-int utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst);
-void utf8proc_check(cmark_strbuf *dest, const uint8_t *line, bufsize_t size);
-int utf8proc_is_space(int32_t uc);
-int utf8proc_is_punctuation(int32_t uc);
+void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, bufsize_t len);
+void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf);
+int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst);
+void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line, bufsize_t size);
+int cmark_utf8proc_is_space(int32_t uc);
+int cmark_utf8proc_is_punctuation(int32_t uc);
 
 #ifdef __cplusplus
 }
