diff --git a/connectors/camel-bean-kafka-connector/pom.xml b/connectors/camel-bean-kafka-connector/pom.xml
deleted file mode 100644
index cc4e974..0000000
--- a/connectors/camel-bean-kafka-connector/pom.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.camel.kafkaconnector</groupId>
-    <artifactId>connectors</artifactId>
-    <version>0.6.0-SNAPSHOT</version>
-  </parent>
-  <artifactId>camel-bean-kafka-connector</artifactId>
-  <name>Camel-Kafka-Connector :: bean</name>
-  <description>Camel Kafka Connector for bean</description>
-  <dependencies>
-    <!-- Kafka -->
-    <dependency>
-      <groupId>org.apache.kafka</groupId>
-      <artifactId>connect-api</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.kafka</groupId>
-      <artifactId>connect-transforms</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <!-- Camel -->
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-bean</artifactId>
-    </dependency>
-    <!--START OF GENERATED CODE-->
-    <dependency>
-      <groupId>org.apache.camel.kafkaconnector</groupId>
-      <artifactId>camel-kafka-connector</artifactId>
-    </dependency>
-    <!--END OF GENERATED CODE-->
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>${version.maven.surefire.plugin}</version>
-        <configuration>
-          <failIfNoTests>false</failIfNoTests>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>${version.maven.jar}</version>
-        <configuration>
-          <archive>
-            <manifest>
-              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
-              <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
-            </manifest>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.5.1</version>
-        <inherited>true</inherited>
-        <configuration>
-          <source>1.8</source>
-          <target>1.8</target>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.5.3</version>
-        <configuration>
-          <descriptors>
-            <descriptor>src/main/assembly/package.xml</descriptor>
-          </descriptors>
-        </configuration>
-        <executions>
-          <execution>
-            <id>make-assembly</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <!--START OF GENERATED CODE-->
-  <repositories>
-    <!-- camel-jira -->
-    <repository>
-      <id>atlassian-public</id>
-      <url>https://packages.atlassian.com/maven-external</url>
-      <name>Atlassian Public Repo</name>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-    </repository>
-    <!-- camel-ipfs and camel-weka -->
-    <repository>
-      <id>jboss.thirdparty</id>
-      <name>JBoss Thirdparty Repository</name>
-      <url>https://repository.jboss.org/nexus/service/local/repositories/thirdparty-releases/content/</url>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-    </repository>
-  </repositories>
-  <!--END OF GENERATED CODE-->
-</project>
diff --git a/connectors/camel-bean-kafka-connector/src/main/assembly/package.xml b/connectors/camel-bean-kafka-connector/src/main/assembly/package.xml
deleted file mode 100644
index 4fd2529..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/assembly/package.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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.
-
--->
-<assembly>
-  <!-- Assembles a packaged version targeting OS installation. -->
-  <id>package</id>
-  <formats>
-    <format>zip</format>
-    <format>tar.gz</format>
-  </formats>
-  <includeBaseDirectory>false</includeBaseDirectory>
-  <fileSets>
-    <fileSet>
-      <directory>${project.basedir}/../..</directory>
-      <outputDirectory>${project.artifactId}/</outputDirectory>
-      <includes>
-        <include>README*</include>
-        <include>LICENSE*</include>
-        <include>NOTICE*</include>
-        <include>licenses/</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>${project.basedir}/src/main/docs</directory>
-      <outputDirectory>docs/</outputDirectory>
-      <includes>
-        <include>**/*</include>
-      </includes>
-    </fileSet>
-  </fileSets>
-  <dependencySets>
-    <dependencySet>
-      <outputDirectory>${project.artifactId}/</outputDirectory>
-      <useProjectArtifact>true</useProjectArtifact>
-      <useTransitiveFiltering>true</useTransitiveFiltering>
-      <excludes>
-        <exclude>org.apache.kafka:connect-api</exclude>
-      </excludes>
-    </dependencySet>
-  </dependencySets>
-</assembly>
diff --git a/connectors/camel-bean-kafka-connector/src/main/docs/camel-bean-kafka-sink-connector.adoc b/connectors/camel-bean-kafka-connector/src/main/docs/camel-bean-kafka-sink-connector.adoc
deleted file mode 100644
index 269ac8e..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/docs/camel-bean-kafka-sink-connector.adoc
+++ /dev/null
@@ -1,61 +0,0 @@
-// kafka-connector options: START
-[[camel-bean-kafka-connector-sink]]
-= camel-bean-kafka-connector sink configuration
-
-When using camel-bean-kafka-connector as sink make sure to use the following Maven dependency to have support for the connector:
-
-[source,xml]
-----
-<dependency>
-  <groupId>org.apache.camel.kafkaconnector</groupId>
-  <artifactId>camel-bean-kafka-connector</artifactId>
-  <version>x.x.x</version>
-  <!-- use the same version as your Camel Kafka connector version -->
-</dependency>
-----
-
-To use this Sink connector in Kafka connect you'll need to set the following connector.class
-
-[source,java]
-----
-connector.class=org.apache.camel.kafkaconnector.bean.CamelBeanSinkConnector
-----
-
-
-The camel-bean sink connector supports 12 options, which are listed below.
-
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Priority
-| *camel.sink.path.beanName* | Sets the name of the bean to invoke | null | HIGH
-| *camel.sink.endpoint.cache* | Use scope option instead. | null | LOW
-| *camel.sink.endpoint.method* | Sets the name of the method to invoke on the bean | null | MEDIUM
-| *camel.sink.endpoint.scope* | Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using prototype scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. so when using prototype then this depends on the delegated registry. One of: [Singleton] [Request] [Prototype] | "Singleton" | MEDIUM
-| *camel.sink.endpoint.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | MEDIUM
-| *camel.sink.endpoint.basicPropertyBinding* | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | MEDIUM
-| *camel.sink.endpoint.parameters* | Used for configuring additional properties on the bean | null | MEDIUM
-| *camel.sink.endpoint.synchronous* | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | MEDIUM
-| *camel.component.bean.cache* | Use singleton option instead. | "true" | LOW
-| *camel.component.bean.lazyStartProducer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | MEDIUM
-| *camel.component.bean.scope* | Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using delegate scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. so when using prototype then this depends on the delegated registry. One of: [Singleton] [Request] [Prototype] | "Singleton" | MEDIUM
-| *camel.component.bean.basicPropertyBinding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | MEDIUM
-|===
-
-
-
-The camel-bean sink connector has no converters out of the box.
-
-
-
-
-
-The camel-bean sink connector has no transforms out of the box.
-
-
-
-
-
-The camel-bean sink connector has no aggregation strategies out of the box.
-// kafka-connector options: END
diff --git a/connectors/camel-bean-kafka-connector/src/main/docs/examples/CamelBeanSinkConnector.properties b/connectors/camel-bean-kafka-connector/src/main/docs/examples/CamelBeanSinkConnector.properties
deleted file mode 100644
index ec74c6b..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/docs/examples/CamelBeanSinkConnector.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-## ---------------------------------------------------------------------------
-## 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.
-## ---------------------------------------------------------------------------
-
-name=CamelBeanSinkConnector
-connector.class=org.apache.camel.kafkaconnector.bean.CamelBeanSinkConnector
-tasks.max=1
-
-# use the kafka converters that better suit your needs, these are just defaults:
-key.converter=org.apache.kafka.connect.storage.StringConverter
-value.converter=org.apache.kafka.connect.storage.StringConverter
-
-# comma separated topics to get messages from
-topics=
-
-# mandatory properties (for a complete properties list see the connector documentation):
-
-# Sets the name of the bean to invoke
-camel.sink.path.beanName=
-
diff --git a/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkConnector.java b/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkConnector.java
deleted file mode 100644
index e70918b..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkConnector.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.camel.kafkaconnector.bean;
-
-import javax.annotation.Generated;
-import org.apache.camel.kafkaconnector.CamelSinkConnector;
-import org.apache.kafka.common.config.ConfigDef;
-import org.apache.kafka.connect.connector.Task;
-
-@Generated("This class has been generated by camel-kafka-connector-generator-maven-plugin, remove this annotation to prevent it from being generated.")
-public class CamelBeanSinkConnector extends CamelSinkConnector {
-
-    @Override
-    public ConfigDef config() {
-        return CamelBeanSinkConnectorConfig.conf();
-    }
-    @Override
-    public Class<? extends Task> taskClass() {
-        return CamelBeanSinkTask.class;
-    }
-}
\ No newline at end of file
diff --git a/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkConnectorConfig.java b/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkConnectorConfig.java
deleted file mode 100644
index 89dc056..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkConnectorConfig.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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.camel.kafkaconnector.bean;
-
-import java.util.Map;
-import javax.annotation.Generated;
-import org.apache.camel.kafkaconnector.CamelSinkConnectorConfig;
-import org.apache.kafka.common.config.ConfigDef;
-
-@Generated("This class has been generated by camel-kafka-connector-generator-maven-plugin, remove this annotation to prevent it from being generated.")
-public class CamelBeanSinkConnectorConfig extends CamelSinkConnectorConfig {
-
-    public static final String CAMEL_SINK_BEAN_PATH_BEAN_NAME_CONF = "camel.sink.path.beanName";
-    public static final String CAMEL_SINK_BEAN_PATH_BEAN_NAME_DOC = "Sets the name of the bean to invoke";
-    public static final String CAMEL_SINK_BEAN_PATH_BEAN_NAME_DEFAULT = null;
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_CACHE_CONF = "camel.sink.endpoint.cache";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_CACHE_DOC = "Use scope option instead.";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_CACHE_DEFAULT = null;
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_METHOD_CONF = "camel.sink.endpoint.method";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_METHOD_DOC = "Sets the name of the method to invoke on the bean";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_METHOD_DEFAULT = null;
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_SCOPE_CONF = "camel.sink.endpoint.scope";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_SCOPE_DOC = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using prototype scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. so when using prototype then this depends on the delegated registry. One of: [Singleton] [Request] [Prototype]";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_SCOPE_DEFAULT = "Singleton";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_LAZY_START_PRODUCER_CONF = "camel.sink.endpoint.lazyStartProducer";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_LAZY_START_PRODUCER_DOC = "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.";
-    public static final Boolean CAMEL_SINK_BEAN_ENDPOINT_LAZY_START_PRODUCER_DEFAULT = false;
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_BASIC_PROPERTY_BINDING_CONF = "camel.sink.endpoint.basicPropertyBinding";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_BASIC_PROPERTY_BINDING_DOC = "Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities";
-    public static final Boolean CAMEL_SINK_BEAN_ENDPOINT_BASIC_PROPERTY_BINDING_DEFAULT = false;
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_PARAMETERS_CONF = "camel.sink.endpoint.parameters";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_PARAMETERS_DOC = "Used for configuring additional properties on the bean";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_PARAMETERS_DEFAULT = null;
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_SYNCHRONOUS_CONF = "camel.sink.endpoint.synchronous";
-    public static final String CAMEL_SINK_BEAN_ENDPOINT_SYNCHRONOUS_DOC = "Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported).";
-    public static final Boolean CAMEL_SINK_BEAN_ENDPOINT_SYNCHRONOUS_DEFAULT = false;
-    public static final String CAMEL_SINK_BEAN_COMPONENT_CACHE_CONF = "camel.component.bean.cache";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_CACHE_DOC = "Use singleton option instead.";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_CACHE_DEFAULT = "true";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_LAZY_START_PRODUCER_CONF = "camel.component.bean.lazyStartProducer";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_LAZY_START_PRODUCER_DOC = "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.";
-    public static final Boolean CAMEL_SINK_BEAN_COMPONENT_LAZY_START_PRODUCER_DEFAULT = false;
-    public static final String CAMEL_SINK_BEAN_COMPONENT_SCOPE_CONF = "camel.component.bean.scope";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_SCOPE_DOC = "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing the request. The bean does not have to be thread-safe as the instance is only called from the same request. When using delegate scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope. so when using prototype then this depends on the delegated registry. One of: [Singleton] [Request] [Prototype]";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_SCOPE_DEFAULT = "Singleton";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_BASIC_PROPERTY_BINDING_CONF = "camel.component.bean.basicPropertyBinding";
-    public static final String CAMEL_SINK_BEAN_COMPONENT_BASIC_PROPERTY_BINDING_DOC = "Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities";
-    public static final Boolean CAMEL_SINK_BEAN_COMPONENT_BASIC_PROPERTY_BINDING_DEFAULT = false;
-
-    public CamelBeanSinkConnectorConfig(
-            ConfigDef config,
-            Map<String, String> parsedConfig) {
-        super(config, parsedConfig);
-    }
-
-    public CamelBeanSinkConnectorConfig(Map<String, String> parsedConfig) {
-        this(conf(), parsedConfig);
-    }
-
-    public static ConfigDef conf() {
-        ConfigDef conf = new ConfigDef(CamelSinkConnectorConfig.conf());
-        conf.define(CAMEL_SINK_BEAN_PATH_BEAN_NAME_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_PATH_BEAN_NAME_DEFAULT, ConfigDef.Importance.HIGH, CAMEL_SINK_BEAN_PATH_BEAN_NAME_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_CACHE_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_ENDPOINT_CACHE_DEFAULT, ConfigDef.Importance.LOW, CAMEL_SINK_BEAN_ENDPOINT_CACHE_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_METHOD_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_ENDPOINT_METHOD_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_ENDPOINT_METHOD_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_SCOPE_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_ENDPOINT_SCOPE_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_ENDPOINT_SCOPE_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_LAZY_START_PRODUCER_CONF, ConfigDef.Type.BOOLEAN, CAMEL_SINK_BEAN_ENDPOINT_LAZY_START_PRODUCER_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_ENDPOINT_LAZY_START_PRODUCER_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_BASIC_PROPERTY_BINDING_CONF, ConfigDef.Type.BOOLEAN, CAMEL_SINK_BEAN_ENDPOINT_BASIC_PROPERTY_BINDING_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_ENDPOINT_BASIC_PROPERTY_BINDING_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_PARAMETERS_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_ENDPOINT_PARAMETERS_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_ENDPOINT_PARAMETERS_DOC);
-        conf.define(CAMEL_SINK_BEAN_ENDPOINT_SYNCHRONOUS_CONF, ConfigDef.Type.BOOLEAN, CAMEL_SINK_BEAN_ENDPOINT_SYNCHRONOUS_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_ENDPOINT_SYNCHRONOUS_DOC);
-        conf.define(CAMEL_SINK_BEAN_COMPONENT_CACHE_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_COMPONENT_CACHE_DEFAULT, ConfigDef.Importance.LOW, CAMEL_SINK_BEAN_COMPONENT_CACHE_DOC);
-        conf.define(CAMEL_SINK_BEAN_COMPONENT_LAZY_START_PRODUCER_CONF, ConfigDef.Type.BOOLEAN, CAMEL_SINK_BEAN_COMPONENT_LAZY_START_PRODUCER_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_COMPONENT_LAZY_START_PRODUCER_DOC);
-        conf.define(CAMEL_SINK_BEAN_COMPONENT_SCOPE_CONF, ConfigDef.Type.STRING, CAMEL_SINK_BEAN_COMPONENT_SCOPE_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_COMPONENT_SCOPE_DOC);
-        conf.define(CAMEL_SINK_BEAN_COMPONENT_BASIC_PROPERTY_BINDING_CONF, ConfigDef.Type.BOOLEAN, CAMEL_SINK_BEAN_COMPONENT_BASIC_PROPERTY_BINDING_DEFAULT, ConfigDef.Importance.MEDIUM, CAMEL_SINK_BEAN_COMPONENT_BASIC_PROPERTY_BINDING_DOC);
-        return conf;
-    }
-}
\ No newline at end of file
diff --git a/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkTask.java b/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkTask.java
deleted file mode 100644
index 847a07e..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/java/org/apache/camel/kafkaconnector/bean/CamelBeanSinkTask.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.camel.kafkaconnector.bean;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.annotation.Generated;
-import org.apache.camel.kafkaconnector.CamelSinkConnectorConfig;
-import org.apache.camel.kafkaconnector.CamelSinkTask;
-
-@Generated("This class has been generated by camel-kafka-connector-generator-maven-plugin, remove this annotation to prevent it from being generated.")
-public class CamelBeanSinkTask extends CamelSinkTask {
-
-    @Override
-    protected CamelSinkConnectorConfig getCamelSinkConnectorConfig(
-            Map<String, String> props) {
-        return new CamelBeanSinkConnectorConfig(props);
-    }
-    @Override
-    protected Map<String, String> getDefaultConfig() {
-        return new HashMap<String, String>() {{
-            put(CamelSinkConnectorConfig.CAMEL_SINK_COMPONENT_CONF, "bean");
-        }};
-    }
-}
\ No newline at end of file
diff --git a/connectors/camel-bean-kafka-connector/src/main/resources/META-INF/LICENSE.txt b/connectors/camel-bean-kafka-connector/src/main/resources/META-INF/LICENSE.txt
deleted file mode 100644
index 6b0b127..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/resources/META-INF/LICENSE.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
diff --git a/connectors/camel-bean-kafka-connector/src/main/resources/META-INF/NOTICE.txt b/connectors/camel-bean-kafka-connector/src/main/resources/META-INF/NOTICE.txt
deleted file mode 100644
index 2e215bf..0000000
--- a/connectors/camel-bean-kafka-connector/src/main/resources/META-INF/NOTICE.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-   =========================================================================
-   ==  NOTICE file corresponding to the section 4 d of                    ==
-   ==  the Apache License, Version 2.0,                                   ==
-   ==  in this case for the Apache Camel distribution.                    ==
-   =========================================================================
-
-   This product includes software developed by
-   The Apache Software Foundation (http://www.apache.org/).
-
-   Please read the different LICENSE files present in the licenses directory of
-   this distribution.
diff --git a/connectors/pom.xml b/connectors/pom.xml
index 6ef200b..5f195fc 100644
--- a/connectors/pom.xml
+++ b/connectors/pom.xml
@@ -116,6 +116,7 @@
                         <param>aws2-kms</param>
                         <param>aws2-mq</param>
                         <param>aws2-msk</param>
+                        <param>bean</param>
                         <param>browse</param>
                         <param>class</param>
                         <param>dataset</param>
@@ -233,7 +234,6 @@
         <module>camel-azure-queue-kafka-connector</module>
         <module>camel-azure-storage-blob-kafka-connector</module>
         <module>camel-azure-storage-queue-kafka-connector</module>
-        <module>camel-bean-kafka-connector</module>
         <module>camel-bean-validator-kafka-connector</module>
         <module>camel-beanstalk-kafka-connector</module>
         <module>camel-box-kafka-connector</module>
