struct AWSConfig {
   string id;
-  RGWRESTConn *conn{nullptr};
+  std::unique_ptr<RGWRESTConn> conn;
 };
 
 // maybe use Fetch Remote Obj instead?
         //string bucket_name = aws_bucket_name(bucket_info);
           ldout(sync_env->cct,0) << "AWS: creating bucket" << bucket_name << dendl;
           bufferlist bl;
-          call(new RGWPutRawRESTResourceCR <int> (sync_env->cct, conf.conn,
+          call(new RGWPutRawRESTResourceCR <int> (sync_env->cct, conf.conn.get(),
                                                   sync_env->http_manager,
                                                   bucket_name, nullptr, bl, nullptr));
         }
 
       yield {
         string path=aws_object_name(bucket_info, key);
-        ldout(sync_env->cct,0) << "AWS creating object at path" << path << dendl;
-        call(new RGWPutRawRESTResourceCR<int> (sync_env->cct, conf.conn,
+        ldout(sync_env->cct,0) << "AWS: creating object at path" << path << dendl;
+        call(new RGWPutRawRESTResourceCR<int> (sync_env->cct, conf.conn.get(),
                                                         sync_env->http_manager,
                                                         path, nullptr,
                                                         res, nullptr));
                               << " b=" << bucket_info.bucket << " k=" << key << " mtime=" << mtime << dendl;
       yield {
         string path = aws_object_name(bucket_info, key);
-        ldout(sync_env->cct, 0) << "abhi: removing aws object at" << path << dendl;
-        call(new RGWDeleteRESTResourceCR(sync_env->cct, conf.conn,
+        ldout(sync_env->cct, 0) << "AWS: removing aws object at" << path << dendl;
+        call(new RGWDeleteRESTResourceCR(sync_env->cct, conf.conn.get(),
                                          sync_env->http_manager,
                                          path, nullptr /* params */));
       }
 public:
   RGWAWSDataSyncModule(CephContext *cct, const string& s3_endpoint, const string& access_key, const string& secret){
     conf.id = string("s3:") + s3_endpoint;
-    conf.conn = new RGWRESTConn(cct,
-                                conf.id,
-                                { s3_endpoint },
-                                RGWAccessKey(access_key,secret));
+    conf.conn.reset(new RGWRESTConn(cct,
+                                    conf.id,
+                                    { s3_endpoint },
+                                    RGWAccessKey(access_key,secret)));
   }
 
-  ~RGWAWSDataSyncModule() {
-    delete conf.conn;
-  }
+  ~RGWAWSDataSyncModule() {}
+
     RGWCoroutine *sync_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, uint64_t versioned_epoch) override {
     ldout(sync_env->cct, 0) << conf.id << ": sync_object: b=" << bucket_info.bucket << " k=" << key << " versioned_epoch=" << versioned_epoch << dendl;
     return new RGWAWSHandleRemoteObjCR(sync_env, bucket_info, key, conf);