diff --git a/res/res_smdi.c b/res/res_smdi.c
index e2e5b17babfa04a4fbcf7ada9c61f687e41d9fd9..7f9af5cd56e34b996299ecfa141f3de24cb9a196 100644
--- a/res/res_smdi.c
+++ b/res/res_smdi.c
@@ -608,13 +608,12 @@ static void *smdi_read(void *iface_p)
 
 			ast_debug(1, "Read a 'D' ... it's an MD message.\n");
 
-			if (!(md_msg = ast_calloc(1, sizeof(*md_msg)))) {
+			md_msg = ao2_alloc(sizeof(*md_msg), NULL);
+			if (!md_msg) {
 				ao2_ref(iface, -1);
 				return NULL;
 			}
 
-			md_msg = ao2_alloc(sizeof(*md_msg), NULL);
-
 			/* read the message desk number */
 			for (i = 0; i < sizeof(md_msg->mesg_desk_num) - 1; i++) {
 				md_msg->mesg_desk_num[i] = fgetc(iface->file);
@@ -710,13 +709,12 @@ static void *smdi_read(void *iface_p)
 
 			ast_debug(1, "Read a 'W', it's an MWI message. (No more debug coming for MWI messages)\n");
 
-			if (!(mwi_msg = ast_calloc(1, sizeof(*mwi_msg)))) {
+			mwi_msg = ao2_alloc(sizeof(*mwi_msg), NULL);
+			if (!mwi_msg) {
 				ao2_ref(iface, -1);
 				return NULL;
 			}
 
-			mwi_msg = ao2_alloc(sizeof(*mwi_msg), NULL);
-
 			/* discard the 'I' (from 'MWI') */
 			fgetc(iface->file);