diff --git a/common/clients.py b/common/clients.py
index 5a4dd5a..1ba3a21 100644
--- a/common/clients.py
+++ b/common/clients.py
@@ -20,10 +20,6 @@
 import novaclient.client
 import swiftclient
 
-import logging
-
-LOG = logging.getLogger(__name__)
-
 
 class ClientManager(object):
     """
diff --git a/common/config.py b/common/config.py
index 878cd33..158d087 100644
--- a/common/config.py
+++ b/common/config.py
@@ -103,6 +103,10 @@
     cfg.BoolOpt('skip_stack_abandon_tests',
                 default=False,
                 help="Skip Stack Abandon Integration tests"),
+    cfg.IntOpt('connectivity_timeout',
+               default=120,
+               help="Timeout in seconds to wait for connectivity to "
+                    "server."),
 ]
 
 
diff --git a/common/remote_client.py b/common/remote_client.py
index 5365ceb..2955418 100644
--- a/common/remote_client.py
+++ b/common/remote_client.py
@@ -11,12 +11,12 @@
 #    under the License.
 
 import cStringIO
-import logging
 import re
 import select
 import socket
 import time
 
+from oslo_log import log as logging
 import paramiko
 import six
 
diff --git a/common/test.py b/common/test.py
index 0ffa2b0..b2ce6d6 100644
--- a/common/test.py
+++ b/common/test.py
@@ -10,15 +10,16 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import logging
 import os
 import random
 import re
 import subprocess
 import time
+import urllib
 
 import fixtures
 from heatclient import exc as heat_exceptions
+from oslo_log import log as logging
 from oslo_utils import timeutils
 import six
 import testscenarios
@@ -107,12 +108,28 @@
 
         return linux_client
 
+    def check_connectivity(self, check_ip):
+        def try_connect(ip):
+            try:
+                urllib.urlopen('http://%s/' % ip)
+                return True
+            except IOError:
+                return False
+
+        timeout = self.conf.connectivity_timeout
+        elapsed_time = 0
+        while not try_connect(check_ip):
+            time.sleep(10)
+            elapsed_time += 10
+            if elapsed_time > timeout:
+                raise exceptions.TimeoutException()
+
     def _log_console_output(self, servers=None):
         if not servers:
             servers = self.compute_client.servers.list()
         for server in servers:
-            LOG.debug('Console output for %s', server.id)
-            LOG.debug(server.get_console_output())
+            LOG.info('Console output for %s', server.id)
+            LOG.info(server.get_console_output())
 
     def _load_template(self, base_file, file_name, sub_dir=None):
         sub_dir = sub_dir or ''
diff --git a/functional/test_autoscaling.py b/functional/test_autoscaling.py
index 60fa66f..d640915 100644
--- a/functional/test_autoscaling.py
+++ b/functional/test_autoscaling.py
@@ -12,8 +12,8 @@
 
 import copy
 import json
-import logging
 
+from oslo_log import log as logging
 from testtools import matchers
 
 from heat_integrationtests.common import test
diff --git a/functional/test_aws_stack.py b/functional/test_aws_stack.py
index 2e2cd9d..5aabe95 100644
--- a/functional/test_aws_stack.py
+++ b/functional/test_aws_stack.py
@@ -12,10 +12,10 @@
 
 import hashlib
 import json
-import logging
 import random
 import urlparse
 
+from oslo_log import log as logging
 from swiftclient import utils as swiftclient_utils
 import yaml
 
diff --git a/functional/test_instance_group.py b/functional/test_instance_group.py
index 3863df6..5c88bed 100644
--- a/functional/test_instance_group.py
+++ b/functional/test_instance_group.py
@@ -12,16 +12,12 @@
 
 import copy
 import json
-import logging
 
 from testtools import matchers
 
 from heat_integrationtests.common import test
 
 
-LOG = logging.getLogger(__name__)
-
-
 class InstanceGroupTest(test.HeatIntegrationTest):
 
     template = '''
diff --git a/functional/test_remote_stack.py b/functional/test_remote_stack.py
index 1b6f961..7579eb0 100644
--- a/functional/test_remote_stack.py
+++ b/functional/test_remote_stack.py
@@ -10,15 +10,12 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import logging
 
 from heatclient import exc
 import six
 
 from heat_integrationtests.common import test
 
-LOG = logging.getLogger(__name__)
-
 
 class RemoteStackTest(test.HeatIntegrationTest):
     template = '''
diff --git a/functional/test_template_resource.py b/functional/test_template_resource.py
index 85f5799..5893679 100644
--- a/functional/test_template_resource.py
+++ b/functional/test_template_resource.py
@@ -11,16 +11,12 @@
 #    under the License.
 
 import json
-import logging
 
 import yaml
 
 from heat_integrationtests.common import test
 
 
-LOG = logging.getLogger(__name__)
-
-
 class TemplateResourceTest(test.HeatIntegrationTest):
     """Prove that we can use the registry in a nested provider."""
 
diff --git a/functional/test_update.py b/functional/test_update.py
index ea436ad..3904311 100644
--- a/functional/test_update.py
+++ b/functional/test_update.py
@@ -10,14 +10,10 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import logging
 
 from heat_integrationtests.common import test
 
 
-LOG = logging.getLogger(__name__)
-
-
 class UpdateStackTest(test.HeatIntegrationTest):
 
     template = '''
diff --git a/functional/test_validation.py b/functional/test_validation.py
index 2d9669d..2df6356 100644
--- a/functional/test_validation.py
+++ b/functional/test_validation.py
@@ -10,14 +10,10 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import logging
 
 from heat_integrationtests.common import test
 
 
-LOG = logging.getLogger(__name__)
-
-
 class StackValidationTest(test.HeatIntegrationTest):
 
     def setUp(self):
diff --git a/scenario/templates/test_neutron_loadbalancer.yaml b/scenario/templates/test_neutron_loadbalancer.yaml
new file mode 100644
index 0000000..fad7db8
--- /dev/null
+++ b/scenario/templates/test_neutron_loadbalancer.yaml
@@ -0,0 +1,108 @@
+heat_template_version: 2014-10-16
+
+description: |
+  Template which tests neutron load balancing resources
+
+parameters:
+  key_name:
+    type: string
+  flavor:
+    type: string
+  image:
+    type: string
+  private_subnet_id:
+    type: string
+  external_network_id:
+    type: string
+  port:
+    type: string
+    default: '80'
+
+resources:
+  sec_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Add security group rules for servers
+      name: security-group
+      rules:
+        - remote_ip_prefix: 0.0.0.0/0
+          protocol: tcp
+          port_range_min: { get_param: port }
+          port_range_max: { get_param: port }
+        - remote_ip_prefix: 0.0.0.0/0
+          protocol: icmp
+
+  server1 :
+    type: OS::Nova::Server
+    properties:
+      name: Server1
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      security_groups: [{ get_resource: sec_group }]
+      user_data:
+        list_join:
+        - ''
+        - - '#!/bin/bash -v
+
+            '
+          - 'echo  $(hostname) > index.html
+
+            '
+          - 'python -m SimpleHTTPServer '
+          - { get_param: port }
+
+  server2 :
+    type: OS::Nova::Server
+    properties:
+      name: Server2
+      image: { get_param: image }
+      flavor: { get_param: flavor }
+      key_name: { get_param: key_name }
+      security_groups: [{ get_resource: sec_group }]
+      user_data:
+        list_join:
+        - ''
+        - - '#!/bin/bash -v
+
+            '
+          - 'echo  $(hostname) > index.html
+
+            '
+          - 'python -m SimpleHTTPServer '
+          - { get_param: port }
+
+  health_monitor:
+    type: OS::Neutron::HealthMonitor
+    properties:
+      delay: 3
+      type: HTTP
+      timeout: 3
+      max_retries: 3
+
+  test_pool:
+    type: OS::Neutron::Pool
+    properties:
+      lb_method: ROUND_ROBIN
+      protocol: HTTP
+      subnet: { get_param: private_subnet_id }
+      monitors:
+      - { get_resource: health_monitor }
+      vip:
+        protocol_port: { get_param: port }
+
+  floating_ip:
+     type: OS::Neutron::FloatingIP
+     properties:
+       floating_network: { get_param: external_network_id }
+       port_id:
+         { get_attr: [test_pool, vip, 'port_id'] }
+
+  LBaaS:
+    type: OS::Neutron::LoadBalancer
+    properties:
+      pool_id: { get_resource: test_pool }
+      protocol_port: { get_param: port }
+      members:
+      - { get_resource: server1 }
+
diff --git a/scenario/test_neutron_loadbalancer.py b/scenario/test_neutron_loadbalancer.py
new file mode 100644
index 0000000..bc2d77c
--- /dev/null
+++ b/scenario/test_neutron_loadbalancer.py
@@ -0,0 +1,118 @@
+#
+# Licensed 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.
+
+import time
+import urllib
+
+from heat_integrationtests.scenario import scenario_base
+
+
+class NeutronLoadBalancerTest(scenario_base.ScenarioTestsBase):
+    """
+    The class is responsible for testing of neutron resources balancer.
+    """
+
+    def setUp(self):
+        super(NeutronLoadBalancerTest, self).setUp()
+        self.public_net = self._get_network('public')
+        self.template_name = 'test_neutron_loadbalancer.yaml'
+
+    def collect_responses(self, ip, expected_resp):
+        resp = set()
+        for count in range(10):
+            time.sleep(1)
+            resp.add(urllib.urlopen('http://%s/' % ip).read())
+
+        self.assertEqual(expected_resp, resp)
+
+    def test_neutron_loadbalancer(self):
+        """
+        Check work of Neutron LBaaS resource in Heat.
+
+        The alternative scenario is the following:
+            1. Launch a stack with a load balancer, two servers,
+               but use only one as a LB member.
+            2. Check connection to the servers and LB.
+            3. Collect info about responces, which were received by LB from
+               its members (responces have to be received only from 'server1').
+            4. Update stack definition: include 'server2' into LBaaS.
+            5. Check that number of members in LB was increased and
+               responces were received from 'server1' and 'server2'.
+        """
+
+        parameters = {
+            'key_name': self.keypair_name,
+            'flavor': self.conf.instance_type,
+            'image': self.conf.image_ref,
+            'private_subnet_id': self.net['subnets'][0],
+            'external_network_id': self.public_net['id']
+        }
+
+        # Launch stack
+        sid = self.launch_stack(
+            template_name=self.template_name,
+            parameters=parameters
+        )
+
+        server1_id = self.client.resources.get(
+            sid, 'server1').physical_resource_id
+        server2_id = self.client.resources.get(
+            sid, 'server2').physical_resource_id
+        floating_ip_id = self.client.resources.get(
+            sid, 'floating_ip').physical_resource_id
+        floating_ip = self.network_client.show_floatingip(
+            floating_ip_id)['floatingip']['floating_ip_address']
+        pool_id = self.client.resources.get(
+            sid, 'test_pool').physical_resource_id
+        vip_id = self.network_client.show_pool(pool_id)['pool']['vip_id']
+
+        vip = self.network_client.show_vip(vip_id)['vip']['address']
+        server1_ip = self.compute_client.servers.get(
+            server1_id).networks['private'][0]
+        server2_ip = self.compute_client.servers.get(
+            server2_id).networks['private'][0]
+
+        # Check connection and info about received responces
+        self.check_connectivity(server1_ip)
+        self.collect_responses(server1_ip, {'server1\n'})
+
+        self.check_connectivity(server2_ip)
+        self.collect_responses(server2_ip, {'server2\n'})
+
+        self.check_connectivity(vip)
+        self.collect_responses(vip, {'server1\n'})
+
+        self.check_connectivity(floating_ip)
+        self.collect_responses(floating_ip, {'server1\n'})
+
+        # Include 'server2' to LB and update the stack
+        template = self._load_template(
+            __file__, self.template_name, self.sub_dir
+        )
+
+        template = template.replace(
+            '- { get_resource: server1 }',
+            '- { get_resource: server1 }\n      - { get_resource: server2 }\n'
+        )
+
+        self.update_stack(
+            sid,
+            template=template,
+            parameters=parameters
+        )
+
+        self.check_connectivity(vip)
+        self.collect_responses(vip, {'server1\n', 'server2\n'})
+
+        self.check_connectivity(floating_ip)
+        self.collect_responses(floating_ip, {'server1\n', 'server2\n'})
diff --git a/scenario/test_server_cfn_init.py b/scenario/test_server_cfn_init.py
index cf74bd8..a49606c 100644
--- a/scenario/test_server_cfn_init.py
+++ b/scenario/test_server_cfn_init.py
@@ -11,13 +11,10 @@
 #    under the License.
 
 import json
-import logging
 
 from heat_integrationtests.common import exceptions
 from heat_integrationtests.scenario import scenario_base
 
-LOG = logging.getLogger(__name__)
-
 
 class CfnInitIntegrationTest(scenario_base.ScenarioTestsBase):
     """
diff --git a/scenario/test_volumes.py b/scenario/test_volumes.py
index 1901b9c..9b12a9c 100644
--- a/scenario/test_volumes.py
+++ b/scenario/test_volumes.py
@@ -10,9 +10,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import logging
 
 from cinderclient import exceptions as cinder_exceptions
+from oslo_log import log as logging
 import six
 from testtools import testcase
 
