diff --git a/nginx/nginx.conf b/nginx/nginx.conf
index d686603..1d3f29d 100644
--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -20,7 +20,7 @@
     server_name  localhost;
     root   /usr/share/nginx/html;
     index  index.html index.htm;
-    client_max_body_size 15M;
+    client_max_body_size 50M;
 
     location /osm {
         proxy_pass https://nbi:9999;
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index 9e87be9..7724414 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -106,10 +106,10 @@
     "SHOWGRAPH": "Grafik anzeigen",
     "UPDATESHOWGRAPH": "Grafik aktualisieren und anzeigen",
     "CREATEPACKAGE": "Neues Paket erstellen",
-    "GZFILETYPEERRROR": "Laden Sie nur eine tar.gz-Datei hoch und die Größe sollte 15 MB nicht überschreiten",
-    "YAMLFILETYPEERRROR": "Laden Sie nur YAML-Dateien hoch und die Größe sollte 15 MB nicht überschreiten",
-    "JSONFILETYPEERRROR": "Laden Sie nur JSON-Dateien hoch und die Größe sollte 15 MB nicht überschreiten",
-    "PUBFILETYPEERRROR": "Laden Sie nur PUB-Dateien hoch und die Größe sollte 15 MB nicht überschreiten",
+    "GZFILETYPEERRROR": "Laden Sie nur eine tar.gz-Datei hoch und die Größe sollte 50 MB nicht überschreiten",
+    "YAMLFILETYPEERRROR": "Laden Sie nur YAML-Dateien hoch und die Größe sollte 50 MB nicht überschreiten",
+    "JSONFILETYPEERRROR": "Laden Sie nur JSON-Dateien hoch und die Größe sollte 50 MB nicht überschreiten",
+    "PUBFILETYPEERRROR": "Laden Sie nur PUB-Dateien hoch und die Größe sollte 50 MB nicht überschreiten",
     "PACKAGE": "Paket",
     "URL": "URL",
     "DEPLOYED": "Bereitgestellt",
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 688bfc8..9e0c5a0 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -106,10 +106,10 @@
     "SHOWGRAPH": "Show Graph",
     "UPDATESHOWGRAPH": "Update and Show Graph",
     "CREATEPACKAGE": "Create New Package",
-    "GZFILETYPEERRROR": "Upload only tar.gz file and size should not exceed 15 MB",
-    "YAMLFILETYPEERRROR": "Upload only YAML file and size should not exceed 15 MB",
-    "JSONFILETYPEERRROR": "Upload only JSON file and size should not exceed 15 MB",
-    "PUBFILETYPEERRROR": "Upload only PUB file and size should not exceed 15 MB",
+    "GZFILETYPEERRROR": "Upload only tar.gz file and size should not exceed 50 MB",
+    "YAMLFILETYPEERRROR": "Upload only YAML file and size should not exceed 50 MB",
+    "JSONFILETYPEERRROR": "Upload only JSON file and size should not exceed 50 MB",
+    "PUBFILETYPEERRROR": "Upload only PUB file and size should not exceed 50 MB",
     "PACKAGE": "Package",
     "URL": "URL",
     "DEPLOYED": "Deployed",
diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json
index cf7c1fa..dd9d08b 100644
--- a/src/assets/i18n/es.json
+++ b/src/assets/i18n/es.json
@@ -106,10 +106,10 @@
     "SHOWGRAPH": "Mostrar gráfico",
     "UPDATESHOWGRAPH": "Actualizar y mostrar gráfico",
     "CREATEPACKAGE": "Crear nuevo paquete",
-    "GZFILETYPEERRROR": "Cargue solo el archivo tar.gz, el tamaño no debe exceder los 15 MB",
-    "YAMLFILETYPEERRROR": "Cargue solo el archivo YAML, el tamaño no debe exceder los 15 MB",
-    "JSONFILETYPEERRROR": "Cargue solo el archivo JSON, el tamaño no debe exceder los 15 MB",
-    "PUBFILETYPEERRROR": "Cargue solo el archivo PUB, el tamaño no debe exceder los 15 MB",
+    "GZFILETYPEERRROR": "Cargue solo el archivo tar.gz, el tamaño no debe exceder los 50 MB",
+    "YAMLFILETYPEERRROR": "Cargue solo el archivo YAML, el tamaño no debe exceder los 50 MB",
+    "JSONFILETYPEERRROR": "Cargue solo el archivo JSON, el tamaño no debe exceder los 50 MB",
+    "PUBFILETYPEERRROR": "Cargue solo el archivo PUB, el tamaño no debe exceder los 50 MB",
     "PACKAGE": "Paquete",
     "URL": "URL",
     "DEPLOYED": "Desplegada",
diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json
index 16476dc..48a9fbe 100644
--- a/src/assets/i18n/pt.json
+++ b/src/assets/i18n/pt.json
@@ -106,10 +106,10 @@
     "SHOWGRAPH": "Mostrar gráfico",
     "UPDATESHOWGRAPH": "Atualizar e mostrar gráfico",
     "CREATEPACKAGE": "Criar novo pacote",
-    "GZFILETYPEERRROR": "Carregue apenas o arquivo tar.gz e o tamanho não deve exceder 15 MB",
-    "YAMLFILETYPEERRROR": "Carregar apenas arquivo YAML e o tamanho não deve exceder 15 MB",
-    "JSONFILETYPEERRROR": "Carregar apenas arquivo JSON e o tamanho não deve exceder 15 MB",
-    "PUBFILETYPEERRROR": "Carregar apenas arquivo PUB e o tamanho não deve exceder 15 MB",
+    "GZFILETYPEERRROR": "Carregue apenas o arquivo tar.gz e o tamanho não deve exceder 50 MB",
+    "YAMLFILETYPEERRROR": "Carregar apenas arquivo YAML e o tamanho não deve exceder 50 MB",
+    "JSONFILETYPEERRROR": "Carregar apenas arquivo JSON e o tamanho não deve exceder 50 MB",
+    "PUBFILETYPEERRROR": "Carregar apenas arquivo PUB e o tamanho não deve exceder 50 MB",
     "PACKAGE": "Pacote",
     "URL": "URL",
     "DEPLOYED": "Deployed",
diff --git a/src/assets/js/tar.js b/src/assets/js/tar.js
index 058d1ee..64d25c3 100644
--- a/src/assets/js/tar.js
+++ b/src/assets/js/tar.js
@@ -16,7 +16,7 @@
  Author: KUMARAN M (kumaran.m@tataelxsi.co.in), RAJESH S (rajesh.s@tataelxsi.co.in), BARATH KUMAR R (barath.r@tataelxsi.co.in)
  */
 var Tar =
-/******/ (function(modules) { // webpackBootstrap
+/******/ (function (modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
 /******/
@@ -24,15 +24,17 @@
 /******/ 	function __webpack_require__(moduleId) {
 /******/
 /******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
+/******/ 		if (installedModules[moduleId]) {
 /******/ 			return installedModules[moduleId].exports;
-/******/ 		}
+				/******/
+}
 /******/ 		// Create a new module (and put it into the cache)
 /******/ 		var module = installedModules[moduleId] = {
 /******/ 			i: moduleId,
 /******/ 			l: false,
 /******/ 			exports: {}
-/******/ 		};
+				/******/
+};
 /******/
 /******/ 		// Execute the module function
 /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
@@ -42,7 +44,8 @@
 /******/
 /******/ 		// Return the exports of the module
 /******/ 		return module.exports;
-/******/ 	}
+			/******/
+}
 /******/
 /******/
 /******/ 	// expose the modules object (__webpack_modules__)
@@ -52,381 +55,390 @@
 /******/ 	__webpack_require__.c = installedModules;
 /******/
 /******/ 	// identity function for calling harmony imports with the correct context
-/******/ 	__webpack_require__.i = function(value) { return value; };
+/******/ 	__webpack_require__.i = function (value) { return value; };
 /******/
 /******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 	__webpack_require__.d = function (exports, name, getter) {
+/******/ 		if (!__webpack_require__.o(exports, name)) {
 /******/ 			Object.defineProperty(exports, name, {
 /******/ 				configurable: false,
 /******/ 				enumerable: true,
 /******/ 				get: getter
-/******/ 			});
-/******/ 		}
-/******/ 	};
+	/******/
+});
+				/******/
+}
+			/******/
+};
 /******/
 /******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
+/******/ 	__webpack_require__.n = function (module) {
 /******/ 		var getter = module && module.__esModule ?
 /******/ 			function getDefault() { return module['default']; } :
 /******/ 			function getModuleExports() { return module; };
 /******/ 		__webpack_require__.d(getter, 'a', getter);
 /******/ 		return getter;
-/******/ 	};
+			/******/
+};
 /******/
 /******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/ 	__webpack_require__.o = function (object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
 /******/
 /******/ 	// __webpack_public_path__
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
 /******/ 	return __webpack_require__(__webpack_require__.s = 2);
-/******/ })
+		/******/
+})
 /************************************************************************/
-/******/ ([
+/******/([
 /* 0 */
-/***/ (function(module, exports) {
+/***/ (function (module, exports) {
 
-/*
- * tar-js
- * MIT (c) 2011 T. Jameson Little
- */
+		/*
+		 * tar-js
+		 * MIT (c) 2011 T. Jameson Little
+		 */
 
-(function () {
-	"use strict";
+		(function () {
+			"use strict";
 
-	var lookup = [
-			'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-			'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-			'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
-			'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
-			'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
-			'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
-			'w', 'x', 'y', 'z', '0', '1', '2', '3',
-			'4', '5', '6', '7', '8', '9', '+', '/'
-		];
-	function clean(length) {
-		var i, buffer = new Uint8Array(length);
-		for (i = 0; i < length; i += 1) {
-			buffer[i] = 0;
-		}
-		return buffer;
-	}
+			var lookup = [
+				'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+				'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+				'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+				'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+				'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+				'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+				'w', 'x', 'y', 'z', '0', '1', '2', '3',
+				'4', '5', '6', '7', '8', '9', '+', '/'
+			];
+			function clean(length) {
+				var i, buffer = new Uint8Array(length);
+				for (i = 0; i < length; i += 1) {
+					buffer[i] = 0;
+				}
+				return buffer;
+			}
 
-	function extend(orig, length, addLength, multipleOf) {
-		var newSize = length + addLength,
-			buffer = clean((parseInt(newSize / multipleOf) + 1) * multipleOf);
+			function extend(orig, length, addLength, multipleOf) {
+				var newSize = length + addLength,
+					buffer = clean((parseInt(newSize / multipleOf) + 1) * multipleOf);
 
-		buffer.set(orig);
+				buffer.set(orig);
 
-		return buffer;
-	}
+				return buffer;
+			}
 
-	function pad(num, bytes, base) {
-		num = num.toString(base || 8);
-		return "000000000000".substr(num.length + 12 - bytes) + num;
-	}	
-	
-	function stringToUint8 (input, out, offset) {
-		var i, length;
+			function pad(num, bytes, base) {
+				num = num.toString(base || 8);
+				return "000000000000".substr(num.length + 12 - bytes) + num;
+			}
 
-		out = out || clean(input.length);
+			function stringToUint8(input, out, offset) {
+				var i, length;
 
-		offset = offset || 0;
-		for (i = 0, length = input.length; i < length; i += 1) {
-			out[offset] = input.charCodeAt(i);
-			offset += 1;
-		}
+				out = out || clean(input.length);
 
-		return out;
-	}
+				offset = offset || 0;
+				for (i = 0, length = input.length; i < length; i += 1) {
+					out[offset] = input.charCodeAt(i);
+					offset += 1;
+				}
 
-	function uint8ToBase64(uint8) {
-		var i,
-			extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
-			output = "",
-			temp, length;
+				return out;
+			}
 
-		function tripletToBase64 (num) {
-			return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
-		};
+			function uint8ToBase64(uint8) {
+				var i,
+					extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+					output = "",
+					temp, length;
 
-		// go through the array every three bytes, we'll deal with trailing stuff later
-		for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
-			temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
-			output += tripletToBase64(temp);
-		}
+				function tripletToBase64(num) {
+					return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
+				};
 
-		// this prevents an ERR_INVALID_URL in Chrome (Firefox okay)
-		switch (output.length % 4) {
-			case 1:
-				output += '=';
-				break;
-			case 2:
-				output += '==';
-				break;
-			default:
-				break;
-		}
+				// go through the array every three bytes, we'll deal with trailing stuff later
+				for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+					temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
+					output += tripletToBase64(temp);
+				}
 
-		return output;
-	}
+				// this prevents an ERR_INVALID_URL in Chrome (Firefox okay)
+				switch (output.length % 4) {
+					case 1:
+						output += '=';
+						break;
+					case 2:
+						output += '==';
+						break;
+					default:
+						break;
+				}
 
-	module.exports.clean = clean;
-	module.exports.pad = pad;
-	module.exports.extend = extend;
-	module.exports.stringToUint8 = stringToUint8;
-	module.exports.uint8ToBase64 = uint8ToBase64;
-}());
+				return output;
+			}
+
+			module.exports.clean = clean;
+			module.exports.pad = pad;
+			module.exports.extend = extend;
+			module.exports.stringToUint8 = stringToUint8;
+			module.exports.uint8ToBase64 = uint8ToBase64;
+		}());
 
 
-/***/ }),
+		/***/
+}),
 /* 1 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ (function (module, exports, __webpack_require__) {
 
-/*
- * tar-js
- * MIT (c) 2011 T. Jameson Little
- */
+		/*
+		 * tar-js
+		 * MIT (c) 2011 T. Jameson Little
+		 */
 
-(function () {
-	"use strict";
-	
-/*
-struct posix_header {             // byte offset
-	char name[100];               //   0
-	char mode[8];                 // 100
-	char uid[8];                  // 108
-	char gid[8];                  // 116
-	char size[12];                // 124
-	char mtime[12];               // 136
-	char chksum[8];               // 148
-	char typeflag;                // 156
-	char linkname[100];           // 157
-	char magic[6];                // 257
-	char version[2];              // 263
-	char uname[32];               // 265
-	char gname[32];               // 297
-	char devmajor[8];             // 329
-	char devminor[8];             // 337
-	char prefix[155];             // 345
-                                  // 500
-};
-*/
+		(function () {
+			"use strict";
 
-	var utils = __webpack_require__(0),
-		headerFormat;
-	
-	headerFormat = [
-		{
-			'field': 'fileName',
-			'length': 100
-		},
-		{
-			'field': 'fileMode',
-			'length': 8
-		},
-		{
-			'field': 'uid',
-			'length': 8
-		},
-		{
-			'field': 'gid',
-			'length': 8
-		},
-		{
-			'field': 'fileSize',
-			'length': 12
-		},
-		{
-			'field': 'mtime',
-			'length': 12
-		},
-		{
-			'field': 'checksum',
-			'length': 8
-		},
-		{
-			'field': 'type',
-			'length': 1
-		},
-		{
-			'field': 'linkName',
-			'length': 100
-		},
-		{
-			'field': 'ustar',
-			'length': 8
-		},
-		{
-			'field': 'owner',
-			'length': 32
-		},
-		{
-			'field': 'group',
-			'length': 32
-		},
-		{
-			'field': 'majorNumber',
-			'length': 8
-		},
-		{
-			'field': 'minorNumber',
-			'length': 8
-		},
-		{
-			'field': 'filenamePrefix',
-			'length': 155
-		},
-		{
-			'field': 'padding',
-			'length': 12
-		}
-	];
+			/*
+			struct posix_header {             // byte offset
+				char name[100];               //   0
+				char mode[8];                 // 100
+				char uid[8];                  // 108
+				char gid[8];                  // 116
+				char size[12];                // 124
+				char mtime[12];               // 136
+				char chksum[8];               // 148
+				char typeflag;                // 156
+				char linkname[100];           // 157
+				char magic[6];                // 257
+				char version[2];              // 263
+				char uname[32];               // 265
+				char gname[32];               // 297
+				char devmajor[8];             // 329
+				char devminor[8];             // 337
+				char prefix[155];             // 345
+											  // 500
+			};
+			*/
 
-	function formatHeader(data, cb) {
-		var buffer = utils.clean(512),
-			offset = 0;
+			var utils = __webpack_require__(0),
+				headerFormat;
 
-		headerFormat.forEach(function (value) {
-			var str = data[value.field] || "",
-				i, length;
+			headerFormat = [
+				{
+					'field': 'fileName',
+					'length': 100
+				},
+				{
+					'field': 'fileMode',
+					'length': 8
+				},
+				{
+					'field': 'uid',
+					'length': 8
+				},
+				{
+					'field': 'gid',
+					'length': 8
+				},
+				{
+					'field': 'fileSize',
+					'length': 12
+				},
+				{
+					'field': 'mtime',
+					'length': 12
+				},
+				{
+					'field': 'checksum',
+					'length': 8
+				},
+				{
+					'field': 'type',
+					'length': 1
+				},
+				{
+					'field': 'linkName',
+					'length': 100
+				},
+				{
+					'field': 'ustar',
+					'length': 8
+				},
+				{
+					'field': 'owner',
+					'length': 32
+				},
+				{
+					'field': 'group',
+					'length': 32
+				},
+				{
+					'field': 'majorNumber',
+					'length': 8
+				},
+				{
+					'field': 'minorNumber',
+					'length': 8
+				},
+				{
+					'field': 'filenamePrefix',
+					'length': 155
+				},
+				{
+					'field': 'padding',
+					'length': 12
+				}
+			];
 
-			for (i = 0, length = str.length; i < length; i += 1) {
-				buffer[offset] = str.charCodeAt(i);
-				offset += 1;
+			function formatHeader(data, cb) {
+				var buffer = utils.clean(512),
+					offset = 0;
+
+				headerFormat.forEach(function (value) {
+					var str = data[value.field] || "",
+						i, length;
+
+					for (i = 0, length = str.length; i < length; i += 1) {
+						buffer[offset] = str.charCodeAt(i);
+						offset += 1;
+					}
+
+					offset += value.length - i; // space it out with nulls
+				});
+
+				if (typeof cb === 'function') {
+					return cb(buffer, offset);
+				}
+				return buffer;
 			}
 
-			offset += value.length - i; // space it out with nulls
-		});
-
-		if (typeof cb === 'function') {
-			return cb(buffer, offset);
-		}
-		return buffer;
-	}
-	
-	module.exports.structure = headerFormat;
-	module.exports.format = formatHeader;
-}());
+			module.exports.structure = headerFormat;
+			module.exports.format = formatHeader;
+		}());
 
 
-/***/ }),
+		/***/
+}),
 /* 2 */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ (function (module, exports, __webpack_require__) {
 
-/*
- * tar-js
- * MIT (c) 2011 T. Jameson Little
- */
+		/*
+		 * tar-js
+		 * MIT (c) 2011 T. Jameson Little
+		 */
 
-(function () {
-	"use strict";
+		(function () {
+			"use strict";
 
-	var header = __webpack_require__(1),
-		utils = __webpack_require__(0),
-		recordSize = 512,
-		blockSize;
-	
-	function Tar(recordsPerBlock) {
-		this.written = 0;
-		blockSize = (recordsPerBlock || 20) * recordSize;
-		this.out = utils.clean(blockSize);
-	}
+			var header = __webpack_require__(1),
+				utils = __webpack_require__(0),
+				recordSize = 512,
+				blockSize;
 
-	Tar.prototype.append = function (filepath, input, opts, callback) {
-		var data,
-			checksum,
-			mode,
-			mtime,
-			uid,
-			gid,
-			headerArr;
-
-		if (typeof input === 'string') {
-			input = utils.stringToUint8(input);
-		} else if (input.constructor !== Uint8Array.prototype.constructor) {
-			throw 'Invalid input type. You gave me: ' + input.constructor.toString().match(/function\s*([$A-Za-z_][0-9A-Za-z_]*)\s*\(/)[1];
-		}
-
-		if (typeof opts === 'function') {
-			callback = opts;
-			opts = {};
-		}
-
-		opts = opts || {};
-
-		mode = opts.mode || parseInt('777', 8) & 0xfff;
-		mtime = opts.mtime || Math.floor(+new Date() / 1000);
-		uid = opts.uid || 0;
-		gid = opts.gid || 0;
-
-		data = {
-			fileName: filepath,
-			fileMode: utils.pad(mode, 7),
-			uid: utils.pad(uid, 7),
-			gid: utils.pad(gid, 7),
-			fileSize: utils.pad(input.length, 11),
-			mtime: utils.pad(mtime, 11),
-			checksum: '        ',
-			type: opts.type || '0',
-			ustar: 'ustar  ',
-			owner: opts.owner || '',
-			group: opts.group || ''
-		};
-
-		// calculate the checksum
-		checksum = 0;
-		Object.keys(data).forEach(function (key) {
-			var i, value = data[key], length;
-
-			for (i = 0, length = value.length; i < length; i += 1) {
-				checksum += value.charCodeAt(i);
+			function Tar(recordsPerBlock) {
+				this.written = 0;
+				blockSize = (recordsPerBlock || 20) * recordSize;
+				this.out = utils.clean(blockSize);
 			}
-		});
 
-		data.checksum = utils.pad(checksum, 6) + "\u0000 ";
+			Tar.prototype.append = function (filepath, input, opts, callback) {
+				var data,
+					checksum,
+					mode,
+					mtime,
+					uid,
+					gid,
+					headerArr;
 
-		headerArr = header.format(data);
+				if (typeof input === 'string') {
+					input = utils.stringToUint8(input);
+				} else if (input.constructor !== Uint8Array.prototype.constructor) {
+					throw 'Invalid input type. You gave me: ' + input.constructor.toString().match(/function\s*([$A-Za-z_][0-9A-Za-z_]*)\s*\(/)[1];
+				}
 
-		var i, offset, length;
+				if (typeof opts === 'function') {
+					callback = opts;
+					opts = {};
+				}
 
-		this.out.set(headerArr, this.written);
+				opts = opts || {};
 
-		this.written += headerArr.length;
+				mode = opts.mode || parseInt('777', 8) & 0xfff;
+				mtime = opts.mtime || Math.floor(+new Date() / 1000);
+				uid = opts.uid || 0;
+				gid = opts.gid || 0;
 
-		// If there is not enough space in this.out, we need to expand it to
-		// fit the new input.
-		if (this.written + input.length > this.out.length) {
-			this.out = utils.extend(this.out, this.written, input.length, blockSize);
-		}
+				data = {
+					fileName: filepath,
+					fileMode: utils.pad(mode, 7),
+					uid: utils.pad(uid, 7),
+					gid: utils.pad(gid, 7),
+					fileSize: utils.pad(input.length, 11),
+					mtime: utils.pad(mtime, 11),
+					checksum: '        ',
+					type: opts.type || '0',
+					ustar: 'ustar  ',
+					owner: opts.owner || '',
+					group: opts.group || '',
+					linkName: opts.linkname || ''
+				};
 
-		this.out.set(input, this.written);
+				// calculate the checksum
+				checksum = 0;
+				Object.keys(data).forEach(function (key) {
+					var i, value = data[key], length;
 
-		// to the nearest multiple of recordSize
-		this.written += input.length + (recordSize - (input.length % recordSize || recordSize));
+					for (i = 0, length = value.length; i < length; i += 1) {
+						checksum += value.charCodeAt(i);
+					}
+				});
 
-		// make sure there's at least 2 empty records worth of extra space
-		if (this.out.length - this.written < recordSize * 2) {
-			this.out = utils.extend(this.out, this.written, recordSize * 2, blockSize);
-		}
+				data.checksum = utils.pad(checksum, 6) + "\u0000 ";
 
-		if (typeof callback === 'function') {
-			callback(this.out);
-		}
+				headerArr = header.format(data);
 
-		return this.out;
-	};
+				var i, offset, length;
 
-	Tar.prototype.clear = function () {
-		this.written = 0;
-		this.out = utils.clean(blockSize);
-	};
-	
-	module.exports = Tar;
-}());
+				this.out.set(headerArr, this.written);
+
+				this.written += headerArr.length;
+
+				// If there is not enough space in this.out, we need to expand it to
+				// fit the new input.
+				if (this.written + input.length > this.out.length) {
+					this.out = utils.extend(this.out, this.written, input.length, blockSize);
+				}
+
+				this.out.set(input, this.written);
+
+				// to the nearest multiple of recordSize
+				this.written += input.length + (recordSize - (input.length % recordSize || recordSize));
+
+				// make sure there's at least 2 empty records worth of extra space
+				if (this.out.length - this.written < recordSize * 2) {
+					this.out = utils.extend(this.out, this.written, recordSize * 2, blockSize);
+				}
+
+				if (typeof callback === 'function') {
+					callback(this.out);
+				}
+
+				return this.out;
+			};
+
+			Tar.prototype.clear = function () {
+				this.written = 0;
+				this.out = utils.clean(blockSize);
+			};
+
+			module.exports = Tar;
+		}());
 
 
-/***/ })
-/******/ ]);
\ No newline at end of file
+		/***/
+})
+/******/]);
\ No newline at end of file
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index a9be3ad..55697ed 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -50,7 +50,7 @@
 // tslint:disable-next-line: typedef
 export const environment = {
     production: true,
-    packageSize: 15,
+    packageSize: 50,
     paginationNumber: 10, //Possible values are 10, 25, 50, 100
     packageVersion: version,
     // tslint:disable-next-line: no-http-string
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index d2e5575..92b5193 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -50,7 +50,7 @@
 // tslint:disable-next-line: typedef
 export const environment = {
     production: false,
-    packageSize: 15,
+    packageSize: 50,
     paginationNumber: 10, //Possible values are 10, 25, 50, 100
     packageVersion: version,
     // tslint:disable-next-line: no-http-string
diff --git a/src/models/CommonModel.ts b/src/models/CommonModel.ts
index 627074b..fb9707a 100644
--- a/src/models/CommonModel.ts
+++ b/src/models/CommonModel.ts
@@ -152,6 +152,16 @@
     buffer: ArrayBuffer;
     header_offset?: Number;
     size?: number;
+    linkname?: string;
+    uname?: string;
+    gname?: string;
+}
+/** Interface for File Settings */
+export interface FILESETTINGS {
+    'type'?: string;
+    linkname?: string;
+    owner?: string;
+    group?: string;
 }
 /** Interface for Package information */
 export interface PACKAGEINFO {
diff --git a/src/services/SharedService.ts b/src/services/SharedService.ts
index f2f730e..48fbb17 100644
--- a/src/services/SharedService.ts
+++ b/src/services/SharedService.ts
@@ -23,7 +23,7 @@
 import { FormArray, FormGroup } from '@angular/forms';
 import { Router } from '@angular/router';
 import { TranslateService } from '@ngx-translate/core';
-import { CONSTANTNUMBER, ERRORDATA, GETAPIURLHEADER, PACKAGEINFO, PAGERSMARTTABLE, SMARTTABLECLASS, TARSETTINGS } from 'CommonModel';
+import { CONSTANTNUMBER, ERRORDATA, FILESETTINGS, GETAPIURLHEADER, PACKAGEINFO, PAGERSMARTTABLE, SMARTTABLECLASS, TARSETTINGS } from 'CommonModel';
 import { environment } from 'environment';
 import * as HttpStatus from 'http-status-codes';
 import * as untar from 'js-untar';
@@ -194,14 +194,15 @@
                         const getFoldersFiles: {}[] = extractedFiles;
                         const folderNameStr: string = extractedFiles[0].name;
                         getFoldersFiles.forEach((value: TARSETTINGS) => {
+                            const fileValueObj: FILESETTINGS = this.createFileValueObject(value);
                             const getRootFolder: string[] = value.name.split('/');
                             if (value.name.startsWith(folderNameStr) &&
                                 (value.name.endsWith('.yaml') || value.name.endsWith('.yml')) &&
                                 getRootFolder.length === this.directoryCount) {
-                                tar.append(value.name, packageInfo.descriptor, { type: value.type });
+                                tar.append(value.name, packageInfo.descriptor, fileValueObj);
                             } else {
                                 if (value.type !== 'L') {
-                                    tar.append(value.name, new Uint8Array(value.buffer), { type: value.type });
+                                    tar.append(value.name, new Uint8Array(value.buffer), fileValueObj);
                                 }
                             }
                         });
@@ -224,6 +225,15 @@
             });
         });
     }
+    /** Method to return the file information @public */
+    public createFileValueObject(value: TARSETTINGS): FILESETTINGS {
+        return {
+            type: value.type,
+            linkname: value.linkname,
+            owner: value.uname,
+            group: value.gname
+        };
+    }
     /** Method to check given string is JSON or not @public */
     public checkJson(jsonString: string): boolean {
         jsonString = jsonString.replace(/'/g, '"');
