diff --git a/deploymentadmin/testbundles/bundle3/bnd.bnd b/deploymentadmin/testbundles/bundle3/bnd.bnd
new file mode 100644
index 0000000..55d93bc
--- /dev/null
+++ b/deploymentadmin/testbundles/bundle3/bnd.bnd
@@ -0,0 +1,5 @@
+Bundle-Version: 1.0.0
+Bundle-SymbolicName: testbundles.bundle3
+Bundle-Activator: org.apache.felix.deploymentadmin.test.bundle3.impl.Activator
+Private-Package: org.apache.felix.deploymentadmin.test.bundle3.impl
+
diff --git a/deploymentadmin/testbundles/bundle3/pom.xml b/deploymentadmin/testbundles/bundle3/pom.xml
new file mode 100644
index 0000000..6e0e675
--- /dev/null
+++ b/deploymentadmin/testbundles/bundle3/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	you 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. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.apache.felix</groupId>
+		<artifactId>org.apache.felix.deploymentadmin.testbundles</artifactId>
+		<version>1</version>
+		<relativePath>../pom.xml</relativePath>
+	</parent>
+	<name>Apache Felix DeploymentAdmin Test Bundle 3</name>
+	<version>1.0.0</version>
+	<artifactId>org.apache.felix.deploymentadmin.test.bundle3</artifactId>
+	<packaging>bundle</packaging>
+	<dependencies>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.core</artifactId>
+		</dependency>
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>2.3.4</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<_include>bnd.bnd</_include>
+					</instructions>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/deploymentadmin/testbundles/bundle3/src/main/java/org/apache/felix/deploymentadmin/test/bundle3/impl/Activator.java b/deploymentadmin/testbundles/bundle3/src/main/java/org/apache/felix/deploymentadmin/test/bundle3/impl/Activator.java
new file mode 100644
index 0000000..cbc3e80
--- /dev/null
+++ b/deploymentadmin/testbundles/bundle3/src/main/java/org/apache/felix/deploymentadmin/test/bundle3/impl/Activator.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.felix.deploymentadmin.test.bundle3.impl;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Throws an exception upon start or stop, depending on a system property.
+ */
+public class Activator implements BundleActivator {
+
+    public void start(BundleContext context) throws Exception {
+        checkMethodRuntimeFailure("start");
+    }
+
+    public void stop(BundleContext context) throws Exception {
+        checkMethodRuntimeFailure("stop");
+    }
+    
+    private void checkMethodRuntimeFailure(String methodName) {
+        if (shouldFail(methodName)) {
+            throw new RuntimeException(methodName + " fails forcedly!");
+        }
+    }
+    
+    private boolean shouldFail(String methodName) {
+        String value = System.getProperty("bundle3", "");
+        return methodName.equals(value);
+    }
+
+}
