diff --git a/docs/source/basic-tools.rst b/docs/source/basic-tools.rst
index 484dd749d7b27fce12f7c67862643f73583ba452..b2231745850e976b0fa269d572da7555537fbe68 100644
--- a/docs/source/basic-tools.rst
+++ b/docs/source/basic-tools.rst
@@ -4,3 +4,5 @@ CLI Tools
 =========================
 
 .. automodule:: resource_management.cli
+
+.. automodule:: resource_management.hardware.router
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 05090e0d0cfd12aac0d06dc10e9c5cf42c0f7496..5d9e5bff6351b31301c8c17dc8b91ee601efbd76 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -11,7 +11,7 @@ Documentation for the NAT Resource Management tools
 ------------------
 
 Configuration file format
----------------------
+---------------------------------
 
 The following example indicates the schema for the configuration file required to call the Resource Management client::
 
diff --git a/resource_management/cli.py b/resource_management/cli.py
index f961d6a80893ddb3050b2efef4dd5ec3b67f2663..77dfadad3f43965f6875aced91d313410d73320d 100644
--- a/resource_management/cli.py
+++ b/resource_management/cli.py
@@ -29,7 +29,7 @@ to this schema:
 import json
 import click
 import logging
-from jsonschema.exceptions import ValidationError
+from jsonschema import validate, ValidationError
 
 import environment
 import config
@@ -38,7 +38,7 @@ from db import mysql_dsn
 from db import init_db_model
 from db import model
 from db import session_scope
-from hardware.router import junos_router
+from hardware.router import load_line_cards, LINE_CARDS_LIST_SCHEMA
 
 environment.setup_logging()
 logger = logging.getLogger(__name__)
@@ -81,14 +81,12 @@ def create(config, fqdn):
     """
 
     router_config = config["router"]
-    jr = junos_router(fqdn, router_config)
-    router = jr.load_router()
-    jr.close_device()
-    logger.info("Obtained the following hardware info about router: {0}"
-                .format(router))
+    line_cards = list(load_line_cards(fqdn, router_config))
+    # logger.info("Obtained the following hardware info about router: {0}"
+    #             .format(router))
 
     try:
-        junos_router_schema.validate(router)
+        validate(line_cards, LINE_CARDS_LIST_SCHEMA)
     except ValidationError as e:
         raise click.BadParameter(e.message)
 
diff --git a/resource_management/hardware/__init.py__ b/resource_management/hardware/__init__.py
similarity index 100%
rename from resource_management/hardware/__init.py__
rename to resource_management/hardware/__init__.py
diff --git a/resource_management/hardware/router.py b/resource_management/hardware/router.py
index 7cbd42f0fd6dc725e47070110c1116390f76f5ac..79f66f5764175de11e16380abff3c8b7c4c5027e 100644
--- a/resource_management/hardware/router.py
+++ b/resource_management/hardware/router.py
@@ -1,3 +1,13 @@
+"""
+
+router utilities
+===================
+
+.. contents:: :local:
+
+.. autofunction:: resource_management.hardware.router.load_line_cards
+
+"""
 import logging
 
 from jnpr.junos import Device
@@ -7,6 +17,50 @@ from jnpr.junos.op.phyport import PhyPortTable
 import contextlib
 
 
+LINE_CARDS_LIST_SCHEMA = {
+    '$schema': 'http://json-schema.org/draft-07/schema#',
+
+    'definitions': {
+        'node': {
+            'type': 'string'
+        },
+        'line-card': {
+            'type': 'array',
+            'items': {
+                'type': 'object',
+                'properties': {
+                    'model': {'type': 'string'},
+                    'position': {'type': 'integer', 'minimum': 0}
+                },
+                'required': ['model', 'position'],
+                'additionalProperties': False
+            }
+        },
+        'port': {
+            'type': 'array',
+            'items': {
+                'type': 'object',
+                'properties': {
+                    'name': {'type': 'string', 'pattern': '^[0-9]{1,2}\\/[0-9]{1,3}'},
+                    'speed': {'type': 'integer', 'minimum': 0},
+                    '_line_card_position': {'type': 'integer', 'minimum': 0}
+                },
+                'required': ['name', 'speed', '_line_card_position'],
+                'additionalProperties': False
+            }
+        }
+    },
+
+    'type': 'object',
+    'properties': {
+        'node': {'$ref': '#/definitions/node'},
+        'line_cards': {'$ref': '#/definitions/line-card'},
+        'ports': {'$ref': '#/definitions/port'}
+    },
+    'required': ['node', 'line_cards', 'ports'],
+    'additionalProperties': False
+}
+
 @contextlib.contextmanager
 def device(hostname, username, key_filename, port=830):
     dev = Device(
@@ -22,6 +76,21 @@ def device(hostname, username, key_filename, port=830):
 
 
 def load_line_cards(hostname, username, key_filename, port=830):
+    """
+     Loads all line cards from the given hostname
+
+     The response will be formatted according to the following schema:
+
+     .. asjson::
+        resource_management.hardware.router.load_line_cards.LINE_CARDS_LIST_SCHEMA
+
+     :param hostname: router hostname
+     :param username: router username
+     :param key_filename: ssh private key filename
+     :param port: netconf port
+     :return: yields elements of the LINE_CARDS_LIST_SCHEMA
+     """
+
     with device(
             hostname=hostname,
             port=port,