diff --git a/wally/start_vms.py b/wally/start_vms.py
index 1457da6..432594a 100644
--- a/wally/start_vms.py
+++ b/wally/start_vms.py
@@ -5,6 +5,7 @@
 import os.path
 import logging
 import subprocess
+import collections
 
 from concurrent.futures import ThreadPoolExecutor
 
@@ -28,50 +29,61 @@
     return NOVA_CONNECTION is not None
 
 
+OSCreds = collections.namedtuple("OSCreds",
+                                 ["name", "passwd",
+                                  "tenant", "auth_url", "insecure"])
+
+
 def ostack_get_creds():
     if STORED_OPENSTACK_CREDS is None:
-        env = os.environ.get
-        name = env('OS_USERNAME')
-        passwd = env('OS_PASSWORD')
-        tenant = env('OS_TENANT_NAME')
-        auth_url = env('OS_AUTH_URL')
-        return name, passwd, tenant, auth_url
+        return OSCreds(os.environ.get('OS_USERNAME'),
+                       os.environ.get('OS_PASSWORD'),
+                       os.environ.get('OS_TENANT_NAME'),
+                       os.environ.get('OS_AUTH_URL'),
+                       os.environ.get('OS_INSECURE', False))
     else:
         return STORED_OPENSTACK_CREDS
 
 
-def nova_connect(name=None, passwd=None, tenant=None, auth_url=None):
+def nova_connect(os_creds=None):
     global NOVA_CONNECTION
     global STORED_OPENSTACK_CREDS
 
     if NOVA_CONNECTION is None:
-        if name is None:
-            name, passwd, tenant, auth_url = ostack_get_creds()
+        if os_creds is None:
+            os_creds = ostack_get_creds()
         else:
-            STORED_OPENSTACK_CREDS = (name, passwd, tenant, auth_url)
+            STORED_OPENSTACK_CREDS = os_creds
 
-        NOVA_CONNECTION = n_client('1.1', name, passwd, tenant, auth_url)
+        NOVA_CONNECTION = n_client('1.1',
+                                   os_creds.name,
+                                   os_creds.passwd,
+                                   os_creds.tenant,
+                                   os_creds.auth_url,
+                                   insecure=os_creds.insecure)
     return NOVA_CONNECTION
 
 
-def cinder_connect(name=None, passwd=None, tenant=None, auth_url=None):
+def cinder_connect(os_creds=None):
     global CINDER_CONNECTION
     global STORED_OPENSTACK_CREDS
 
     if CINDER_CONNECTION is None:
-        if name is None:
-            name, passwd, tenant, auth_url = ostack_get_creds()
+        if os_creds is None:
+            os_creds = ostack_get_creds()
         else:
-            STORED_OPENSTACK_CREDS = (name, passwd, tenant, auth_url)
-        CINDER_CONNECTION = c_client(name, passwd, tenant, auth_url)
+            STORED_OPENSTACK_CREDS = os_creds
+        CINDER_CONNECTION = c_client(os_creds.name,
+                                     os_creds.passwd,
+                                     os_creds.tenant,
+                                     os_creds.auth_url,
+                                     insecure=os_creds.insecure)
     return CINDER_CONNECTION
 
 
-def prepare_os_subpr(nova, params, name=None,
-                     passwd=None, tenant=None,
-                     auth_url=None):
-    if name is None:
-        name, passwd, tenant, auth_url = ostack_get_creds()
+def prepare_os_subpr(nova, params, os_creds):
+    if os_creds is None:
+        os_creds = ostack_get_creds()
 
     MAX_VM_PER_NODE = 8
     serv_groups = " ".join(map(params['aa_group_name'].format,
@@ -81,10 +93,11 @@
     env = os.environ.copy()
 
     env.update(dict(
-        OS_USERNAME=name,
-        OS_PASSWORD=passwd,
-        OS_TENANT_NAME=tenant,
-        OS_AUTH_URL=auth_url,
+        OS_USERNAME=os_creds.name,
+        OS_PASSWORD=os_creds.passwd,
+        OS_TENANT_NAME=os_creds.tenant,
+        OS_AUTH_URL=os_creds.auth_url,
+        OS_INSECURE="1" if os_creds.insecure else "0",
 
         FLAVOR_NAME=params['flavor']['name'],
         FLAVOR_RAM=str(params['flavor']['ram_size']),
