diff --git a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py
index 34fff1c..9ebd03c 100644
--- a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py
+++ b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py
@@ -110,6 +110,8 @@
         Raises:
             PackageStoreError- The package could not be retrieved
         """
+        self.refresh()
+
         if package_id not in self._package_dirs:
             msg = "Package %s not found in %s" % (package_id, self._root_dir)
             raise PackageNotFoundError(msg)
diff --git a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py
index d4e5736..b302b46 100644
--- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py
+++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py
@@ -30,14 +30,14 @@
 
 from gi.repository import (
         RwDts as rwdts,
-        RwPkgMgmtYang)
+        RwPkgMgmtYang) 
 import rift.tasklets
 
 
 from . import rpc
 from .proxy import filesystem
 from . import publisher as pkg_publisher
-
+from . import subscriber 
 
 class PackageManagerTasklet(rift.tasklets.Tasklet):
     def __init__(self, *args, **kwargs):
@@ -66,6 +66,10 @@
         args = [self.log, self.dts, self.loop]
         self.job_handler = pkg_publisher.DownloadStatusPublisher(*args)
 
+        # create catalog subscribers 
+        self.vnfd_catalog_sub = subscriber.VnfdStatusSubscriber(*args)
+        self.nsd_catalog_sub = subscriber.NsdStatusSubscriber(*args)
+
         args.append(proxy)
         self.endpoint_rpc = rpc.EndpointDiscoveryRpcHandler(*args)
         self.schema_rpc = rpc.SchemaRpcHandler(*args)
@@ -87,6 +91,8 @@
         yield from self.pkg_op.register()
         yield from self.job_handler.register()
         yield from self.delete_rpc.register()
+        yield from self.vnfd_catalog_sub.register()
+        yield from self.nsd_catalog_sub.register()
 
     @asyncio.coroutine
     def run(self):
diff --git a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py
index f305f2f..14c3dc1 100644
--- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py
+++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py
@@ -13,4 +13,4 @@
 #   See the License for the specific language governing permissions and
 #   limitations under the License.
 #
-from .download_status import DownloadStatusSubscriber
+from .download_status import DownloadStatusSubscriber, VnfdStatusSubscriber, NsdStatusSubscriber
diff --git a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py
index c4a5a53..b4acb5f 100644
--- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py
+++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py
@@ -17,12 +17,92 @@
 # Creation Date: 09/25/2016
 # 
 
-import rift.mano.dts as mano_dts
+import os
+import io
+import shutil
 
+import rift.mano.dts as mano_dts
+import rift.package.package as package 
+import rift.package.store as store 
+import rift.package.convert as convert
+
+from gi.repository import (
+    RwYang,
+    NsdYang,
+    RwNsdYang,
+    VnfdYang,
+    RwVnfdYang,
+    RwDts
+)
 
 class DownloadStatusSubscriber(mano_dts.AbstractOpdataSubscriber):
-    def __init__(self, log, dts, loop, callback=None):
-        super().__init__(log, dts, loop, callback)
 
-    def get_xpath(self):
+    def __init__(self, log, dts, loop, callback):
+        super().__init__(log, dts, loop, callback)
+    
+    def get_xpath(self): 
         return ("D,/rw-pkg-mgmt:download-jobs/rw-pkg-mgmt:job")
+
+class VnfdStatusSubscriber(DownloadStatusSubscriber): 
+    DOWNLOAD_DIR = store.VnfdPackageFilesystemStore.DEFAULT_ROOT_DIR
+    MODULE_DESC = 'vnfd rw-vnfd'.split()
+    DESC_TYPE = 'vnfd'
+    
+    def __init__(self, log, dts, loop):
+        super().__init__(log, dts, loop, self.on_change)
+        self.subscriber = mano_dts.VnfdCatalogSubscriber(log, dts, loop)
+
+    def on_change(self, msg, action): 
+        log_msg = "1. Vnfd called w/ msg attributes: {} id {} name {} action: {}".format(repr(msg), msg.id, msg.name, repr(action))
+        self.log.debug(log_msg)
+        if action == RwDts.QueryAction.UPDATE:
+            actionCreate(self, msg)
+        else:
+            self.log.debug("VnfdStatusSubscriber: No action for ", action)
+            pass
+
+    def get_xpath(self): 
+        return self.subscriber.get_xpath() 
+
+
+class NsdStatusSubscriber(DownloadStatusSubscriber): 
+    DOWNLOAD_DIR = store.NsdPackageFilesystemStore.DEFAULT_ROOT_DIR
+    MODULE_DESC = 'nsd rw-nsd'.split()
+    DESC_TYPE = 'nsd'
+    
+    def __init__(self, log, dts, loop):
+        super().__init__(log, dts, loop, self.on_change)
+        self.subscriber = mano_dts.NsdCatalogSubscriber(log, dts, loop)
+
+    def on_change(self, msg, action): 
+        log_msg = "1. Nsd called w/ msg attributes: {} id {} name {} action: {}".format(repr(msg), msg.id, msg.name, repr(action))
+        self.log.debug(log_msg)
+        if action == RwDts.QueryAction.UPDATE:
+            actionCreate(self, msg)
+        else:
+            self.log.debug("NsdStatusSubscriber: No action for ", action)
+            pass
+
+    def get_xpath(self): 
+        return self.subscriber.get_xpath() 
+
+
+def actionCreate(descriptor, msg): 
+    ''' Create folder structure if it doesn't exist: id/vnf name OR id/nsd name  
+    Serialize the Vnfd/Nsd object to yaml and store yaml file in the created folder.
+    '''
+
+    desc_name = msg.name if msg.name else ""
+    download_dir = os.path.join(descriptor.DOWNLOAD_DIR, msg.id, desc_name)
+    
+    if not os.path.exists(download_dir):
+        os.makedirs(download_dir)
+        descriptor.log.debug("Created directory {}".format(download_dir))
+
+        model = RwYang.Model.create_libncx()
+        for module in descriptor.MODULE_DESC: model.load_module(module)
+
+        yaml_path = "{base}/{name}_{type}.yaml".format(base=download_dir, name=msg.name, type=descriptor.DESC_TYPE) 
+        with open(yaml_path,"w") as fh:
+            fh.write(msg.to_yaml(model))
+
diff --git a/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang b/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang
index 8370c1b..de56e55 100644
--- a/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang
+++ b/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang
@@ -53,6 +53,13 @@
     prefix "manotypes";
   }
 
+  import rw-vnfd {
+    prefix "rwvnfd";
+  }
+  import rw-nsd {
+    prefix "rwnsd";
+  }
+
   revision 2016-06-01 {
     description
       "Initial revision.";
@@ -340,4 +347,4 @@
     }
   }
 
-}
\ No newline at end of file
+}
