diff --git a/src/array.c b/src/array.c
index eaae9a7e4f669453038c7b4b05d8da5e634b6477..6ceea616bf1cfe285f3d6dc81b6b873358132a56 100644
--- a/src/array.c
+++ b/src/array.c
@@ -133,7 +133,7 @@ static void array_free_no_free(struct array *v)
 {
   DOUBLEUNLINK (first_array, v);
 
-  free((char *)v);
+  free(v);
 
   GC_FREE(v);
 }
@@ -1882,11 +1882,11 @@ PMOD_EXPORT struct array *merge_array_with_order(struct array *a,
 		    ordera, orderb );
 
   ret=array_zip(tmpa,tmpb,zipper);
-  UNSET_ONERROR(r3);  free((char *)zipper);
+  UNSET_ONERROR(r3);  free(zipper);
   UNSET_ONERROR(r2);  free_array(tmpb);
   UNSET_ONERROR(r1);  free_array(tmpa);
-  UNSET_ONERROR(r5);  free((char *)orderb);
-  UNSET_ONERROR(r4);  free((char *)ordera);
+  UNSET_ONERROR(r5);  free(orderb);
+  UNSET_ONERROR(r4);  free(ordera);
   return ret;
 }
 
@@ -1974,13 +1974,13 @@ PMOD_EXPORT struct array *merge_array_without_order2(struct array *a, struct arr
   if(arrb != ITEM(b))
   {
     UNSET_ONERROR(r4);
-    free((char *)arrb);
+    free(arrb);
   }
 
   if(arra != ITEM(a))
   {
     UNSET_ONERROR(r3);
-    free((char *)arra);
+    free(arra);
   }
 
   UNSET_ONERROR(r2);
@@ -2007,24 +2007,24 @@ PMOD_EXPORT struct array *merge_array_without_order(struct array *a,
   INT32 *zipper;
   struct array *tmpa,*tmpb,*ret;
 
-  if(ordera) { free((char *)ordera); ordera=0; }
-  if(orderb) { free((char *)orderb); orderb=0; }
+  if(ordera) { free(ordera); ordera=0; }
+  if(orderb) { free(orderb); orderb=0; }
 
   ordera=get_set_order(a);
   tmpa=reorder_and_copy_array(a,ordera);
-  free((char *)ordera);
+  free(ordera);
   ordera=0;
 
   orderb=get_set_order(b);
   tmpb=reorder_and_copy_array(b,orderb);
-  free((char *)orderb);
+  free(orderb);
   orderb=0;
 
   zipper=merge(tmpa,tmpb,op);
   ret=array_zip(tmpa,tmpb,zipper);
   free_array(tmpa);
   free_array(tmpb);
-  free((char *)zipper);
+  free(zipper);
   return ret;
 
 #else
diff --git a/src/backend.cmod b/src/backend.cmod
index a70bc368b8a2ef5646adcdf8c785bc35aa1af65f..587890f601dfce67b1d5b4ff0e842681e6fdb53d 100644
--- a/src/backend.cmod
+++ b/src/backend.cmod
@@ -757,7 +757,7 @@ PIKECLASS Backend
 	  if((new_hash=(struct hash_ent *)malloc(sizeof(struct hash_ent)*
 						 hashprimes[me->hash_order+1])))
 	  {
-	    free((char *)me->call_hash);
+	    free(me->call_hash);
 	    me->call_hash = new_hash;
 	    me->hash_size = hashprimes[++me->hash_order];
 	    MEMSET(me->call_hash, 0, sizeof(struct hash_ent)*me->hash_size);
@@ -2402,9 +2402,9 @@ PIKECLASS Backend
 	free_object(CALL(e)->this);
     }
     me->num_pending_calls=0;
-    if(me->call_heap) free((char*)me->call_heap);
+    if(me->call_heap) free(me->call_heap);
     me->call_heap = NULL;
-    if(me->call_hash) free((char*)me->call_hash);
+    if(me->call_hash) free(me->call_hash);
     me->call_hash=NULL;
 
 #ifdef DO_PIKE_CLEANUP
diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index b2752fa67fa216d2b804545017199a394f11c05d..2040b9ab1213047fd0b4c47ea48ca4b875d32d95 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -4064,7 +4064,7 @@ void free_replace_many_context(struct replace_many_context *ctx)
 	free_string(ctx->empty_repl);
       }
     }
-    free ((char *) ctx->v);
+    free (ctx->v);
     ctx->v = NULL;
   }
 }
@@ -5178,7 +5178,7 @@ PMOD_EXPORT void f_sort(INT32 args)
     order = stable_sort_array_destructively(a);
     for(e=1;e<args;e++) order_array(Pike_sp[e-args].u.array,order);
     pop_n_elems(args-1);
-    free((char *)order);
+    free(order);
   }
   else {
     /* If there are only simple types in the array we can use unstable
diff --git a/src/cpp.c b/src/cpp.c
index 0abbf55d68a8957098d03f749b2cbb83b0af3727..4adfaa0245d54c07ecb71e0c2bee908991406b73 100644
--- a/src/cpp.c
+++ b/src/cpp.c
@@ -1125,7 +1125,7 @@ static void undefine(struct cpp *this,
   free_string(d->link.s);
   if(d->first)
     free_string(d->first);
-  free((char *)d);
+  free(d);
 }
 
 /*! @directive #define
@@ -1994,7 +1994,7 @@ static void free_one_define(struct hash_entry *h)
     free_string(d->parts[e].postfix);
   if(d->first)
     free_string(d->first);
-  free((char *)d);
+  free(d);
 }
 
 static ptrdiff_t low_cpp(struct cpp *this, void *data, ptrdiff_t len,
@@ -2802,7 +2802,7 @@ void f__take_over_initial_predefines (INT32 args)
       free(tmp->name);
       free(tmp->value);
       first_predef=tmp->next;
-      free((char *)tmp);
+      free(tmp);
     }
     last_predef = 0;
   }
@@ -2886,10 +2886,10 @@ void exit_cpp(void)
     free(tmp->name);
     free(tmp->value);
     first_predef=tmp->next;
-    free((char *)tmp);
+    free(tmp);
   }
   free_string(defined_macro->link.s);
-  free((char *)defined_macro);
+  free(defined_macro);
 
   free_string (efun_str);
   free_string (constant_str);
diff --git a/src/docode.c b/src/docode.c
index cf5bd187bf0e40eb6f934aa30cc102d16ee35438..d5b938d38a95f9b73db58b430171fc4b3c9f2395 100644
--- a/src/docode.c
+++ b/src/docode.c
@@ -2139,7 +2139,7 @@ static int do_docode2(node *n, int flags)
     order_array(Pike_sp[-1].u.array,order);
 
     reorder((void *)(current_switch.jumptable+2),cases,sizeof(INT32)*2,order);
-    free((char *)order);
+    free(order);
 
     current_switch.jumptable[1] = current_switch.less_label;
     current_switch.jumptable[current_switch.index - 1] = current_switch.greater_label;
@@ -2158,8 +2158,8 @@ static int do_docode2(node *n, int flags)
 	       store_constant(Pike_sp-1,1,0));
 
     pop_stack();
-    free((char *)jumptable);
-    free((char *)current_switch.jumptable);
+    free(jumptable);
+    free(current_switch.jumptable);
 
     current_switch = prev_switch;
 
diff --git a/src/dynamic_load.c b/src/dynamic_load.c
index 72f88fd67c4f41a00ce75dd3217ea942749dff2e..1c4007c8979bcfc40a825b64adee0fccd67d5114 100644
--- a/src/dynamic_load.c
+++ b/src/dynamic_load.c
@@ -140,7 +140,7 @@ static void *dlopen(const char *foo, int how)
   HINSTANCE ret;
   tmp=convert_string(foo, strlen(foo));
   ret=LoadLibrary(tmp);
-  free((char *)tmp);
+  free(tmp);
   return (void *)ret;
 }
 
@@ -704,7 +704,7 @@ void free_dynamic_load(void)
     if (tmp->module_prog)
       Pike_fatal ("There's still a program for a dynamic module.\n");
 #endif
-    free((char *)tmp);
+    free(tmp);
   }
 #endif
 }
diff --git a/src/encode.c b/src/encode.c
index ddcb86aae917259cfb1d6a88b0fdabb46db8dff0..f3e962c19dde5b8c862874ea4559973ca5cd1b1b 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -830,7 +830,7 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc
 	order = get_switch_order(Pike_sp[-2].u.array);
 	order_array(Pike_sp[-2].u.array, order);
 	order_array(Pike_sp[-1].u.array, order);
-	free((char *) order);
+	free(order);
       }
 
       code_entry(TAG_MAPPING, Pike_sp[-2].u.array->size,data);
@@ -868,7 +868,7 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc
 	  push_array(multiset_indices(l));
 	  order = get_switch_order(Pike_sp[-1].u.array);
 	  order_array(Pike_sp[-1].u.array, order);
-	  free((char *) order);
+	  free(order);
 	  for (i = 0; i < Pike_sp[-1].u.array->size; i++)
 	    encode_value2(ITEM(Pike_sp[-1].u.array)+i, data, 0);
 	  pop_stack();
@@ -3808,7 +3808,7 @@ static void decode_value2(struct decode_data *data)
 #endif /* PIKE_DEBUG */
 		    
 		    *ptr = l->next;
-		    free((char *)l);
+		    free(l);
 		  }else{
 		    ptr=&l->next;
 		  }
@@ -3852,7 +3852,7 @@ static void decode_value2(struct decode_data *data)
 		  *(Pike_sp++) = l->decode_arg;
 
 		  *ptr = l->next;
-		  free((char *)l);
+		  free(l);
 
 		  /* Let the codec do it's job... */
 		  apply_low(decoder_codec (data), decode_fun, 2);
@@ -5016,7 +5016,7 @@ static void free_decode_data (struct decode_data *data, int delay,
   {
     struct unfinished_prog_link *tmp=data->unfinished_programs;
     data->unfinished_programs=tmp->next;
-    free((char *)tmp);
+    free(tmp);
   }
 
   while(data->unfinished_objects)
@@ -5025,7 +5025,7 @@ static void free_decode_data (struct decode_data *data, int delay,
     data->unfinished_objects=tmp->next;
     free_svalue(&tmp->decode_arg);
     free_object(tmp->o);
-    free((char *)tmp);
+    free(tmp);
   }
 
   while(data->unfinished_placeholders)
@@ -5033,7 +5033,7 @@ static void free_decode_data (struct decode_data *data, int delay,
     struct unfinished_obj_link *tmp=data->unfinished_placeholders;
     data->unfinished_placeholders=tmp->next;
     free_object(tmp->o);
-    free((char *)tmp);
+    free(tmp);
   }
 
 #ifdef PIKE_THREADS
diff --git a/src/fdlib.c b/src/fdlib.c
index 7d1399226e68c66e9ee7112ea006e62b523191b2..6fc61247b2a7dffaa207a72dc9f0944f9fc0d463 100644
--- a/src/fdlib.c
+++ b/src/fdlib.c
@@ -1579,7 +1579,7 @@ PMOD_EXPORT DIR *opendir(char *dir)
   if(ret->h == DO_NOT_WARN(INVALID_HANDLE_VALUE))
   {
     errno=ENOENT;
-    free((char *)ret);
+    free(ret);
     return 0;
   }
   ret->first=1;
@@ -1607,7 +1607,7 @@ PMOD_EXPORT int readdir_r(DIR *dir, struct direct *tmp ,struct direct **d)
 PMOD_EXPORT void closedir(DIR *dir)
 {
   FindClose(dir->h);
-  free((char *)dir);
+  free(dir);
 }
 #endif
 
@@ -1628,7 +1628,7 @@ void init_fd_mapper(struct fd_mapper *x)
 
 void exit_fd_mapper(struct fd_mapper *x)
 {
-  free((char *)x->data);
+  free(x->data);
 }
 
 void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
@@ -1673,7 +1673,7 @@ void init_fd_mapper(struct fd_mapper *x)
 
 void exit_fd_mapper(struct fd_mapper *x)
 {
-  free((char *)x->data);
+  free(x->data);
 }
 
 void fd_mapper_set(struct fd_mapper *x, FD fd, void *data)
@@ -1790,7 +1790,7 @@ void store_fd_data(FD fd, int key, void *data)
       free_blocks=old_htable[h];
     }
     if(old_htable)
-      free((char *)old_htable);
+      free(old_htable);
   }
 
 
diff --git a/src/hashtable.c b/src/hashtable.c
index e29cd366915f3d721adc12967238858066caa8d3..56b100f91e22952a25eaf1c9fed0a30cab1435dc 100644
--- a/src/hashtable.c
+++ b/src/hashtable.c
@@ -94,7 +94,7 @@ struct hash_table *hash_rehash(struct hash_table *h,int size)
   for(e=0; e<=h->mask; e++)
     rehash_list_backwards(new,h->htable[e]);
 
-  free((char *)h);
+  free(h);
   return new;
 }
 
@@ -173,8 +173,8 @@ void free_hashtable(struct hash_table *h,
       if(free_entry)
 	free_entry(i);
       else
-	free((char *)i);
+	free(i);
     }
   }
-  free((char *)h);
+  free(h);
 }
diff --git a/src/interpret.c b/src/interpret.c
index 536cef1ff523c3a3cb15bd5a395aae7194abe8aa..6afa53b85497027ec2783aa314c2583b9652f69a 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -2056,7 +2056,7 @@ void really_free_pike_scope(struct pike_frame *scope)
   if(scope->flags & PIKE_FRAME_MALLOCED_LOCALS)
   {
     free_mixed_svalues(scope->locals,scope->num_locals);
-    free((char *)(scope->locals));
+    free(scope->locals);
 #ifdef PIKE_DEBUG
     scope->flags&=~PIKE_FRAME_MALLOCED_LOCALS;
 #endif
@@ -3539,9 +3539,9 @@ PMOD_EXPORT void low_cleanup_interpret(struct Pike_interpreter_struct *interpret
 #endif
 
   if(interpreter->evaluator_stack)
-    free((char *)interpreter->evaluator_stack);
+    free(interpreter->evaluator_stack);
   if(interpreter->mark_stack)
-    free((char *)interpreter->mark_stack);
+    free(interpreter->mark_stack);
 
   interpreter->mark_stack = 0;
   interpreter->evaluator_stack = 0;
diff --git a/src/mapping.c b/src/mapping.c
index 321dabaa11d9af095941e4ad2f80dbca559f9200..c634dac99c7d5768f4f83183f95256c9c12e8758 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -294,7 +294,7 @@ PMOD_EXPORT void really_free_mapping_data(struct mapping_data *md)
     free_svalue(& k->ind);
   }
 
-  free((char *) md);
+  free(md);
   GC_FREE_BLOCK(md);
 }
 
@@ -551,7 +551,7 @@ static struct mapping *rehash(struct mapping *m, int new_size)
     for(e=0;e<md->hashsize;e++)
       mapping_rehash_backwards_evil(new_md, md->hash[e]);
 
-    free((char *)md);
+    free(md);
     GC_FREE_BLOCK(md);
   }
 
@@ -1771,7 +1771,7 @@ PMOD_EXPORT struct mapping *merge_mappings(struct mapping *a, struct mapping *b,
     zipper=get_set_order(ai);
     order_array(ai, zipper);
     order_array(av, zipper);
-    free((char *)zipper);
+    free(zipper);
   }
 
   bi=mapping_indices(b);
@@ -1785,7 +1785,7 @@ PMOD_EXPORT struct mapping *merge_mappings(struct mapping *a, struct mapping *b,
     zipper=get_set_order(bi);
     order_array(bi, zipper);
     order_array(bv, zipper);
-    free((char *)zipper);
+    free(zipper);
   }
 
   zipper=merge(ai,bi,op);
@@ -1800,7 +1800,7 @@ PMOD_EXPORT struct mapping *merge_mappings(struct mapping *a, struct mapping *b,
   UNSET_ONERROR(r2); free_array(bv);
   UNSET_ONERROR(r1); free_array(av);
 
-  free((char *)zipper);
+  free(zipper);
 
   m=mkmapping(ci, cv);
   free_array(ci);
@@ -1831,7 +1831,7 @@ PMOD_EXPORT struct mapping *merge_mapping_array_ordered(struct mapping *a,
     zipper=get_set_order(ai);
     order_array(ai, zipper);
     order_array(av, zipper);
-    free((char *)zipper);
+    free(zipper);
   }
 
   switch (op) /* no elements from �b� may be selected */
@@ -1853,7 +1853,7 @@ PMOD_EXPORT struct mapping *merge_mapping_array_ordered(struct mapping *a,
   UNSET_ONERROR(r2); free_array(av);
   UNSET_ONERROR(r1); free_array(ai);
   
-  free((char *)zipper);
+  free(zipper);
 
   m=mkmapping(ci, cv);
   free_array(ci);
diff --git a/src/modules/Image/encodings/ras.c b/src/modules/Image/encodings/ras.c
index ed4f7ca52a64f5e81ac84bc47518d15b2f4893cf..a7ed3d4e1b2bd1758274d0b30fff914ba59bfd9e 100644
--- a/src/modules/Image/encodings/ras.c
+++ b/src/modules/Image/encodings/ras.c
@@ -262,7 +262,7 @@ void img_ras_decode(INT32 args)
 	  if(len<3) {
 	    /* Better to proceed and make a partly black image? */
 	    if(tmpdata != NULL)
-	      free((char *)tmpdata);
+	      free(tmpdata);
 	    if(ctab != NULL)
 	      free_object(ctab);
 	    free_object(o);
@@ -284,7 +284,7 @@ void img_ras_decode(INT32 args)
 	  if(len<1) {
 	    /* Better to proceed and make a partly black image? */
 	    if(tmpdata != NULL)
-	      free((char *)tmpdata);
+	      free(tmpdata);
 	    if(ctab != NULL)
 	      free_object(ctab);
 	    free_object(o);
@@ -311,7 +311,7 @@ void img_ras_decode(INT32 args)
 	      if(len<2) {
 		/* Better to proceed and make a partly black image? */
 		if(tmpdata != NULL)
-		  free((char *)tmpdata);
+		  free(tmpdata);
 		if(ctab != NULL)
 		  free_object(ctab);
 		free_object(o);
@@ -345,7 +345,7 @@ void img_ras_decode(INT32 args)
      }
 
    if(tmpdata != NULL)
-     free((char *)tmpdata);
+     free(tmpdata);
    if(ctab != NULL)
      free_object(ctab);
    pop_n_elems(args);
@@ -486,7 +486,7 @@ static void img_ras_encode(INT32 args)
       STR0(cts)[i+n] = tmp[i*3+1];
       STR0(cts)[i+2*n] = tmp[i*3+2];
     }
-    free((char *)tmp);
+    free(tmp);
     push_string(end_shared_string(cts));
     image_colortable_initiate_dither(ct, &dith, img->xsize);
     ctfunc = image_colortable_index_8bit_function(ct);
diff --git a/src/modules/Pipe/pipe.c b/src/modules/Pipe/pipe.c
index ce16909940beb4214534c03873b225d81913da83..85c3e062b7daa0ccee42ce43ff6b18892f6c1752 100644
--- a/src/modules/Pipe/pipe.c
+++ b/src/modules/Pipe/pipe.c
@@ -277,7 +277,7 @@ static INLINE void free_input(struct input *i)
 
   case I_NONE: break;
   }
-  free((char *)i);
+  free(i);
 }
 
 /* do the done_callback, then close and free everything */
@@ -528,7 +528,7 @@ static INLINE struct pike_string* gimme_some_data(size_t pos)
       sbuffers-=b->s->len;
       nbuffers--;
       free_string(b->s);
-      free((char *)b);
+      free(b);
 
       /* Wake up first input if it was sleeping and we
        * have room for more in the buffer.
@@ -922,7 +922,7 @@ static void pipe_output(INT32 args)
 	sbuffers-=b->s->len;
 	nbuffers--;
 	free_string(b->s);
-	free((char *)b);
+	free(b);
       }
       THIS->lastbuffer=NULL;
 
@@ -1214,7 +1214,7 @@ void close_and_free_everything(struct object *thisobj,struct pipe *p)
       nbuffers--;
       free_string(b->s);
       b->next=NULL;
-      free((char *)b); /* Hubbe */
+      free(b); /* Hubbe */
    }
    p->lastbuffer=NULL;
 
diff --git a/src/modules/Regexp/pike_regexp.c b/src/modules/Regexp/pike_regexp.c
index 5e82be2db8c1ed2c84349d150b98614dc6267d43..389a61b7f2b672bba0441e40bbb04d822095a09e 100644
--- a/src/modules/Regexp/pike_regexp.c
+++ b/src/modules/Regexp/pike_regexp.c
@@ -361,7 +361,7 @@ regexp *pike_regcomp(char *exp,int excompat)
 	    r->regmlen = len;
 	}
     }
-    free((char*)exp2);
+    free(exp2);
     return (r);
 }
 
diff --git a/src/modules/_Stdio/file.c b/src/modules/_Stdio/file.c
index ea15eaecea6956ba8b01e7970f671116c4c337be..09a7af9927e2a9aa3c8a8667cc78bc98adc7ecfe 100644
--- a/src/modules/_Stdio/file.c
+++ b/src/modules/_Stdio/file.c
@@ -5299,7 +5299,7 @@ static TH_RETURN_TYPE proxy_thread(void * data)
   low_mt_lock_interpreter();	/* Can run even if threads_disabled. */
   num_threads--;
   mt_unlock_interpreter();
-  free((char *)p);
+  free(p);
   th_exit(0);
   return 0;
 }
@@ -5346,7 +5346,7 @@ void file_proxy(INT32 args)
   num_threads++;
   if(th_create_small(&id,proxy_thread,p))
   {
-    free((char *)p);
+    free(p);
     while (fd_close(from) && errno == EINTR) {}
     while (fd_close(to) && errno == EINTR) {}
     Pike_error("Failed to create thread.\n");
diff --git a/src/modules/system/nt.c b/src/modules/system/nt.c
index 69b1d6acd145dff70a2c77629518180c9dd66bd3..87ba4efaa54b3e6c5fed1b1cdce0e2ebb04c8a7b 100644
--- a/src/modules/system/nt.c
+++ b/src/modules/system/nt.c
@@ -771,7 +771,7 @@ static void exit_sid(struct object *o)
 {
   if(THIS_PSID)
   {
-    free((char *)THIS_PSID);
+    free(THIS_PSID);
     THIS_PSID=0;
   }
 }
@@ -837,8 +837,8 @@ static void f_sid_account(INT32 args)
       f_aggregate(3);
       return;
     }
-    free((char *)dom);
-    free((char *)name);
+    free(dom);
+    free(name);
   }
   errno=GetLastError();
   pop_n_elems(args);
@@ -3000,8 +3000,8 @@ static void f_LookupAccountName(INT32 args)
       f_aggregate(3);
       return;
     }
-    free((char *)dom);
-    free((char *)sid);
+    free(dom);
+    free(sid);
   }
   errno=GetLastError();
   pop_n_elems(args);
diff --git a/src/peep.c b/src/peep.c
index 1e574e8f6c06f84fdd123868d9cf903994b912b2..1fcdfdaf100a51978f869109a5227668b036ec44 100644
--- a/src/peep.c
+++ b/src/peep.c
@@ -766,7 +766,7 @@ INT32 assemble(int store_linenumbers)
     }
   }
 
-  free((char *)labels);
+  free(labels);
 
 #ifdef END_FUNCTION
   END_FUNCTION(store_linenumbers);
@@ -1112,7 +1112,7 @@ static int asm_opt(void)
     relabel |= low_asm_opt();
   }
 
-  free((char *)instructions);
+  free(instructions);
 
 #ifdef PIKE_DEBUG
   if(a_flag > 4)
diff --git a/src/queue.c b/src/queue.c
index 59e7bf5fe17adf389618ac5865bd84c85f218056..aaaed9d666228fc867622d5cc79907195e6f963c 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -48,7 +48,7 @@ void run_queue(struct pike_queue *q)
     }
 
     q->first=b->next;
-    free((char *)b);
+    free(b);
   }
   q->last=0;
 }
@@ -59,7 +59,7 @@ void discard_queue(struct pike_queue *q)
   while (b)
   {
     struct queue_block *next = b->next;
-    free((char *) b);
+    free(b);
     b = next;
   }
   q->first = q->last = 0;
@@ -113,7 +113,7 @@ void run_lifo_queue(struct pike_queue *q)
     }
     else {
       q->first=b->next;
-      free((char *)b);
+      free(b);
     }
   }
 }
@@ -160,7 +160,7 @@ void *dequeue_lifo(struct pike_queue *q, queue_call call)
     }
     else {
       q->first=b->next;
-      free((char *)b);
+      free(b);
     }
   }
 
diff --git a/src/sscanf.c b/src/sscanf.c
index 0ef731086940a863c44508db0924b53d443be453..fc447a10aeb1c308cfa2f602c64169f22d5a41e6 100644
--- a/src/sscanf.c
+++ b/src/sscanf.c
@@ -386,13 +386,13 @@ MATCH_IS_WIDE(							\
          order[e+1]+1 != order[e]) {				\
         free_array(set->a);					\
         set->a=0;						\
-        free((char *)order);					\
+        free(order);                                            \
 	Pike_error("Overlapping ranges in sscanf not supported.\n"); \
       }								\
     }								\
 								\
     order_array(set->a,order);					\
-    free((char *)order);					\
+    free(order);                                                \
   }								\
 )								\
   return cnt;							\
diff --git a/src/stralloc.c b/src/stralloc.c
index 7daf3b7db75de1f7fbed20b6fdca9b9b1cfbd0b3..184f4518fbd258390c57617265d19282069d1875 100644
--- a/src/stralloc.c
+++ b/src/stralloc.c
@@ -622,7 +622,7 @@ static void stralloc_rehash(void)
     rehash_string_backwards(old_base[h]);
 
   if(old_base)
-    free((char *)old_base);
+    free(old_base);
 
 #ifdef PIKE_RUN_UNLOCKED
   for(h=0;h<BUCKET_LOCKS;h++) mt_unlock(bucket_locks + h);
@@ -653,7 +653,7 @@ static struct block_allocator string_allocator = BA_INIT(sizeof(struct short_pik
     if (s->flags & STRING_IS_SHORT) { \
       ba_free(&string_allocator, s);  \
     } else { \
-      debug_free((char *)s, DMALLOC_LOCATION(), 1); \
+      debug_free(s, DMALLOC_LOCATION(), 1); \
     } \
   } while(0)
 
@@ -2293,7 +2293,7 @@ void cleanup_shared_string_table(void)
     base_table[e]=0;
     UNLOCK_BUCKET(e);
   }
-  free((char *)base_table);
+  free(base_table);
   base_table=0;
   num_strings=0;