diff --git a/channels/chan_vpb.c b/channels/chan_vpb.c
index a73e9f323975bccf69d5a14eb9d60dc10c7ce0a9..c2841f6b6afeaa01dfc927a84a3bb2730815f6c3 100755
--- a/channels/chan_vpb.c
+++ b/channels/chan_vpb.c
@@ -322,19 +322,29 @@ static int vpb_indicate(struct ast_channel *ast, int condition);
 static int vpb_fixup(struct ast_channel *oldchan, struct ast_channel *newchan);
 
 static const struct ast_channel_tech vpb_tech = {
-	.type = type,
-	.description = tdesc,
-	.capabilities = AST_FORMAT_SLINEAR,
-	.requester = vpb_request,
-	.send_digit = vpb_digit,
-	.call = vpb_call,
-	.hangup = vpb_hangup,
-	.answer = vpb_answer,
-	.read = vpb_read,
-	.write = vpb_write,
-	.bridge = vpb_bridge,
-	.indicate = vpb_indicate,
-	.fixup = vpb_fixup,
+	type,
+	tdesc,
+	AST_FORMAT_SLINEAR,
+	vpb_request,
+	NULL,
+	vpb_digit,
+	vpb_call,
+	vpb_hangup,
+	vpb_answer,
+	vpb_read,
+	vpb_write,
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	vpb_bridge,
+	vpb_indicate,
+	vpb_fixup,
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	NULL
 };
 
 /* Can't get vpb_bridge() working on v4pci without either a horrible 
@@ -771,7 +781,7 @@ static inline int monitor_handle_owned(struct vpb_pvt *p, VPB_EVENT *e)
 	if (option_verbose > 3) 
 		ast_verbose(VERBOSE_PREFIX_4 "%s: handle_owned: got event: [%d=>%d]\n", p->dev, e->type, e->data);
 
-	f.src = type;
+	f.src = (char *)type;
 	switch (e->type) {
 		case VPB_RING:
 			if (p->mode == MODE_FXO) {
@@ -2032,7 +2042,7 @@ static struct ast_frame  *vpb_read(struct ast_channel *ast)
 	struct vpb_pvt *p = (struct vpb_pvt *)ast->tech_pvt; 
 	static struct ast_frame f = {AST_FRAME_NULL}; 
 
-	f.src = type;
+	f.src = (char *)type;
 	ast_log(LOG_NOTICE, "%s: vpb_read: should never be called!\n", p->dev);
 	ast_verbose("%s: vpb_read: should never be called!\n", p->dev);
 
@@ -2207,7 +2217,7 @@ static void *do_chanreads(void *pvt)
 	char * getdtmf_var = NULL;
 
 	fr->frametype = AST_FRAME_VOICE;
-	fr->src = type;
+	fr->src = (char *)type;
 	fr->mallocd = 0;
 	fr->delivery.tv_sec = 0;
 	fr->delivery.tv_usec = 0;