diff --git a/gm/ugm.cc b/gm/ugm.cc
index 3da96bb96b2a85e27200f02b6ac582eaa8645c7e..a7a6f2a7c00c59cef1db17ecc37c37d02a77e44c 100644
--- a/gm/ugm.cc
+++ b/gm/ugm.cc
@@ -42,6 +42,7 @@
 #include <cmath>
 #include <cassert>
 #include <errno.h>
+#include <vector>
 
 #include "ugtypes.h"
 #include "architecture.h"
@@ -6662,9 +6663,7 @@ INT NS_DIM_PREFIX MultiGridStatus (const MULTIGRID *theMG, INT gridflag, INT gre
     /* now collect lb info on master */
     if (me == master)
     {
-      VChannelPtr     *mych;
-
-      mych = (VChannelPtr*)malloc(procs*sizeof(VChannelPtr));
+      std::vector<VChannelPtr> mych(procs, nullptr);
 
       for (i=1; i<procs; i++)
       {
@@ -6676,7 +6675,6 @@ INT NS_DIM_PREFIX MultiGridStatus (const MULTIGRID *theMG, INT gridflag, INT gre
       {
         DiscSync(mych[i]);
       }
-      free(mych);
     }
     else
     {
@@ -9212,21 +9210,13 @@ static void CommTpls (GRID *g, INT nn, PERIODIC_ENTRIES *coordlist, int *send_nt
 
   /* communicate IDTPLs */
   {
-    VChannelPtr *mych;
-    msgid *recv_msg, *send_msg;
-    char *com_stat;
     int nc,rc,error;
 
     /* establish channels */
-    mych = (VChannelPtr *)GetTmpMem(MGHEAP(MYMG(g)),procs*sizeof(VChannelPtr),MarkKey);
-    assert(mych!=NULL);
-    recv_msg = (msgid *)GetTmpMem(MGHEAP(MYMG(g)),procs*sizeof(msgid),MarkKey);
-    assert(recv_msg!=NULL);
-    send_msg = (msgid *)GetTmpMem(MGHEAP(MYMG(g)),procs*sizeof(msgid),MarkKey);
-    assert(send_msg!=NULL);
-    com_stat = (char *)GetTmpMem(MGHEAP(MYMG(g)),procs*sizeof(char),MarkKey);
-    assert(com_stat!=NULL);
-    memset(com_stat,0,procs*sizeof(char));
+    std::vector<VChannelPtr> mych(procs, nullptr);
+    std::vector<msgid> recv_msg(procs, PPIF::NO_MSGID);
+    std::vector<msgid> send_msg(procs, PPIF::NO_MSGID);
+    std::vector<char> com_stat(procs, 0);
 
     nc = 0;
     for (i=0; i<procs; i++)