diff --git a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java
index 151f868..3841409 100644
--- a/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java
+++ b/services/resource-service/server/src/main/java/org/apache/airavata/mft/resource/server/backend/file/FileBasedResourceBackend.java
@@ -19,15 +19,21 @@
 
 import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
 import org.apache.airavata.mft.resource.stubs.azure.resource.*;
+import org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage;
 import org.apache.airavata.mft.resource.stubs.box.resource.*;
+import org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage;
 import org.apache.airavata.mft.resource.stubs.common.DirectoryResource;
 import org.apache.airavata.mft.resource.stubs.common.FileResource;
 import org.apache.airavata.mft.resource.stubs.dropbox.resource.*;
+import org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage;
 import org.apache.airavata.mft.resource.stubs.ftp.resource.*;
 import org.apache.airavata.mft.resource.stubs.ftp.storage.*;
 import org.apache.airavata.mft.resource.stubs.gcs.resource.*;
+import org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage;
 import org.apache.airavata.mft.resource.stubs.local.resource.*;
+import org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage;
 import org.apache.airavata.mft.resource.stubs.s3.resource.*;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage;
 import org.apache.airavata.mft.resource.stubs.scp.resource.*;
 import org.apache.airavata.mft.resource.stubs.scp.storage.*;
 import org.json.simple.JSONArray;
@@ -164,7 +170,14 @@
                     .map(resource -> {
                         JSONObject r = (JSONObject) resource;
 
-                        LocalResource.Builder builder = LocalResource.newBuilder().setResourceId(r.get("resourceId").toString());
+                        LocalStorage storage = LocalStorage.newBuilder()
+                                .setStorageId(((JSONObject)r.get("localStorage")).get("storageId").toString())
+                                .setAgentId(((JSONObject)r.get("localStorage")).get("agentId").toString())
+                                .build();
+
+                        LocalResource.Builder builder = LocalResource.newBuilder()
+                                .setLocalStorage(storage)
+                                .setResourceId(r.get("resourceId").toString());
 
                         switch (r.get("resourceMode").toString()) {
                             case "FILE":
@@ -215,10 +228,15 @@
                     .map(resource -> {
                         JSONObject r = (JSONObject) resource;
 
+                        S3Storage storage = S3Storage.newBuilder()
+                                .setStorageId(((JSONObject)r.get("s3Storage")).get("storageId").toString())
+                                .setRegion(((JSONObject)r.get("s3Storage")).get("region").toString())
+                                .setRegion(((JSONObject)r.get("s3Storage")).get("bucketName").toString())
+                                .build();
+
                         S3Resource.Builder builder = S3Resource.newBuilder()
                                 .setResourceId(r.get("resourceId").toString())
-                                .setBucketName(r.get("bucketName").toString())
-                                .setRegion(r.get("region").toString());
+                                .setS3Storage(storage);
 
                         switch (r.get("resourceMode").toString()) {
                             case "FILE":
@@ -271,7 +289,12 @@
                     .map(resource -> {
                         JSONObject r = (JSONObject) resource;
 
+                        BoxStorage storage = BoxStorage.newBuilder()
+                                .setStorageId(((JSONObject)r.get("boxStorage")).get("storageId").toString())
+                                .build();
+
                         BoxResource.Builder builder = BoxResource.newBuilder()
+                                .setBoxStorage(storage)
                                 .setResourceId(r.get("resourceId").toString());
 
                         switch (r.get("resourceMode").toString()) {
@@ -321,8 +344,13 @@
                     .map(resource -> {
                         JSONObject r = (JSONObject) resource;
 
+                        AzureStorage storage = AzureStorage.newBuilder()
+                                .setStorageId(((JSONObject)r.get("azureStorage")).get("storageId").toString())
+                                .setContainer(((JSONObject)r.get("azureStorage")).get("container").toString())
+                                .build();
+
                         AzureResource.Builder builder = AzureResource.newBuilder()
-                                .setContainer(r.get("container").toString())
+                                .setAzureStorage(storage)
                                 .setResourceId(r.get("resourceId").toString());
 
                         switch (r.get("resourceMode").toString()) {
@@ -372,8 +400,13 @@
                     .map(resource -> {
                         JSONObject r = (JSONObject) resource;
 
+                        GCSStorage storage = GCSStorage.newBuilder()
+                                .setStorageId(((JSONObject)r.get("gcsStorage")).get("storageId").toString())
+                                .setBucketName(((JSONObject)r.get("gcsStorage")).get("bucketName").toString())
+                                .build();
+
                         GCSResource.Builder builder = GCSResource.newBuilder()
-                                .setBucketName(r.get("bucketName").toString())
+                                .setGcsStorage(storage)
                                 .setResourceId(r.get("resourceId").toString());
 
                         switch (r.get("resourceMode").toString()) {
@@ -423,8 +456,14 @@
                         JSONObject r = (JSONObject) resource;
                         String resourcePath = r.get("resourcePath").toString();
                         resourcePath = resourcePath.startsWith("/") ? resourcePath : "/" + resourcePath;
+
+                        DropboxStorage storage = DropboxStorage.newBuilder()
+                                .setStorageId(((JSONObject)r.get("dropboxStorage")).get("storageId").toString())
+                                .build();
+
                         DropboxResource.Builder builder = DropboxResource.newBuilder()
-                                .setResourceId(r.get("resourceId").toString());
+                                .setResourceId(r.get("resourceId").toString())
+                                .setDropboxStorage(storage);
 
                         switch (r.get("resourceMode").toString()) {
                             case "FILE":
diff --git a/services/resource-service/server/src/main/resources/resources.json b/services/resource-service/server/src/main/resources/resources.json
index 9d430db..83e009f 100644
--- a/services/resource-service/server/src/main/resources/resources.json
+++ b/services/resource-service/server/src/main/resources/resources.json
@@ -27,47 +27,69 @@
     "type": "LOCAL",
     "resourceId":  "10mb-file",
     "resourceMode": "FILE",
-    "resourcePath": "/tmp/10mb.txt"
+    "resourcePath": "/tmp/10mb.txt",
+    "localStorage": {
+      "storageId": "local-storage-1",
+      "agentId": "agent-0"
+    }
   },
   {
     "type": "S3",
     "resourceId": "s3-file",
     "resourceMode": "FILE",
     "resourcePath": "10mb-s3.txt",
-    "region": "us-east-2",
-    "bucketName": "airavata-s3"
+    "s3Storage": {
+      "storageId": "s3-storage-1",
+      "region": "us-east-2",
+      "bucketName": "airavata-s3"
+    }
   },
   {
     "type": "BOX",
     "resourceId": "box-file-abcd",
     "resourceMode": "FILE",
-    "resourcePath": "655108198452"
+    "resourcePath": "655108198452",
+    "boxStorage" : {
+      "storageId": "box-storage-1"
+    }
   },
   {
     "type": "BOX",
     "resourceId": "box-file-efgh",
     "resourceMode": "FILE",
-    "resourcePath": "655450661536"
+    "resourcePath": "655450661536",
+    "boxStorage" : {
+      "storageId": "box-storage-1"
+    }
   },
   {
     "type": "AZURE",
     "resourceId": "azure-blob",
-    "container": "sample-container",
     "resourceMode": "FILE",
-    "resourcePath": "sample.blob"
+    "resourcePath": "sample.blob",
+    "azureStorage" : {
+      "storageId": "azure-storage-1",
+      "container": "sample-container"
+    }
   },
   {
     "type": "GCS",
     "resourceId": "gcs-bucket",
     "resourceMode": "FILE",
-    "bucketName": "pika-pika-bucket",
-    "resourcePath": "PikaPikaTest.txt"
+    "resourcePath": "PikaPikaTest.txt",
+    "gcsStorage": {
+      "storageId": "gcs-storage-1",
+      "bucketName": "pika-pika-bucket"
+    }
   },
   {
     "type": "DROPBOX",
     "resourceId": "dropbox-file",
     "resourceMode": "FILE",
-    "resourcePath": "/test.txt"
+    "resourcePath": "/test.txt",
+    "dropboxStorage": {
+      "storageId": "dropbox-storage-1"
+    }
   },
   {
     "type": "FTP",
diff --git a/services/resource-service/stub/src/main/proto/azure/AzureResource.proto b/services/resource-service/stub/src/main/proto/azure/AzureResource.proto
index 084fbc5..3dac3ed 100644
--- a/services/resource-service/stub/src/main/proto/azure/AzureResource.proto
+++ b/services/resource-service/stub/src/main/proto/azure/AzureResource.proto
@@ -21,10 +21,11 @@
 package org.apache.airavata.mft.resource.stubs.azure.resource;
 
 import "common/common.proto";
+import "azure/AzureStorage.proto";
 
 message AzureResource {
     string resourceId = 1;
-    string container = 2;
+    org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage azureStorage = 2;
     oneof resource {
         org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
         org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
@@ -36,14 +37,20 @@
 }
 
 message AzureResourceCreateRequest {
-    string container = 1;
-    string blobName = 2;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message AzureResourceUpdateRequest {
     string resourceId = 1;
-    string container = 2;
-    string blobName = 3;
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message AzureResourceDeleteRequest {
diff --git a/services/resource-service/stub/src/main/proto/azure/AzureService.proto b/services/resource-service/stub/src/main/proto/azure/AzureService.proto
index b6a19c7..14a9cbc 100644
--- a/services/resource-service/stub/src/main/proto/azure/AzureService.proto
+++ b/services/resource-service/stub/src/main/proto/azure/AzureService.proto
@@ -23,8 +23,39 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 import "azure/AzureResource.proto";
+import "azure/AzureStorage.proto";
 
 service AzureResourceService {
+    
+    // Storage
+
+    rpc getAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageGetRequest) returns
+    (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/azure/storage"
+        };
+    }
+
+    rpc createAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageCreateRequest) returns
+    (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/azure/storage"
+        };
+    }
+
+    rpc updateAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/azure/storage"
+        };
+    }
+
+    rpc deleteAzureStorage (org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/azure/storage"
+        };
+    }
+
+    // Resource
 
     rpc getAzureResource (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResourceGetRequest) returns
                                             (org.apache.airavata.mft.resource.stubs.azure.resource.AzureResource) {
diff --git a/services/resource-service/stub/src/main/proto/azure/AzureStorage.proto b/services/resource-service/stub/src/main/proto/azure/AzureStorage.proto
new file mode 100644
index 0000000..7893c44
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/azure/AzureStorage.proto
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.mft.resource.stubs.azure.storage;
+
+message AzureStorage {
+    string storageId = 1;
+    string container = 2;
+}
+
+message AzureStorageGetRequest {
+    string storageId = 1;
+}
+
+message AzureStorageCreateRequest {
+    string container = 1;
+}
+
+message AzureStorageUpdateRequest {
+    string storageId = 1;
+    string container = 2;
+}
+
+message AzureStorageDeleteRequest {
+    string storageId = 1;
+}
\ No newline at end of file
diff --git a/services/resource-service/stub/src/main/proto/box/BoxResource.proto b/services/resource-service/stub/src/main/proto/box/BoxResource.proto
index 7899fdb..94d5da7 100644
--- a/services/resource-service/stub/src/main/proto/box/BoxResource.proto
+++ b/services/resource-service/stub/src/main/proto/box/BoxResource.proto
@@ -21,25 +21,36 @@
 package org.apache.airavata.mft.resource.stubs.box.resource;
 
 import "common/common.proto";
+import "box/BoxStorage.proto";
 
 message BoxResource {
     string resourceId = 1;
+    org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage boxStorage = 2;
     oneof resource {
-        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
-        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
-    }}
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
+}
 
 message BoxResourceGetRequest {
     string resourceId = 1;
 }
 
 message BoxResourceCreateRequest {
-    string boxFileId = 1;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message BoxResourceUpdateRequest {
     string resourceId = 1;
-    string boxFileId = 2;
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message BoxResourceDeleteRequest {
diff --git a/services/resource-service/stub/src/main/proto/box/BoxService.proto b/services/resource-service/stub/src/main/proto/box/BoxService.proto
index def7858..817c19d 100644
--- a/services/resource-service/stub/src/main/proto/box/BoxService.proto
+++ b/services/resource-service/stub/src/main/proto/box/BoxService.proto
@@ -23,8 +23,40 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 import "box/BoxResource.proto";
+import "box/BoxStorage.proto";
 
 service BoxResourceService {
+
+    // Storage
+
+    rpc getBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageGetRequest) returns
+    (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/box/storage"
+        };
+    }
+
+    rpc createBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageCreateRequest) returns
+    (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/box/storage"
+        };
+    }
+
+    rpc updateBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/box/storage"
+        };
+    }
+
+    rpc deleteBoxStorage (org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/box/storage"
+        };
+    }
+
+    // Resource
+
     rpc getBoxResource (org.apache.airavata.mft.resource.stubs.box.resource.BoxResourceGetRequest) returns
                                             (org.apache.airavata.mft.resource.stubs.box.resource.BoxResource) {
         option (google.api.http) = {
diff --git a/services/resource-service/stub/src/main/proto/box/BoxStorage.proto b/services/resource-service/stub/src/main/proto/box/BoxStorage.proto
new file mode 100644
index 0000000..c198706
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/box/BoxStorage.proto
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.mft.resource.stubs.box.storage;
+
+message BoxStorage {
+    string storageId = 1;
+}
+
+message BoxStorageGetRequest {
+    string storageId = 1;
+}
+
+message BoxStorageCreateRequest {
+}
+
+message BoxStorageUpdateRequest {
+    string storageId = 1;
+}
+
+message BoxStorageDeleteRequest {
+    string storageId = 1;
+}
+
+
diff --git a/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto b/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto
index 6ae5af9..8b90aab 100644
--- a/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto
+++ b/services/resource-service/stub/src/main/proto/dropbox/DropboxResource.proto
@@ -21,12 +21,14 @@
 package org.apache.airavata.mft.resource.stubs.dropbox.resource;
 
 import "common/common.proto";
+import "dropbox/DropboxStorage.proto";
 
 message DropboxResource {
     string resourceId = 1;
+    org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage dropboxStorage = 2;
     oneof resource {
-        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
-        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
     }
 }
 
@@ -35,13 +37,20 @@
 }
 
 message DropboxResourceCreateRequest {
-    string resourcePath = 1;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message DropboxResourceUpdateRequest {
     string resourceId = 1;
-    string resourcePath = 2;
-}
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }}
 
 message DropboxResourceDeleteRequest {
     string resourceId = 1;
diff --git a/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto b/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto
index 7c56fa5..dab3d4b 100644
--- a/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto
+++ b/services/resource-service/stub/src/main/proto/dropbox/DropboxService.proto
@@ -23,8 +23,40 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 import "dropbox/DropboxResource.proto";
+import "dropbox/DropboxStorage.proto";
 
 service DropboxService {
+
+    // Storage
+
+    rpc getDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageGetRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/dropbox/storage"
+        };
+    }
+
+    rpc createDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageCreateRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/dropbox/storage"
+        };
+    }
+
+    rpc updateDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/dropbox/storage"
+        };
+    }
+
+    rpc deleteDropboxStorage (org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/dropbox/storage"
+        };
+    }
+
+    // Resource
+
     rpc getDropboxResource (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResourceGetRequest) returns
                                             (org.apache.airavata.mft.resource.stubs.dropbox.resource.DropboxResource) {
         option (google.api.http) = {
diff --git a/services/resource-service/stub/src/main/proto/dropbox/DropboxStorage.proto b/services/resource-service/stub/src/main/proto/dropbox/DropboxStorage.proto
new file mode 100644
index 0000000..dd8b18f
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/dropbox/DropboxStorage.proto
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.mft.resource.stubs.dropbox.storage;
+
+message DropboxStorage {
+    string storageId = 1;
+}
+
+message DropboxStorageGetRequest {
+    string storageId = 1;
+}
+
+message DropboxStorageCreateRequest {
+}
+
+message DropboxStorageUpdateRequest {
+    string storageId = 1;
+}
+
+message DropboxStorageDeleteRequest {
+    string storageId = 1;
+}
+
+
diff --git a/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto b/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto
index 2ba2b9e..6710b77 100644
--- a/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto
+++ b/services/resource-service/stub/src/main/proto/ftp/FTPResource.proto
@@ -37,14 +37,20 @@
 }
 
 message FTPResourceCreateRequest {
-    string ftpStorageId = 1;
-    string resourcePath = 2;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message FTPResourceUpdateRequest {
     string resourceId = 1;
-    string FTPStorageId = 2;
-    string resourcePath = 3;
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message FTPResourceDeleteRequest {
diff --git a/services/resource-service/stub/src/main/proto/ftp/FTPService.proto b/services/resource-service/stub/src/main/proto/ftp/FTPService.proto
index 4bce679..af06362 100644
--- a/services/resource-service/stub/src/main/proto/ftp/FTPService.proto
+++ b/services/resource-service/stub/src/main/proto/ftp/FTPService.proto
@@ -27,7 +27,6 @@
 
 service FTPResourceService {
 
-
     rpc getFTPStorage (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageGetRequest) returns
                                                         (org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorage) {
         option (google.api.http) = {
diff --git a/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto b/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto
index 1473af9..51ec2ff 100644
--- a/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto
+++ b/services/resource-service/stub/src/main/proto/ftp/FTPStorage.proto
@@ -20,7 +20,6 @@
 option java_multiple_files = true;
 package org.apache.airavata.mft.resource.stubs.ftp.storage;
 
-
 message FTPStorage {
     string storageId = 1;
     string host = 2;
diff --git a/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto b/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto
index 36f3c33..740c732 100644
--- a/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto
+++ b/services/resource-service/stub/src/main/proto/gcs/GCSResource.proto
@@ -21,10 +21,11 @@
 package org.apache.airavata.mft.resource.stubs.gcs.resource;
 
 import "common/common.proto";
+import "gcs/GCSStorage.proto";
 
 message GCSResource {
     string resourceId = 1;
-    string bucketName = 2;
+    org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage gcsStorage = 2;
     oneof resource {
         org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
         org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
@@ -36,14 +37,20 @@
 }
 
 message GCSResourceCreateRequest {
-    string bucketName = 1;
-    string resourcePath = 2;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message GCSResourceUpdateRequest {
     string resourceId = 1;
-    string bucketName = 2;
-    string resourcePath = 3;
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message GCSResourceDeleteRequest {
diff --git a/services/resource-service/stub/src/main/proto/gcs/GCSService.proto b/services/resource-service/stub/src/main/proto/gcs/GCSService.proto
index addd637..e66aece 100644
--- a/services/resource-service/stub/src/main/proto/gcs/GCSService.proto
+++ b/services/resource-service/stub/src/main/proto/gcs/GCSService.proto
@@ -23,8 +23,37 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 import "gcs/GCSResource.proto";
+import "gcs/GCSStorage.proto";
 
 service GCSResourceService {
+
+    // Storage
+    rpc getGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageGetRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/gcs/storage"
+        };
+    }
+
+    rpc createGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageCreateRequest) returns
+                                                    (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/gcs/storage"
+        };
+    }
+
+    rpc updateGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/gcs/storage"
+        };
+    }
+
+    rpc deleteGCSStorage (org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/gcs/storage"
+        };
+    }
+    
     rpc getGCSResource (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResourceGetRequest) returns
                                                     (org.apache.airavata.mft.resource.stubs.gcs.resource.GCSResource) {
         option (google.api.http) = {
diff --git a/services/resource-service/stub/src/main/proto/gcs/GCSStorage.proto b/services/resource-service/stub/src/main/proto/gcs/GCSStorage.proto
new file mode 100644
index 0000000..b974245
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/gcs/GCSStorage.proto
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.mft.resource.stubs.gcs.storage;
+
+message GCSStorage {
+    string storageId = 1;
+    string bucketName = 2;
+}
+
+message GCSStorageGetRequest {
+    string storageId = 1;
+}
+
+message GCSStorageCreateRequest {
+    string bucketName = 1;
+}
+
+message GCSStorageUpdateRequest {
+    string storageId = 1;
+    string bucketName = 2;
+}
+
+message GCSStorageDeleteRequest {
+    string storageId = 1;
+}
+
+
diff --git a/services/resource-service/stub/src/main/proto/local/LocalResource.proto b/services/resource-service/stub/src/main/proto/local/LocalResource.proto
index 1978b0e..9d069d7 100644
--- a/services/resource-service/stub/src/main/proto/local/LocalResource.proto
+++ b/services/resource-service/stub/src/main/proto/local/LocalResource.proto
@@ -21,10 +21,11 @@
 package org.apache.airavata.mft.resource.stubs.local.resource;
 
 import "common/common.proto";
+import "local/LocalStorage.proto";
 
 message LocalResource {
     string resourceId = 1;
-    string agentId = 2;
+    org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage localStorage = 2;
     oneof resource {
         org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
         org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
@@ -36,14 +37,20 @@
 }
 
 message LocalResourceCreateRequest {
-    string resourcePath = 1;
-    string agentId = 2;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message LocalResourceUpdateRequest {
     string resourceId = 1;
-    string resourcePath = 2;
-    string agentId = 3;
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message LocalResourceDeleteRequest {
diff --git a/services/resource-service/stub/src/main/proto/local/LocalService.proto b/services/resource-service/stub/src/main/proto/local/LocalService.proto
index 672d9d6..850ee9f 100644
--- a/services/resource-service/stub/src/main/proto/local/LocalService.proto
+++ b/services/resource-service/stub/src/main/proto/local/LocalService.proto
@@ -23,9 +23,36 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 import "local/LocalResource.proto";
+import "local/LocalStorage.proto";
 
 service LocalResourceService {
 
+    // Storage
+    rpc getLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageGetRequest) returns (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/local/storage"
+        };
+    }
+
+    rpc createLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageCreateRequest) returns (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/local/storage"
+        };
+    }
+
+    rpc updateLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/local/storage"
+        };
+    }
+
+    rpc deleteLocalStorage (org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/local/storage"
+        };
+    }
+
+    // Resource
     rpc getLocalResource (org.apache.airavata.mft.resource.stubs.local.resource.LocalResourceGetRequest) returns
     (org.apache.airavata.mft.resource.stubs.local.resource.LocalResource) {
         option (google.api.http) = {
diff --git a/services/resource-service/stub/src/main/proto/local/LocalStorage.proto b/services/resource-service/stub/src/main/proto/local/LocalStorage.proto
new file mode 100644
index 0000000..9b9e9b9
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/local/LocalStorage.proto
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.mft.resource.stubs.local.storage;
+
+message LocalStorage {
+    string storageId = 1;
+    string agentId = 2;
+}
+
+message LocalStorageGetRequest {
+    string storageId = 1;
+}
+
+message LocalStorageCreateRequest {
+    string agentId = 1;
+}
+
+message LocalStorageUpdateRequest {
+    string storageId = 1;
+    string agentId = 2;
+}
+
+message LocalStorageDeleteRequest {
+    string storageId = 1;
+}
+
+
diff --git a/services/resource-service/stub/src/main/proto/s3/S3Resource.proto b/services/resource-service/stub/src/main/proto/s3/S3Resource.proto
index 9a9404a..c16f29c 100644
--- a/services/resource-service/stub/src/main/proto/s3/S3Resource.proto
+++ b/services/resource-service/stub/src/main/proto/s3/S3Resource.proto
@@ -21,14 +21,14 @@
 package org.apache.airavata.mft.resource.stubs.s3.resource;
 
 import "common/common.proto";
+import "s3/S3Storage.proto";
 
 message S3Resource {
     string resourceId = 1;
-    string bucketName = 2;
-    string region = 3;
+    org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage s3Storage = 2;
     oneof resource {
-        org.apache.airavata.mft.resource.stubs.common.FileResource file = 4;
-        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 5;
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
     }
 }
 
@@ -37,16 +37,20 @@
 }
 
 message S3ResourceCreateRequest {
-    string bucketName = 1;
-    string region = 2;
-    string resourcePath = 3;
+    string storageId = 1;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message S3ResourceUpdateRequest {
     string resourceId = 1;
-    string bucketName = 2;
-    string region = 3;
-    string resourcePath = 4;
+    string storageId = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message S3ResourceDeleteRequest {
diff --git a/services/resource-service/stub/src/main/proto/s3/S3Service.proto b/services/resource-service/stub/src/main/proto/s3/S3Service.proto
index aae50f6..9240a80 100644
--- a/services/resource-service/stub/src/main/proto/s3/S3Service.proto
+++ b/services/resource-service/stub/src/main/proto/s3/S3Service.proto
@@ -23,8 +23,36 @@
 import "google/api/annotations.proto";
 import "google/protobuf/empty.proto";
 import "s3/S3Resource.proto";
+import "s3/S3Storage.proto";
 
 service S3ResourceService {
+
+    // Storage
+    rpc getS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageGetRequest) returns (org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage) {
+        option (google.api.http) = {
+           get: "/v1.0/resource/s3/storage"
+        };
+    }
+
+    rpc createS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageCreateRequest) returns (org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage) {
+        option (google.api.http) = {
+           post: "/v1.0/resource/s3/storage"
+        };
+    }
+
+    rpc updateS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageUpdateRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           put: "/v1.0/resource/s3/storage"
+        };
+    }
+
+    rpc deleteS3Storage (org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageDeleteRequest) returns (google.protobuf.Empty) {
+        option (google.api.http) = {
+           delete: "/v1.0/resource/s3/storage"
+        };
+    }
+    
+    // Resource
     rpc getS3Resource (org.apache.airavata.mft.resource.stubs.s3.resource.S3ResourceGetRequest) returns
                                                 (org.apache.airavata.mft.resource.stubs.s3.resource.S3Resource) {
         option (google.api.http) = {
diff --git a/services/resource-service/stub/src/main/proto/s3/S3Storage.proto b/services/resource-service/stub/src/main/proto/s3/S3Storage.proto
new file mode 100644
index 0000000..4a51221
--- /dev/null
+++ b/services/resource-service/stub/src/main/proto/s3/S3Storage.proto
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+syntax = "proto3";
+
+option java_multiple_files = true;
+package org.apache.airavata.mft.resource.stubs.s3.storage;
+
+message S3Storage {
+    string storageId = 1;
+    string bucketName = 2;
+    string region = 3;
+}
+
+message S3StorageGetRequest {
+    string storageId = 1;
+}
+
+message S3StorageCreateRequest {
+    string bucketName = 1;
+    string region = 2;
+}
+
+message S3StorageUpdateRequest {
+    string storageId = 1;
+    string bucketName = 2;
+    string region = 3;
+}
+
+message S3StorageDeleteRequest {
+    string storageId = 1;
+}
+
+
diff --git a/services/resource-service/stub/src/main/proto/scp/SCPResource.proto b/services/resource-service/stub/src/main/proto/scp/SCPResource.proto
index bfa51fb..6d65ad6 100644
--- a/services/resource-service/stub/src/main/proto/scp/SCPResource.proto
+++ b/services/resource-service/stub/src/main/proto/scp/SCPResource.proto
@@ -38,13 +38,19 @@
 
 message SCPResourceCreateRequest {
     string scpStorageId = 1;
-    string resourcePath = 2;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 2;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 3;
+    }
 }
 
 message SCPResourceUpdateRequest {
     string resourceId = 1;
     string scpStorageId = 2;
-    string resourcePath = 3;
+    oneof resource {
+        org.apache.airavata.mft.resource.stubs.common.FileResource file = 3;
+        org.apache.airavata.mft.resource.stubs.common.DirectoryResource directory = 4;
+    }
 }
 
 message SCPResourceDeleteRequest {
diff --git a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java
index 1a725cb..8a265c8 100644
--- a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java
+++ b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureMetadataCollector.java
@@ -73,7 +73,8 @@
 
         BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(azureSecret.getConnectionString()).buildClient();
 
-        BlobClient blobClient = blobServiceClient.getBlobContainerClient(azureResource.getContainer()).getBlobClient(azureResource.getFile().getResourcePath());
+        BlobClient blobClient = blobServiceClient.getBlobContainerClient(azureResource.getAzureStorage().getContainer())
+                                                .getBlobClient(azureResource.getFile().getResourcePath());
 
         BlobProperties properties = blobClient.getBlockBlobClient().getProperties();
         ResourceMetadata metadata = new ResourceMetadata();
@@ -103,7 +104,7 @@
         AzureSecret azureSecret = secretClient.azure().getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
 
         BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(azureSecret.getConnectionString()).buildClient();
-        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(azureResource.getContainer());
+        BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(azureResource.getAzureStorage().getContainer());
         boolean containerExists = containerClient.exists();
         if (!containerExists) {
             return false;
diff --git a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java
index 162d31d..a9bfdf7 100644
--- a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java
+++ b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureReceiver.java
@@ -57,7 +57,7 @@
         AzureSecret azureSecret = secretClient.azure().getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
 
         BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(azureSecret.getConnectionString()).buildClient();
-        this.containerClient = blobServiceClient.getBlobContainerClient(azureResource.getContainer());
+        this.containerClient = blobServiceClient.getBlobContainerClient(azureResource.getAzureStorage().getContainer());
     }
 
     @Override
diff --git a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java
index 9642103..7dcff4b 100644
--- a/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java
+++ b/transport/azure-transport/src/main/java/org/apache/airavata/mft/transport/azure/AzureSender.java
@@ -54,7 +54,7 @@
         AzureSecret azureSecret = secretClient.azure().getAzureSecret(AzureSecretGetRequest.newBuilder().setSecretId(credentialToken).build());
 
         BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(azureSecret.getConnectionString()).buildClient();
-        this.containerClient = blobServiceClient.getBlobContainerClient(azureResource.getContainer());
+        this.containerClient = blobServiceClient.getBlobContainerClient(azureResource.getAzureStorage().getContainer());
     }
 
     @Override
diff --git a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
index 0f8e634..bda277b 100644
--- a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
+++ b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSMetadataCollector.java
@@ -87,7 +87,8 @@
         Storage storage = new Storage.Builder(transport, jsonFactory, credential).build();
 
         ResourceMetadata metadata = new ResourceMetadata();
-        StorageObject gcsMetadata = storage.objects().get(gcsResource.getBucketName(), gcsResource.getFile().getResourcePath()).execute();
+        StorageObject gcsMetadata = storage.objects().get(gcsResource.getGcsStorage().getBucketName(),
+                                                            gcsResource.getFile().getResourcePath()).execute();
         metadata.setResourceSize(gcsMetadata.getSize().longValue());
         String md5Sum = String.format("%032x", new BigInteger(1, Base64.getDecoder().decode(gcsMetadata.getMd5Hash())));
         metadata.setMd5sum(md5Sum);
@@ -117,9 +118,11 @@
         Storage storage = new Storage.Builder(transport, jsonFactory, credential).build();
         switch (gcsResource.getResourceCase().name()){
             case ResourceTypes.FILE:
-                return !storage.objects().get(gcsResource.getBucketName(), gcsResource.getFile().getResourcePath()).execute().isEmpty();
+                return !storage.objects().get(gcsResource.getGcsStorage().getBucketName(), gcsResource.getFile().getResourcePath())
+                                            .execute().isEmpty();
             case ResourceTypes.DIRECTORY:
-                return !storage.objects().get(gcsResource.getBucketName(), gcsResource.getDirectory().getResourcePath()).execute().isEmpty();
+                return !storage.objects().get(gcsResource.getGcsStorage().getBucketName(), gcsResource.getDirectory().getResourcePath())
+                                            .execute().isEmpty();
         }
         return false;
     }
diff --git a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
index 5a1bc63..03fd31c 100644
--- a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
+++ b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSReceiver.java
@@ -80,7 +80,7 @@
         logger.info("Starting GCS Receiver stream for transfer {}", context.getTransferId());
 
         if (ResourceTypes.FILE.equals(this.gcsResource.getResourceCase().name())) {
-            InputStream inputStream = storage.objects().get(this.gcsResource.getBucketName(),
+            InputStream inputStream = storage.objects().get(this.gcsResource.getGcsStorage().getBucketName(),
                                         this.gcsResource.getFile().getResourcePath()).executeMediaAsInputStream();
             OutputStream os = context.getStreamBuffer().getOutputStream();
             int read;
diff --git a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
index 7326545..368d24d 100644
--- a/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
+++ b/transport/gcp-transport/src/main/java/org/apache/airavata/mft/transport/gcp/GCSSender.java
@@ -101,7 +101,7 @@
                     // Set the access control list to publicly read-only
                     .setAcl(Arrays.asList(new ObjectAccessControl().setEntity("user-" + entityUser).setRole("OWNER")));
 
-            Insert insertRequest = storage.objects().insert(this.gcsResource.getBucketName(), objectMetadata, contentStream);
+            Insert insertRequest = storage.objects().insert(this.gcsResource.getGcsStorage().getBucketName(), objectMetadata, contentStream);
 
             insertRequest.execute();
 
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java
index 56d98f4..5326e11 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3MetadataCollector.java
@@ -71,11 +71,11 @@
 
         AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                 .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
-                .withRegion(s3Resource.getRegion())
+                .withRegion(s3Resource.getS3Storage().getRegion())
                 .build();
 
         ResourceMetadata metadata = new ResourceMetadata();
-        ObjectMetadata s3Metadata = s3Client.getObjectMetadata(s3Resource.getBucketName(), s3Resource.getFile().getResourcePath());
+        ObjectMetadata s3Metadata = s3Client.getObjectMetadata(s3Resource.getS3Storage().getBucketName(), s3Resource.getFile().getResourcePath());
         metadata.setResourceSize(s3Metadata.getContentLength());
         metadata.setMd5sum(s3Metadata.getETag());
         metadata.setUpdateTime(s3Metadata.getLastModified().getTime());
@@ -97,14 +97,14 @@
 
         AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                 .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
-                .withRegion(s3Resource.getRegion())
+                .withRegion(s3Resource.getS3Storage().getRegion())
                 .build();
 
         switch (s3Resource.getResourceCase().name()){
             case ResourceTypes.FILE:
-                return s3Client.doesObjectExist(s3Resource.getBucketName(), s3Resource.getFile().getResourcePath());
+                return s3Client.doesObjectExist(s3Resource.getS3Storage().getBucketName(), s3Resource.getFile().getResourcePath());
             case ResourceTypes.DIRECTORY:
-                return s3Client.doesObjectExist(s3Resource.getBucketName(), s3Resource.getDirectory().getResourcePath());
+                return s3Client.doesObjectExist(s3Resource.getS3Storage().getBucketName(), s3Resource.getDirectory().getResourcePath());
         }
         return false;
     }
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java
index 7e8d42b..ddfd425 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Receiver.java
@@ -59,7 +59,7 @@
 
         s3Client = AmazonS3ClientBuilder.standard()
                 .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
-                .withRegion(s3Resource.getRegion())
+                .withRegion(s3Resource.getS3Storage().getRegion())
                 .build();
     }
 
@@ -74,7 +74,7 @@
         if (ResourceTypes.FILE.equals(this.s3Resource.getResourceCase().name())) {
             logger.info("Starting S3 Receiver stream for transfer {}", context.getTransferId());
 
-            S3Object s3object = s3Client.getObject(s3Resource.getBucketName(), s3Resource.getFile().getResourcePath());
+            S3Object s3object = s3Client.getObject(s3Resource.getS3Storage().getBucketName(), s3Resource.getFile().getResourcePath());
             S3ObjectInputStream inputStream = s3object.getObjectContent();
 
             OutputStream os = context.getStreamBuffer().getOutputStream();
diff --git a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java
index f0faeb2..095ed3c 100644
--- a/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java
+++ b/transport/s3-transport/src/main/java/org/apache/airavata/mft/transport/s3/S3Sender.java
@@ -55,7 +55,7 @@
 
         s3Client = AmazonS3ClientBuilder.standard()
                 .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
-                .withRegion(s3Resource.getRegion())
+                .withRegion(s3Resource.getS3Storage().getRegion())
                 .build();
     }
 
@@ -73,7 +73,7 @@
         metadata.setContentLength(context.getMetadata().getResourceSize());
 
         if (ResourceTypes.FILE.equals(this.s3Resource.getResourceCase().name())) {
-            s3Client.putObject(this.s3Resource.getBucketName(), this.s3Resource.getFile().getResourcePath(),
+            s3Client.putObject(this.s3Resource.getS3Storage().getBucketName(), this.s3Resource.getFile().getResourcePath(),
                                                         context.getStreamBuffer().getInputStream(), metadata);
             logger.info("Completed S3 Sender stream for transfer {}", context.getTransferId());
         } else {
