diff --git a/src/feature.h b/src/feature.h
index 404461c..9615a9f 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -505,7 +505,7 @@
  * +textprop		Text properties
  */
 #if defined(FEAT_EVAL) && defined(FEAT_SYN_HL)
-// # define FEAT_TEXT_PROP
+# define FEAT_TEXT_PROP
 #endif
 
 /*
diff --git a/src/textprop.c b/src/textprop.c
index fa28e80..85d3247 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -151,7 +151,7 @@
     size_t	textlen;
     char_u	*props;
     char_u	*newprops;
-    static textprop_T	tmp_prop; // static to get it aligned.
+    textprop_T	tmp_prop;
     int		i;
 
     lnum = get_tv_number(&argvars[0]);
@@ -212,8 +212,9 @@
 
     // Fetch the line to get the ml_line_len field updated.
     proplen = get_text_props(buf, lnum, &props, TRUE);
+    textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
 
-    if (col >= (colnr_T)STRLEN(buf->b_ml.ml_line_ptr))
+    if (col >= (colnr_T)textlen - 1)
     {
 	EMSGN(_(e_invalid_col), (long)col);
 	return;
@@ -224,7 +225,6 @@
     if (newtext == NULL)
 	return;
     // Copy the text, including terminating NUL.
-    textlen = buf->b_ml.ml_line_len - proplen * sizeof(textprop_T);
     mch_memmove(newtext, buf->b_ml.ml_line_ptr, textlen);
 
     // Find the index where to insert the new property.
@@ -232,8 +232,8 @@
     // text, we need to copy them as bytes before using it as a struct.
     for (i = 0; i < proplen; ++i)
     {
-	mch_memmove(&tmp_prop, props + i * sizeof(proptype_T),
-							   sizeof(proptype_T));
+	mch_memmove(&tmp_prop, props + i * sizeof(textprop_T),
+							   sizeof(textprop_T));
 	if (tmp_prop.tp_col >= col)
 	    break;
     }
@@ -274,7 +274,7 @@
 }
 
 /*
- * Fetch the text properties for line "lnum" in buffer 'buf".
+ * Fetch the text properties for line "lnum" in buffer "buf".
  * Returns the number of text properties and, when non-zero, a pointer to the
  * first one in "props" (note that it is not aligned, therefore the char_u
  * pointer).
@@ -617,11 +617,13 @@
 	{
 	    *htp = (hashtab_T *)alloc(sizeof(hashtab_T));
 	    if (*htp == NULL)
+	    {
+		vim_free(prop);
 		return;
+	    }
 	    hash_init(*htp);
 	}
-	hash_add(buf == NULL ? global_proptypes : buf->b_proptypes,
-							       PT2HIKEY(prop));
+	hash_add(*htp, PT2HIKEY(prop));
     }
     else
     {
@@ -640,7 +642,7 @@
 	    char_u	*highlight;
 	    int		hl_id = 0;
 
-	    highlight = get_dict_string(dict, (char_u *)"highlight", TRUE);
+	    highlight = get_dict_string(dict, (char_u *)"highlight", FALSE);
 	    if (highlight != NULL && *highlight != NUL)
 		hl_id = syn_name2id(highlight);
 	    if (hl_id <= 0)
@@ -721,12 +723,14 @@
     if (hi != NULL)
     {
 	hashtab_T	*ht;
+	proptype_T	*prop = HI2PT(hi);
 
 	if (buf == NULL)
 	    ht = global_proptypes;
 	else
 	    ht = buf->b_proptypes;
 	hash_remove(ht, hi);
+	vim_free(prop);
     }
 }
 
@@ -846,7 +850,7 @@
 
 #if defined(EXITFREE) || defined(PROTO)
 /*
- * Free all property types for "buf".
+ * Free all global property types.
  */
     void
 clear_global_prop_types(void)
diff --git a/src/version.c b/src/version.c
index 9a44976..a0ffd4e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    582,
+/**/
     581,
 /**/
     580,
