diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java
similarity index 98%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java
index b3670b6..b107027 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java
@@ -48,9 +48,7 @@
  * Integration tests for the {@link BundleState} implementation of {@link CustomBundleStateMBean} and {@link BundleStateMBean}
  *
  */
-public final class BundleStateTests extends AbstractOSGiMBeanTest{
-	
-	protected String mBeanObjectName = BundleStateMBean.OBJECTNAME;
+public final class BundleStateTest extends AbstractOSGiMBeanTest{
 	
 	private CompositeData bundleInfo;
 	private String location;
@@ -77,6 +75,10 @@
 	private Object[] keysArray;
 	private Bundle bundle;
 	
+	public BundleStateTest() {
+		super.mBeanObjectName = BundleStateMBean.OBJECTNAME;
+	}
+	
 	@Before
 	public void before(){
 		this.bundleInfo = null;
@@ -118,7 +120,7 @@
 		while (iter.hasNext()) {
 			key = iter.next();
 			keysArray = ((Collection<?>) key).toArray();
-			bundleInfo = (CompositeData) table.get(keysArray);
+			bundleInfo = table.get(keysArray);
 			symbolicName = (String) bundleInfo.get(BundleStateMBean.SYMBOLIC_NAME);
 			version = (String) bundleInfo.get(BundleStateMBean.VERSION);
 			bundle = bc.getBundle((Long) keysArray[0]);
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTest.java
similarity index 74%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTest.java
index ef12075..e291deb 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTest.java
@@ -11,13 +11,21 @@
 package org.eclipse.gemini.mgmt.framework;
 
 import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
+import org.junit.Test;
 
 /**
  * Integration tests for the {@link BundleWiringState} implementation of {@link CustomBundleWiringStateMBean}
  *
  */
-public final class BundleWiringStateTests extends AbstractOSGiMBeanTest {
+public final class BundleWiringStateTest extends AbstractOSGiMBeanTest {
 
-	protected String mBeanObjectName = CustomBundleWiringStateMBean.OBJECTNAME;
+	public BundleWiringStateTest() {
+		super.mBeanObjectName = CustomBundleWiringStateMBean.OBJECTNAME;
+	}
+	
+	@Test
+	public void somethingTest(){
+		
+	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTest.java
similarity index 77%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTest.java
index 0aae3e4..e15565b 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTest.java
@@ -11,14 +11,22 @@
 package org.eclipse.gemini.mgmt.framework;
 
 import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
+import org.junit.Test;
 import org.osgi.jmx.framework.FrameworkMBean;
 
 /**
  * Integration tests for the {@link Framework} implementation of {@link FrameworkMBean}
  *
  */
-public final class FrameworkTests extends AbstractOSGiMBeanTest {
-
-	protected String mBeanObjectName = FrameworkMBean.OBJECTNAME;
+public final class FrameworkTest extends AbstractOSGiMBeanTest {
+	
+	public FrameworkTest() {
+		super.mBeanObjectName = FrameworkMBean.OBJECTNAME;
+	}
+	
+	@Test
+	public void somethingTest(){
+		
+	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTest.java
similarity index 76%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTest.java
index 46615c7..7efce9d 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTest.java
@@ -11,14 +11,21 @@
 package org.eclipse.gemini.mgmt.framework;
 
 import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
+import org.junit.Test;
 import org.osgi.jmx.framework.PackageStateMBean;
 
 /**
  * Integration tests for the {@link PackageState} implementation {@link PackageStateMBean}
  *
  */
-public final class PackageStateTests extends AbstractOSGiMBeanTest {
-
-	protected String mBeanObjectName = PackageStateMBean.OBJECTNAME;
+public final class PackageStateTest extends AbstractOSGiMBeanTest {
 	
+	public PackageStateTest() {
+		super.mBeanObjectName = PackageStateMBean.OBJECTNAME;
+	}
+	
+	@Test
+	public void somethingTest(){
+		
+	}
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/ServiceStateTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/ServiceStateTest.java
new file mode 100644
index 0000000..0ac68b2
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/ServiceStateTest.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+package org.eclipse.gemini.mgmt.framework;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertArrayEquals;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularData;
+
+import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
+import org.osgi.jmx.framework.ServiceStateMBean;
+
+/**
+ * Integration tests for the {@link ServiceState} implementation of {@link CustomServiceStateMBean} and {@link ServiceStateMBean}
+ *
+ */
+public final class ServiceStateTest extends AbstractOSGiMBeanTest {
+
+	private CompositeData serviceInfo;
+	private Object key;
+	private Object[] keysArray;
+	private long providingBundle;
+	private long serviceId;
+	private Long[] usingBundles;
+	
+	public ServiceStateTest() {
+		super.mBeanObjectName = ServiceStateMBean.OBJECTNAME;
+	}
+	
+	@Before
+	public void before(){
+		this.serviceInfo = null;
+		this.key = null;
+		this.keysArray = null;
+		this.providingBundle = -1;
+		this.serviceId = -1;
+		this.usingBundles = null;
+	}
+	
+	@Test
+	public void listTest() throws Exception {
+		TabularData table = jmxInvokeBundleState("listServices", new Object[]{}, new String[]{});
+		Set<?> keys = table.keySet();
+		Iterator<?> iter = keys.iterator();
+		BundleContext bc = FrameworkUtil.getBundle(ServiceState.class).getBundleContext();
+		while (iter.hasNext()) {
+			key = iter.next();
+			keysArray = ((Collection<?>) key).toArray();
+			serviceInfo = table.get(keysArray);
+
+			this.providingBundle = (Long) serviceInfo.get(ServiceStateMBean.BUNDLE_IDENTIFIER);
+			this.serviceId = (Long) serviceInfo.get(ServiceStateMBean.IDENTIFIER);
+			this.usingBundles = (Long[]) serviceInfo.get(ServiceStateMBean.USING_BUNDLES);
+
+			ServiceReference<?> serviceReference = bc.getAllServiceReferences(null, "(" + Constants.SERVICE_ID + "=" + this.serviceId + ")")[0];
+			
+			assertEquals(providingBundle, serviceReference.getBundle().getBundleId());
+			assertEquals(serviceId, ((Long) serviceReference.getProperty(Constants.SERVICE_ID)).longValue());
+			Bundle[] usingBundles2 = serviceReference.getUsingBundles();
+			if(usingBundles2 == null){
+				assertEquals(0, this.usingBundles.length);
+			} else {
+				Long[] usingBundlesIds = new Long[usingBundles2.length];
+				for (int i = 0; i < usingBundles2.length; i++) {
+					usingBundlesIds[i] = usingBundles2[i].getBundleId();
+				}
+				assertArrayEquals(this.usingBundles, usingBundlesIds);
+			}
+		}
+	}
+	
+}
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/ServiceStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/ServiceStateTests.java
deleted file mode 100644
index 69c7420..0000000
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/ServiceStateTests.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-package org.eclipse.gemini.mgmt.framework;
-
-import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
-import org.osgi.jmx.framework.ServiceStateMBean;
-
-/**
- * Integration tests for the {@link ServiceState} implementation of {@link CustomServiceStateMBean} and {@link ServiceStateMBean}
- *
- */
-public final class ServiceStateTests extends AbstractOSGiMBeanTest {
-
-	protected String mBeanObjectName = ServiceStateMBean.OBJECTNAME;
-	
-}
diff --git a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java
index 9afe179..f57ba98 100644
--- a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java
+++ b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java
@@ -109,6 +109,9 @@
 	 */
 	public static long[] getBundlesUsing(ServiceReference<?> serviceRef) {
 		Bundle[] bundles = serviceRef.getUsingBundles();
+		if(bundles == null){
+			return new long[0];
+		}
 		long[] ids = new long[bundles.length];
 		for (int i = 0; i < bundles.length; i++) {
 			ids[i] = bundles[i].getBundleId();
