diff --git a/sendMessage.js b/sendMessage.js
index 1124bb7..4603515 100644
--- a/sendMessage.js
+++ b/sendMessage.js
@@ -147,38 +147,27 @@
         sendMessage.settings.gcm = gcm;
     }
 
-    var body = JSON.stringify(sendMessage);
-    console.log("JSON body to IMF Push is " + body);
+    var bodyData = JSON.stringify(sendMessage);
+    var request = require('request');
+    
+    request({
+        method: 'post',
+        uri: 'https://mobile.ng.bluemix.net/imfpush/v1/apps/'+appId+'/messages',
+        headers :{
+           'appSecret': appSecret,
+           'Accept': 'application/json',
+           'Accept-Language': 'en-US',
+           'Content-Type': 'application/json',
+           'Content-Length': bodyData.length
+        },
+        body:bodyData
+    }, function(error, response, body) {
 
-    var headers = {
-       'appSecret': appSecret,
-       'Accept': 'application/json',
-       'Accept-Language': 'en-US',
-       'Content-Type': 'application/json',
-       'Content-Length': body.length
-    };
-    var options = {
-        host: 'mobile.ng.bluemix.net',
-        path: '/imfpush/v1/apps/'+appId+'/messages',
-        method: 'POST',
-        headers: headers
-    };
-
-    var request = https.request(options, function(res) {
-        var json = '';
-        console.log('RESPONSE STATUS: ' + res.statusCode);
-        console.log('RESPONSE HEADERS: ' + JSON.stringify(res.headers));
-        res.setEncoding('utf8');
-        res.on('data', function (chunk) {
-            json += chunk;
-        });
-        res.on('end', function() {
-            return whisk.done({pushResponse: JSON.parse(json)});
-        });
+        if(error){
+            return whisk.error();
+        }
+        return whisk.done({pushResponse: JSON.stringify(body, undefined, 4)});
     });
-
-    request.write(body);
-    request.end();
     return whisk.async();
 }
 
diff --git a/webhook.js b/webhook.js
index b2100c2..75bc6de 100644
--- a/webhook.js
+++ b/webhook.js
@@ -11,7 +11,6 @@
 function main(params) {
 
     console.log("push trigger feed params: ", params);
-
     var parsedName = parseQName(params.triggerName);
     var trigger = parsedName.name;
     var namespace = parsedName.namespace;
@@ -21,32 +20,35 @@
     var appId = params.appId;
     var appSecret = params.appSecret;
     // The URL to create the webhook on push service
-    var registrationEndpoint = 'https://mobile.ng.bluemix.net/imfpush/v1/apps/' + appId + '/webhooks/' + trigger;
-    var lifecycleEvent = (msg.lifecycleEvent || 'CREATE').trim().toUpperCase();
+    var registrationEndpoint = 'https://mobile.ng.bluemix.net/imfpush/v1/apps/' + appId + '/webhooks';
+    //var registrationEndpoint = 'https://imfpushtest1.ng.bluemix.net/imfpush/v1/apps/'+appId+'/webhooks';
+    var lifecycleEvent = (params.lifecycleEvent || 'CREATE').trim().toUpperCase();
     if (lifecycleEvent === 'CREATE' || lifecycleEvent === 'UPDATE') {
-        var events = params.events.split(',');
-        if (!events) {
-            events = '*';
+
+        if (!params.events) {
+            var events = ["*"];
+        }
+        else {
+            var events = params.events.split(',');
         }
         var body = {
+            name:trigger,
             url: whiskCallbackUrl,
-            event_types: events
+            eventTypes: events
         };
         var options = {
-            method: 'PUT',
+            method: 'POST',
             url: registrationEndpoint,
             body: JSON.stringify(body),
             headers: {
                 'appSecret': appSecret,
-                'Content-Type': 'application/json',
-                'User-Agent': 'whisk'
+                'Content-Type': 'application/json'
             }
         };
         request(options, function(error, response, body){
             if (error) {
                 return whisk.error();
             }
-            console.log("Status code: " + response.statusCode);
             return whisk.done({response: body});
         });
     }
@@ -55,15 +57,13 @@
             method: 'DELETE',
             url: registrationEndpoint,
             headers: {
-                'appSecret': appSecret,
-                'User-Agent': 'whisk'
+                'appSecret': appSecret
             }
         };
         request(options, function(error, response, body) {
             if (error) {
                 return whisk.error();
             }
-            console.log("Status code: " + response.statusCode);
             return whisk.done({response: body});
         });
     }
