diff --git a/systest/testcases/vim/test_vim.py b/systest/testcases/vim/test_vim.py
index d622753..2769fd0 100644
--- a/systest/testcases/vim/test_vim.py
+++ b/systest/testcases/vim/test_vim.py
@@ -30,37 +30,77 @@
     def cleanup_test_add_vim_account(self,osm,request):
         def teardown():
             try:
-                osm.get_api().vim.delete('pytest')
+                for vim in osm.get_api().vim.list(False):
+                    osm.get_api().vim.delete(vim['name'])
             except:
                 pass
         request.addfinalizer(teardown)
  
     @pytest.mark.openstack
+    @pytest.mark.smoke
     def test_add_vim_account(self,osm,openstack,cleanup_test_add_vim_account):
-        os_access=openstack.get_access()
-        assert not osm.get_api().vim.create('pytest',os_access)
+        os_access = {}
+        vim_name = 'helloworld-os'
+        os_access['vim-url'] = 'https://169.254.169.245/'
+        os_access['vim-username'] = 'pytest2'
+        os_access['vim-password'] = 'fred'
+        os_access['vim-tenant-name'] = 'pytest3'
+        os_access['vim-type'] = 'openstack'
+        os_access['description'] = 'a test vim'
+        assert not osm.get_api().vim.create(vim_name,os_access)
 
-        resp=osm.get_api().vim.get('pytest')
-        assert resp['name'] == 'pytest'
+        resp=osm.get_api().vim.get(vim_name)
+        assert resp['name'] == vim_name
         assert resp['type'] == 'openstack'
         assert resp['vim_url'] == os_access['vim-url']
         assert resp['vim_url_admin'] == os_access['vim-url']
         assert resp['vim_tenants'][0]['user'] == os_access['vim-username']
         assert resp['vim_tenants'][0]['vim_tenant_name'] == os_access['vim-tenant-name']
-
-        assert not osm.get_api().vim.delete('pytest')
+        assert not osm.get_api().vim.delete(vim_name)
 
     @pytest.mark.vmware
+    @pytest.mark.smoke
     def test_add_vim_account_vmware(self,osm,vmware,cleanup_test_add_vim_account):
-        os_access=vmware.get_access()
-        assert not osm.get_api().vim.create('pytest',os_access)
+        os_access = {}
+        vim_name = 'helloworld-vmware'
+        os_access['vim-url'] = 'https://169.254.169.245/'
+        os_access['vim-username'] = 'pytest2'
+        os_access['vim-password'] = 'fred'
+        os_access['vim-tenant-name'] = 'pytest3'
+        os_access['vim-type'] = 'vmware'
+        os_access['description'] = 'a test vim'
+        assert not osm.get_api().vim.create(vim_name,os_access)
 
-        resp=osm.get_api().vim.get('pytest')
-        assert resp['name'] == 'pytest'
+        resp=osm.get_api().vim.get(vim_name)
+        assert resp['name'] == vim_name
         assert resp['type'] == 'vmware'
         assert resp['vim_url'] == os_access['vim-url']
         assert resp['vim_url_admin'] == os_access['vim-url']
         assert resp['vim_tenants'][0]['user'] == os_access['vim-username']
         assert resp['vim_tenants'][0]['vim_tenant_name'] == os_access['vim-tenant-name']
 
-        assert not osm.get_api().vim.delete('pytest')
+        assert not osm.get_api().vim.delete(vim_name)
+
+    @pytest.mark.smoke
+    def test_add_multiple_accounts(self,osm,cleanup_test_add_vim_account):
+        os_access = {}
+        vims = [ {'name': 'testvim1', 'vim-type': 'openstack'}, {'name': 'testvim2','vim-type': 'vmware'} ]
+        os_access['vim-url'] = 'https://169.254.169.245/'
+        os_access['vim-username'] = 'pytest2'
+        os_access['vim-password'] = 'fred'
+        os_access['vim-tenant-name'] = 'pytest3'
+        os_access['description'] = 'a test vim'
+
+        for vim in vims:
+            os_access['vim-type'] = vim['vim-type']
+            assert not osm.get_api().vim.create(vim['name'],os_access)
+            resp=osm.get_api().vim.get(vim['name'])
+            assert resp['name'] == vim['name'] 
+            assert resp['type'] == vim['vim-type']
+            assert resp['vim_url'] == os_access['vim-url']
+            assert resp['vim_url_admin'] == os_access['vim-url']
+            assert resp['vim_tenants'][0]['user'] == os_access['vim-username']
+            assert resp['vim_tenants'][0]['vim_tenant_name'] == os_access['vim-tenant-name']
+
+        for vim in osm.get_api().vim.list(False):
+            osm.get_api().vim.delete(vim['name'])
