diff --git a/deploy/crd-kamelet-binding.yaml b/deploy/crd-kamelet-binding.yaml
new file mode 100644
index 0000000..4366d36
--- /dev/null
+++ b/deploy/crd-kamelet-binding.yaml
@@ -0,0 +1,45 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+  name: kameletbindings.camel.apache.org
+  labels:
+    app: "camel-k"
+spec:
+  group: camel.apache.org
+  scope: Namespaced
+  version: v1alpha1
+  versions:
+  - name: v1alpha1
+    served: true
+    storage: true
+  subresources:
+    status: {}
+  names:
+    kind: KameletBinding
+    listKind: KameletBindingList
+    plural: kameletbindings
+    singular: kameletbinding
+    shortNames:
+    - klb
+  additionalPrinterColumns:
+  - name: Phase
+    type: string
+    description: The KameletBinding phase
+    JSONPath: .status.phase
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/builds.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.1.0/builds.camel.apache.org.crd.yaml
similarity index 100%
copy from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/builds.camel.apache.org.crd.yaml
copy to deploy/olm-catalog/camel-k-dev/1.1.0/builds.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camel-k.v1.1.0-snapshot.clusterserviceversion.yaml b/deploy/olm-catalog/camel-k-dev/1.1.0/camel-k.v1.1.0.clusterserviceversion.yaml
similarity index 98%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camel-k.v1.1.0-snapshot.clusterserviceversion.yaml
rename to deploy/olm-catalog/camel-k-dev/1.1.0/camel-k.v1.1.0.clusterserviceversion.yaml
index 4cc2a53..b0c1f48 100644
--- a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camel-k.v1.1.0-snapshot.clusterserviceversion.yaml
+++ b/deploy/olm-catalog/camel-k-dev/1.1.0/camel-k.v1.1.0.clusterserviceversion.yaml
@@ -84,14 +84,14 @@
     capabilities: Full Lifecycle
     categories: Integration & Delivery
     certified: "false"
-    containerImage: docker.io/apache/camel-k:1.1.0-SNAPSHOT
+    containerImage: docker.io/apache/camel-k:1.1.0
     createdAt: "2020-06-09T02:45:00Z"
     description: Apache Camel K is a lightweight integration platform, born on Kubernetes,
       with serverless superpowers.
     repository: https://github.com/apache/camel-k
     operators.operatorframework.io/internal-objects: '["builds.camel.apache.org","integrationkits.camel.apache.org","camelcatalogs.camel.apache.org"]'
     support: Camel
-  name: camel-k-operator.v1.1.0-snapshot
+  name: camel-k-operator.v1.1.0
   namespace: placeholder
 spec:
   apiservicedefinitions: {}
@@ -231,7 +231,7 @@
                   valueFrom:
                     fieldRef:
                       fieldPath: metadata.namespace
-                image: docker.io/apache/camel-k:1.1.0-SNAPSHOT
+                image: docker.io/apache/camel-k:1.1.0
                 imagePullPolicy: IfNotPresent
                 name: camel-k-operator
                 resources: {}
@@ -474,4 +474,4 @@
   selector:
     matchLabels:
       name: camel-k-operator
-  version: 1.1.0-snapshot
+  version: 1.1.0
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camelcatalogs.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.1.0/camelcatalogs.camel.apache.org.crd.yaml
similarity index 100%
copy from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camelcatalogs.camel.apache.org.crd.yaml
copy to deploy/olm-catalog/camel-k-dev/1.1.0/camelcatalogs.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationkits.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.1.0/integrationkits.camel.apache.org.crd.yaml
similarity index 100%
copy from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationkits.camel.apache.org.crd.yaml
copy to deploy/olm-catalog/camel-k-dev/1.1.0/integrationkits.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationplatforms.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.1.0/integrationplatforms.camel.apache.org.crd.yaml
similarity index 100%
copy from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationplatforms.camel.apache.org.crd.yaml
copy to deploy/olm-catalog/camel-k-dev/1.1.0/integrationplatforms.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrations.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.1.0/integrations.camel.apache.org.crd.yaml
similarity index 100%
copy from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrations.camel.apache.org.crd.yaml
copy to deploy/olm-catalog/camel-k-dev/1.1.0/integrations.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/builds.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/builds.camel.apache.org.crd.yaml
similarity index 100%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/builds.camel.apache.org.crd.yaml
rename to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/builds.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camel-k.v1.1.0-snapshot.clusterserviceversion.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/camel-k.v1.2.0-snapshot.clusterserviceversion.yaml
similarity index 85%
copy from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camel-k.v1.1.0-snapshot.clusterserviceversion.yaml
copy to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/camel-k.v1.2.0-snapshot.clusterserviceversion.yaml
index 4cc2a53..554812f 100644
--- a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camel-k.v1.1.0-snapshot.clusterserviceversion.yaml
+++ b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/camel-k.v1.2.0-snapshot.clusterserviceversion.yaml
@@ -80,20 +80,96 @@
           "name": "example"
         },
         "spec": {}
+      },
+      {
+        "apiVersion": "camel.apache.org/v1alpha1",
+        "kind": "Kamelet",
+        "metadata": {
+          "name": "example"
+        },
+        "spec": {
+          "definition": {
+            "description": "Produces periodic events with a custom payload",
+            "properties": {
+              "message": {
+                "description": "The message to generate",
+                "title": "Message",
+                "type": "string"
+              },
+              "period": {
+                "default": 1000,
+                "description": "The time interval between two events",
+                "title": "Period",
+                "type": "integer"
+              }
+            },
+            "required": [
+              "message"
+            ],
+            "title": "Example Timer"
+          },
+          "flow": {
+            "from": {
+              "parameters": {
+                "period": "#property:period"
+              },
+              "steps": [
+                {
+                  "set-body": {
+                    "constant": "#property:message"
+                  }
+                },
+                {
+                  "to": "direct:#property:routeId"
+                }
+              ],
+              "uri": "timer:tick"
+            }
+          }
+        }
+      },
+      {
+        "apiVersion": "camel.apache.org/v1alpha1",
+        "kind": "KameletBinding",
+        "metadata": {
+          "name": "example"
+        },
+        "spec": {
+          "source": {
+            "ref": {
+              "apiVersion": "camel.apache.org/v1alpha1",
+              "kind": "Kamelet",
+              "name": "example"
+            },
+            "properties": {
+              "message": "Hello world"
+            }
+          },
+          "sink": {
+            "ref": {
+              "apiVersion": "messaging.knative.dev/v1beta1",
+              "kind": "InMemoryChannel",
+              "name": "example"
+            }
+          }
+        }
       }]
     capabilities: Full Lifecycle
     categories: Integration & Delivery
     certified: "false"
-    containerImage: docker.io/apache/camel-k:1.1.0-SNAPSHOT
+    containerImage: docker.io/apache/camel-k:1.2.0-SNAPSHOT
     createdAt: "2020-06-09T02:45:00Z"
     description: Apache Camel K is a lightweight integration platform, born on Kubernetes,
       with serverless superpowers.
     repository: https://github.com/apache/camel-k
     operators.operatorframework.io/internal-objects: '["builds.camel.apache.org","integrationkits.camel.apache.org","camelcatalogs.camel.apache.org"]'
     support: Camel
-  name: camel-k-operator.v1.1.0-snapshot
+  name: camel-k-operator.v1.2.0-snapshot
   namespace: placeholder
 spec:
+  relatedImages:
+  - name: integration-base-image
+    image: adoptopenjdk/openjdk11:slim
   apiservicedefinitions: {}
   customresourcedefinitions:
     owned:
@@ -122,11 +198,16 @@
       kind: IntegrationPlatform
       name: integrationplatforms.camel.apache.org
       version: v1
-    - description: A Camel K Kamelet resource
+    - description: A Camel K connector
       displayName: Kamelet
       kind: Kamelet
       name: kamelets.camel.apache.org
       version: v1alpha1
+    - description: A Camel K connector binding resource
+      displayName: Kamelet Binding
+      kind: KameletBinding
+      name: kameletbindings.camel.apache.org
+      version: v1alpha1
   description: |
     Apache Camel K
     ==============
@@ -231,7 +312,7 @@
                   valueFrom:
                     fieldRef:
                       fieldPath: metadata.namespace
-                image: docker.io/apache/camel-k:1.1.0-SNAPSHOT
+                image: docker.io/apache/camel-k:1.2.0-SNAPSHOT
                 imagePullPolicy: IfNotPresent
                 name: camel-k-operator
                 resources: {}
@@ -470,8 +551,8 @@
   minKubeVersion: 1.11.0
   provider:
     name: The Apache Software Foundation
-  replaces: camel-k-operator.v1.0.0
+  replaces: camel-k-operator.v1.1.0
   selector:
     matchLabels:
       name: camel-k-operator
-  version: 1.1.0-snapshot
+  version: 1.2.0
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camelcatalogs.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/camelcatalogs.camel.apache.org.crd.yaml
similarity index 100%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/camelcatalogs.camel.apache.org.crd.yaml
rename to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/camelcatalogs.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationkits.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/integrationkits.camel.apache.org.crd.yaml
similarity index 100%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationkits.camel.apache.org.crd.yaml
rename to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/integrationkits.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationplatforms.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/integrationplatforms.camel.apache.org.crd.yaml
similarity index 100%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrationplatforms.camel.apache.org.crd.yaml
rename to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/integrationplatforms.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrations.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/integrations.camel.apache.org.crd.yaml
similarity index 100%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/integrations.camel.apache.org.crd.yaml
rename to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/integrations.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/kameletbindings.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/kameletbindings.camel.apache.org.crd.yaml
new file mode 100644
index 0000000..4366d36
--- /dev/null
+++ b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/kameletbindings.camel.apache.org.crd.yaml
@@ -0,0 +1,45 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+  name: kameletbindings.camel.apache.org
+  labels:
+    app: "camel-k"
+spec:
+  group: camel.apache.org
+  scope: Namespaced
+  version: v1alpha1
+  versions:
+  - name: v1alpha1
+    served: true
+    storage: true
+  subresources:
+    status: {}
+  names:
+    kind: KameletBinding
+    listKind: KameletBindingList
+    plural: kameletbindings
+    singular: kameletbinding
+    shortNames:
+    - klb
+  additionalPrinterColumns:
+  - name: Phase
+    type: string
+    description: The KameletBinding phase
+    JSONPath: .status.phase
diff --git a/deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/kamelets.camel.apache.org.crd.yaml b/deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/kamelets.camel.apache.org.crd.yaml
similarity index 100%
rename from deploy/olm-catalog/camel-k-dev/1.1.0-snapshot/kamelets.camel.apache.org.crd.yaml
rename to deploy/olm-catalog/camel-k-dev/1.2.0-snapshot/kamelets.camel.apache.org.crd.yaml
diff --git a/deploy/olm-catalog/camel-k-dev/camel-k-dev.package.yaml b/deploy/olm-catalog/camel-k-dev/camel-k-dev.package.yaml
index fec2def..38dc116 100644
--- a/deploy/olm-catalog/camel-k-dev/camel-k-dev.package.yaml
+++ b/deploy/olm-catalog/camel-k-dev/camel-k-dev.package.yaml
@@ -16,9 +16,7 @@
 # ---------------------------------------------------------------------------
 
 channels:
-- currentCSV: camel-k-operator.v1.1.0-snapshot
+- currentCSV: camel-k-operator.v1.2.0-snapshot
   name: stable
-- currentCSV: camel-k-operator.v1.0.0-rc2
-  name: alpha
 defaultChannel: stable
 packageName: camel-k-dev
diff --git a/deploy/olm-catalog/csv-config.yaml b/deploy/olm-catalog/csv-config.yaml
index a5e2dd2..6a5a21c 100644
--- a/deploy/olm-catalog/csv-config.yaml
+++ b/deploy/olm-catalog/csv-config.yaml
@@ -23,6 +23,7 @@
   - deploy/crd-integration-kit.yaml
   - deploy/crd-integration-platform.yaml
   - deploy/crd-kamelet.yaml
+  - deploy/crd-kamelet-binding.yaml
 role-paths:
   - deploy/operator-role-olm.yaml
   - deploy/operator-role-olm-cluster.yaml
diff --git a/deploy/resources.go b/deploy/resources.go
index 1a944c4..a07493e 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -144,8 +144,8 @@
 
 			compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3a\x4f\x8f\xe2\x38\xf6\xf7\x7c\x8a\xa7\xe2\xd0\x33\x52\x01\xbf\x9e\xb9\xfc\xc4\x9e\x58\xba\x4b\xcb\x76\x37\x55\x02\x7a\x46\x73\x34\xce\x23\x78\xcb\xb1\xb3\xb6\x03\x5d\xbb\xda\xef\xbe\x7a\x76\x12\x92\x90\x50\x14\xd5\xad\x95\x46\x95\x1b\xf1\xfb\xff\xdf\x2f\x0c\x60\xf8\xfd\x9e\x68\x00\x9f\x05\x47\x65\x31\x06\xa7\xc1\xed\x10\xa6\x19\xe3\x3b\x84\x95\xde\xba\x03\x33\x08\x77\x3a\x57\x31\x73\x42\x2b\xf8\x69\xba\xba\xfb\x19\x72\x15\xa3\x01\xad\x10\xb4\x81\x54\x1b\x8c\x06\xc0\xb5\x72\x46\x6c\x72\xa7\x0d\xc8\x40\x10\x58\x62\x10\x53\x54\xce\x8e\x00\x56\x88\x9e\xfa\xe2\x7e\x3d\x9f\x7d\x84\xad\x90\x08\xb1\xb0\x01\x09\x63\x38\x08\xb7\x8b\x06\xe0\x76\xc2\xc2\x41\x9b\x47\xd8\x6a\x03\x2c\x8e\x05\x31\x66\x12\x84\xda\x6a\x93\x06\x31\x0c\x26\xcc\xc4\x42\x25\xc0\x75\xf6\x64\x44\xb2\x73\xa0\x0f\x0a\x8d\xdd\x89\x6c\x14\x0d\x60\x4d\x6a\xac\xee\x4a\x49\x6c\x20\xeb\x79\x3a\x0d\x7f\xe8\xbc\xd0\xa1\xa6\x6e\x61\x85\x5b\xf8\x0d\x8d\x25\x26\xbf\x8c\xfe\x2f\x1a\xc0\x4f\x04\x72\x53\x1c\xde\xfc\xfc\x17\x78\xd2\x39\xa4\xec\x09\x94\x76\x90\x5b\xac\x51\xc6\x6f\x1c\x33\x07\x42\x01\xd7\x69\x26\x05\x53\x1c\x8f\x6a\x55\x1c\x46\xe0\x05\x20\x1a\x7a\xe3\x98\x50\xc0\xbc\x1a\xa0\xb7\x75\x30\x60\x2e\x1a\x44\x03\xf0\xcf\xce\xb9\x6c\x32\x1e\x1f\x0e\x87\x11\xf3\xe2\x8e\xb4\x49\xc6\xa5\x76\xe3\xcf\xf3\xd9\xc7\xc5\xea\xe3\xd0\x8b\x1c\x0d\xe0\xab\x92\x68\x2d\x18\xfc\x67\x2e\x0c\xc6\xb0\x79\x02\x96\x65\x52\x70\xb6\x91\x08\x92\x1d\xc8\x71\xde\x3b\xde\xe9\x42\xc1\xc1\x08\x27\x54\x72\x0b\xb6\xf0\x7a\x34\x68\x78\xe7\x68\xae\x52\x3c\x61\x1b\x00\x5a\x01\x53\x70\x33\x5d\xc1\x7c\x75\x03\x7f\x9d\xae\xe6\xab\xdb\x68\x00\xbf\xcf\xd7\x7f\xbb\xff\xba\x86\xdf\xa7\xcb\xe5\x74\xb1\x9e\x7f\x5c\xc1\xfd\x12\x66\xf7\x8b\x0f\xf3\xf5\xfc\x7e\xb1\x82\xfb\x3b\x98\x2e\xfe\x80\x4f\xf3\xc5\x87\x5b\x40\xe1\x76\x68\x00\xbf\x65\x86\xe4\xd7\x06\x04\x19\x12\x63\xf2\x69\x19\x40\xa5\x00\x14\x1f\xf4\xdb\x66\xc8\xc5\x56\x70\x90\x4c\x25\x39\x4b\x10\x12\xbd\x47\xa3\x28\x3c\x32\x34\xa9\xb0\xe4\x4e\x0b\x4c\xc5\xd1\x00\xa4\x48\x85\xf3\x51\x64\x4f\x95\x22\x36\xdf\x33\xb7\x22\x96\x89\x22\x9c\x26\xc0\x32\x81\xdf\x1c\x2a\x2f\xcd\xe8\xf1\xff\xed\x48\xe8\xf1\xfe\xfd\x06\x1d\x7b\x1f\x3d\x0a\x15\x4f\x60\x96\x5b\xa7\xd3\x25\x5a\x9d\x1b\x8e\x1f\x70\x2b\x94\x0f\xff\x28\x45\xc7\x62\xe6\xd8\x24\x02\x50\x2c\xc5\x09\x08\xe5\x30\x31\x41\x91\x11\x67\x29\xca\x5a\x64\x44\x00\x92\x6d\x50\x5a\x82\x07\xf2\xfd\x04\x6e\x3c\xd0\xf0\xf1\x26\x22\x83\xd1\xc1\x31\xb9\x1e\x0c\x91\x33\x33\x2d\xf3\x54\x15\x48\x43\xf8\xfb\xea\x7e\xf1\xc0\xdc\x6e\x02\x23\xeb\x98\xcb\xed\x28\xdb\x31\x8b\x51\x08\xc9\x18\x2d\x37\x22\x73\x5e\x37\xca\xb7\x9a\x44\x50\x07\x0c\xf2\x3e\xd4\xde\xb8\xa7\x0c\x27\x40\xb1\xa3\x92\x5e\x5e\x8f\xc2\x5d\xc2\xe9\x08\x16\xf8\x7c\xaa\x7e\x5f\xc4\xc5\xa0\x4f\x0b\xdb\xc7\x4a\xe5\xe9\x86\x6a\xdd\x16\x32\x1d\xdb\x06\xa7\x65\x13\x35\xb0\xf3\xa2\xa1\x89\x00\x12\xa3\xf3\x6c\x02\x1d\xae\x21\xf4\xc2\xc8\xc1\xed\xf3\xa3\x3e\xfe\xad\x14\xd6\x7d\x6a\x9f\x7c\x16\x36\x68\x96\xc9\xdc\x30\xd9\x8c\x00\x7f\x60\x77\xda\xb8\xc5\x91\x38\x69\x5c\x58\xc3\x0a\x95\xe4\x92\x99\x06\x96\x3f\xe1\xcc\x61\xa2\x8d\xa8\x23\x3d\x92\xcc\xd5\x2f\x5e\xfc\xb2\x5c\x93\x86\x9e\x41\xc6\x38\xc6\xf4\x2e\xdf\x98\x22\x5a\x0b\x7c\xcb\x99\xc4\x92\x94\x0f\xc2\x15\x4a\xe4\x4e\x9b\xa6\xe1\x6d\xf1\xb6\x80\xa4\x98\x2c\x0d\x5a\x02\x66\xc8\xdb\xfe\x09\xc8\x6d\xc0\x0e\x57\x86\x77\x13\xf8\xf7\x7f\x22\x80\x3d\x93\x22\x34\xb0\x20\x98\xce\x50\x4d\x1f\xe6\xbf\xfd\xba\xe2\x3b\x4c\xd9\xa4\xcb\xf9\x35\xcb\x53\xa9\xa3\x22\x11\xa0\xab\xba\x53\xb7\x3f\x4c\x1f\xe6\x05\x95\xcc\xe8\x0c\x8d\xab\x19\x94\x12\xb0\x2a\x03\xd5\xbb\x16\xbf\x77\x24\x50\xd1\x79\x62\x4a\x7c\x0c\x4c\xf7\xe1\x1d\xc6\x60\x03\x7b\xdf\x25\x04\x15\x77\x2a\x92\xa8\xdc\xd1\x97\xe5\xa3\xb7\x54\x8b\xf5\xe6\x1f\xc8\xdd\x08\x56\x68\x88\x08\x85\x47\x2e\x63\x6a\xd4\x7b\x34\x0e\x0c\x72\x9d\x28\xf1\xaf\x8a\xb2\x2d\xfb\xbf\x64\x0e\xad\x6b\x50\xf4\xe5\x81\xba\xf0\x9e\xc9\x1c\x6f\xa9\x96\xfa\x06\x66\x90\x78\x40\xae\x6a\xd4\x3c\x88\x1d\xc1\x17\x6d\xd0\x77\xed\x89\x6f\x5f\x76\x32\x1e\x27\xc2\x95\x85\x8f\xeb\x34\xcd\x95\x70\x4f\xe3\xda\xe4\x60\xc7\x31\xee\x51\x8e\xad\x48\x86\xcc\xf0\x9d\x70\xc8\x5d\x6e\x70\xcc\x32\x31\xf4\x82\xab\x50\xf0\xd2\x78\x50\xc5\xdd\xbb\x9a\xa4\x27\x39\x5f\x25\x59\xaf\xdd\x29\xd1\xc8\xc3\xac\x40\x0b\xf2\x1f\xcd\x4b\xaf\xc8\x2a\xcb\x8f\xab\x35\x94\x4c\xbd\x0b\x9a\x36\xf7\xd6\x3e\xa2\xd9\xa3\xe1\xc9\x50\x42\x6d\x7d\xab\xa1\x59\xc1\xe8\xd4\x53\x44\x15\x67\x5a\x28\xe7\x7f\x70\x29\x50\x35\x8d\x6e\xf3\x4d\x2a\x5c\x68\xe3\x68\x1d\xf9\x67\x04\x33\xa6\x68\xf2\xd8\x20\xe4\x59\xcc\x1c\xc6\x23\x98\x2b\x98\x51\x8e\xce\x18\x0d\x17\x3f\xd8\xec\x64\x61\x3b\x24\x93\x3e\x6f\xf8\x7a\xd7\x6a\x02\x06\x6b\x55\xaf\xcb\x8e\xd4\xe9\xa1\x5a\x26\xae\x32\xe4\x8d\xec\x88\xd1\xfa\x01\x87\xd2\x1d\x29\xee\xdb\xa5\xb4\x3f\x27\xe9\xe1\x5a\x6d\x45\x92\x9b\x5a\x6d\xa8\xc5\xbc\xc3\xd4\xb6\x5f\xb6\x64\x9b\xd5\x09\x78\xe9\x86\xc3\x13\x8c\x3e\xee\x35\x83\x74\xbc\xef\xb1\xe9\xf1\xf1\x71\x7a\x05\x66\x39\x15\x76\xa1\x0e\x3d\x6a\xe7\x81\x67\x77\x72\xd2\xe9\xce\xfa\x11\x33\x86\x3d\x35\x4e\x62\xcc\x50\xc5\xa8\x78\x87\x41\x7a\x6c\x7e\x46\x9f\x3e\x2e\x5b\xa9\x0f\x2f\x23\xff\x22\x25\x1e\x85\x6b\xd3\xe9\x15\x32\x33\x9a\xee\x07\x6d\xf8\xe6\xac\x61\x98\x70\x0f\x01\xb0\x56\x44\xfc\x28\x60\x7d\xcd\x27\x00\x0a\x7a\xe6\x80\x2e\x65\xa8\x68\x96\x8f\x4f\x74\x39\x99\x8a\x85\xb2\x8e\x49\xe9\x23\x74\xdc\xee\xfe\x17\x48\x5f\xb6\xd5\xb6\xf8\xe1\x36\xe6\x07\x8a\x5f\x7f\xe9\x24\x76\x9c\x85\x1a\xd4\xb4\x15\xae\x31\x70\x94\xcf\xf7\x73\x7e\x6b\x26\x79\x96\x45\xc3\x15\xe5\xf8\x7d\x5d\x3a\xd3\xd5\x8f\x2e\x2f\x1d\x05\xa5\x2e\xf3\x46\x6b\x89\xac\xed\x84\x40\x40\x39\x54\x27\xd1\xf5\xac\x2d\x6a\xb8\x9f\xf0\xe9\x35\xe8\x4b\xdc\x5e\x85\x9e\xea\x5c\x39\x3f\x93\x5d\x83\xed\x87\xea\x6b\x10\xfb\x0b\x68\xa7\x5b\xd7\x4f\x19\x76\xb9\xf5\x59\x4e\x57\x54\x09\x8b\x66\x2f\x38\x4e\x39\x27\xd3\x2c\x3a\x34\xec\xe5\xf8\x8a\x00\x5e\xbd\x85\xef\x35\xe8\x7e\xc6\xe5\x98\xd1\x40\x74\x41\x3c\xcd\x6b\xe0\xbe\x22\xeb\xac\xdc\x54\xc5\x34\x2f\x6d\x05\xcd\x7e\x54\x8a\xb5\x49\xca\x0b\x60\xb8\x0d\x3e\x8e\x96\x3a\x77\x68\x3f\x6b\x16\xb7\xea\xe3\xf1\xc9\xfd\xda\x4a\x43\x66\x70\x9c\x69\xeb\xc8\x71\x1c\xad\x2d\x23\xa3\x13\xad\x27\x3c\x2e\xd2\xbf\x3f\x8c\xc3\x53\xae\x57\x2e\xb0\xcd\xe7\x72\x13\x73\x4d\x9e\x01\x48\x6f\x97\x4b\xf8\x78\x40\x3f\xbd\xab\xba\xfd\xcb\x55\xda\x75\x96\xf7\x3d\xf6\x20\xa4\x0c\x21\x91\x19\x74\x61\x72\x2f\x66\x7f\xe6\xc0\xe4\xca\x89\xb4\x6b\x50\xfa\x51\x75\xee\x8a\xea\x13\x46\x86\x36\xaf\xfa\xd6\xa7\xbf\x12\x34\xcc\x3c\x0d\xe3\x89\xaf\x28\x94\x64\x4c\xa8\x10\xd9\x8d\xf9\xd9\x5f\x3b\x03\xd3\x17\x17\x9d\x33\x63\xf8\xb3\xea\x3f\x37\xd1\x36\xa8\xbf\xdc\xae\x27\x47\xdd\x37\x98\xb0\x6f\xb8\xe4\x0e\xe3\x21\x1b\xb7\x18\xbd\xa1\x46\xf1\x8a\x6b\x0c\xcb\xd8\x46\x48\xd1\x65\xdf\xef\x37\x54\x71\xad\x42\xe4\x5c\xd5\x94\x6a\x1a\xcd\x4a\x42\x05\xc4\xa6\x30\x43\xa5\x3d\xab\x06\xb8\x0e\x87\xd2\xfc\x0b\x1c\x8d\xdf\x9c\xfb\xfb\xf3\xe8\x85\xe1\x26\x99\x75\x6b\xc3\x94\xf5\x42\xac\x45\x5f\x3e\xb6\x4a\x9a\x75\x40\x39\x5f\x06\x7e\xa1\x82\xab\x08\x61\x1c\xae\xf6\x5a\x61\x11\x0e\x7d\xf5\x45\x03\x53\xda\xed\xd0\x9c\x4a\x0e\xb5\xc9\x9a\xae\xf7\xc3\x6b\xcb\x0c\x29\xf9\xd5\x6f\x08\x2e\x54\x70\xed\x37\x3f\x47\x25\x85\xad\x69\x79\x60\xb6\xda\x37\xfc\x38\x99\x53\xb4\xf6\xb2\x06\x33\x85\x5d\x9e\x32\x05\x06\x59\xec\xbf\x69\x14\xa8\x20\x54\x2c\x38\xf3\x4b\x9b\x18\x1d\x13\xd2\x02\xdb\xe8\xfc\xb4\x66\x14\x02\xed\xb0\xe6\xc1\x6e\xd5\x9e\x11\xda\x20\xb3\x7d\x55\xeb\xc4\xc0\x01\xb8\xba\xa4\x55\x06\x7e\x67\x0b\xdb\xbf\x4e\x96\xd3\x2a\xd4\x23\x4b\x51\x84\x8a\x36\x59\x89\x71\x1b\x3e\xea\x6d\x61\x6d\x72\xbc\x85\x3b\x26\x2d\xde\xc2\x57\xf5\xa8\xf4\xe1\x3a\x89\x2e\x1c\xce\xfd\x50\xae\xb7\x8d\xcd\x7e\x25\xd5\x15\x8c\xcf\x77\x84\xde\xec\xec\x59\x7f\x5c\xd1\x7b\xdf\x36\x4b\xad\xe7\xcf\xb3\x59\x8a\x45\x82\xf6\xf2\xed\xcf\x96\x09\x99\x9b\xf3\xdb\x9f\xbb\x00\x73\xea\xe2\x73\x0e\xee\x2f\x3c\xcf\x38\x89\xeb\x3d\x9a\xce\x2b\x56\x97\x50\xcb\x02\xbe\x7b\x96\x3f\x1f\x81\xd4\xad\x1d\xa6\x59\xcf\x75\xf0\xdc\xa2\xa8\x45\xe0\x0b\xfb\xf6\x6a\x1a\xfd\x8d\xf0\xd2\xfe\x75\x41\x33\xe8\xcf\x00\x0a\xf5\x42\x92\xf3\xa7\x5f\xd8\xb7\x5e\xa7\xf6\x4c\xc0\xae\x47\xb5\x4b\xd4\x3a\xa3\x52\xbf\x3a\xc3\x22\xfc\x3a\x0f\x42\xc0\x74\x1c\x75\x48\xd0\xab\x56\x82\x0a\x0d\x0d\x1c\xcb\xb7\x65\xde\xff\x60\x1b\xf2\xb6\xcc\x6b\xd7\xfd\x2a\x20\x57\x6f\xab\xb9\x2b\xd1\xdf\x56\x73\xd7\xb5\x95\xb7\xd5\x5c\x29\xdd\x9f\x64\x35\x27\xd2\x0e\x6f\xf5\x32\x79\xd1\xc7\xc6\x1d\xb3\xe7\x87\xcd\xda\x26\xc6\xff\x29\xeb\x34\x12\xfa\x89\x4b\xe6\x68\xa4\x78\xfb\xf4\x79\xcd\xa7\xcf\x10\x98\x0f\x46\xef\x45\x47\x0e\x35\xfb\x5b\x13\xf6\x05\x2e\x2a\xb8\x74\xfc\xdd\xe8\x2c\x5a\xf9\x77\xac\x8b\x11\xf6\x2f\x62\xd0\x91\x22\xad\x57\x25\x3d\xd8\xbf\x3f\xfe\xaa\xfe\x8a\x18\xfe\x71\xe7\x8f\xa0\xf8\xae\x86\xf1\x04\x9c\xa9\x2e\x8e\xd6\x69\x43\x39\x15\xde\xfd\x37\x00\x00\xff\xff\x81\xc4\xd3\x45\x23\x2d\x00\x00"),
 		},
-		"/crd-kamelet.yaml": &vfsgen۰CompressedFileInfo{
-			name:             "crd-kamelet.yaml",
+		"/kamelets.camel.apache.org.crd.yaml": &vfsgen۰CompressedFileInfo{
+			name:             "kamelets.camel.apache.org.crd.yaml",
 			modTime:          time.Time{},
 			uncompressedSize: 1498,
 
@@ -387,7 +387,7 @@
 		fs["/crd-integration-kit.yaml"].(os.FileInfo),
 		fs["/crd-integration-platform.yaml"].(os.FileInfo),
 		fs["/crd-integration.yaml"].(os.FileInfo),
-		fs["/crd-kamelet.yaml"].(os.FileInfo),
+		fs["/kamelets.camel.apache.org.crd.yaml"].(os.FileInfo),
 		fs["/operator-deployment.yaml"].(os.FileInfo),
 		fs["/operator-role-binding-events.yaml"].(os.FileInfo),
 		fs["/operator-role-binding-knative.yaml"].(os.FileInfo),
diff --git a/e2e/yaks/kamelets/kamelet.feature b/e2e/yaks/kamelets/kamelet.feature
index 3f9e170..edae8bc 100644
--- a/e2e/yaks/kamelets/kamelet.feature
+++ b/e2e/yaks/kamelets/kamelet.feature
@@ -1,5 +1,5 @@
-Feature: Camel K can run Kamelets
+Feature: Camel K can run Kamelets and bind them
 
-  Scenario: Running integration using a simple Kamelet
-    Given integration usage is running
-    Then integration usage should print Hello Kamelets
+  Scenario: Running integration using a simple Kamelet with KameletBinding
+    Given integration logger is running
+    Then integration logger should print Hello Kamelets
diff --git a/e2e/yaks/kamelets/usage.groovy b/e2e/yaks/kamelets/logger.groovy
similarity index 93%
rename from e2e/yaks/kamelets/usage.groovy
rename to e2e/yaks/kamelets/logger.groovy
index d4c5de8..a28afe3 100755
--- a/e2e/yaks/kamelets/usage.groovy
+++ b/e2e/yaks/kamelets/logger.groovy
@@ -17,5 +17,5 @@
  * limitations under the License.
  */
 
-from('kamelet:timer?message=Hello+Kamelets&period=1000')
+from('knative:channel/messages')
     .log('${body}')
diff --git a/e2e/yaks/kamelets/messages-channel.yaml b/e2e/yaks/kamelets/messages-channel.yaml
new file mode 100644
index 0000000..abd3483
--- /dev/null
+++ b/e2e/yaks/kamelets/messages-channel.yaml
@@ -0,0 +1,21 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+apiVersion: messaging.knative.dev/v1beta1
+kind: InMemoryChannel
+metadata:
+  name: messages
diff --git a/e2e/yaks/kamelets/timer-source.yaml b/e2e/yaks/kamelets/timer-source.yaml
new file mode 100644
index 0000000..35bfe52
--- /dev/null
+++ b/e2e/yaks/kamelets/timer-source.yaml
@@ -0,0 +1,18 @@
+apiVersion: camel.apache.org/v1alpha1
+kind: KameletBinding
+metadata:
+  name: timer-source
+spec:
+  source:
+    ref:
+      kind: Kamelet
+      apiVersion: camel.apache.org/v1alpha1
+      name: timer
+    properties:
+      message: Hello Kamelets
+      period: "1000"
+  sink:
+    ref:
+      kind: InMemoryChannel
+      apiVersion: messaging.knative.dev/v1beta1
+      name: messages
diff --git a/e2e/yaks/kamelets/yaks-config.yaml b/e2e/yaks/kamelets/yaks-config.yaml
index 1df07fc..947d1c1 100644
--- a/e2e/yaks/kamelets/yaks-config.yaml
+++ b/e2e/yaks/kamelets/yaks-config.yaml
@@ -23,6 +23,11 @@
   run: |
     kamel install -n $YAKS_NAMESPACE
 
+    kubectl apply -f messages-channel.yaml -n $YAKS_NAMESPACE
+
     kubectl apply -f timer.kamelet.yaml -n $YAKS_NAMESPACE
 
-    kamel run usage.groovy -w -n $YAKS_NAMESPACE
+    kubectl apply -f timer-source.yaml -n $YAKS_NAMESPACE
+    kubectl wait kameletbinding timer-source --for=condition=Ready --timeout=10m -n $YAKS_NAMESPACE
+
+    kamel run logger.groovy -w -n $YAKS_NAMESPACE
diff --git a/examples/kamelets/kamelet-binding-example.yaml b/examples/kamelets/kamelet-binding-example.yaml
new file mode 100644
index 0000000..7e3d95d
--- /dev/null
+++ b/examples/kamelets/kamelet-binding-example.yaml
@@ -0,0 +1,15 @@
+apiVersion: camel.apache.org/v1alpha1
+kind: KameletBinding
+metadata:
+  name: timer-source
+spec:
+  source:
+    ref:
+      kind: Kamelet
+      apiVersion: camel.apache.org/v1alpha1
+      name: timer
+  sink:
+    ref:
+      kind: InMemoryChannel
+      apiVersion: messaging.knative.dev/v1beta1
+      name: messages
diff --git a/examples/kamelets/messages-channel.yaml b/examples/kamelets/messages-channel.yaml
new file mode 100644
index 0000000..abd3483
--- /dev/null
+++ b/examples/kamelets/messages-channel.yaml
@@ -0,0 +1,21 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+apiVersion: messaging.knative.dev/v1beta1
+kind: InMemoryChannel
+metadata:
+  name: messages
diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml
new file mode 100644
index 0000000..4366d36
--- /dev/null
+++ b/helm/camel-k/crds/crd-kamelet-binding.yaml
@@ -0,0 +1,45 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+  name: kameletbindings.camel.apache.org
+  labels:
+    app: "camel-k"
+spec:
+  group: camel.apache.org
+  scope: Namespaced
+  version: v1alpha1
+  versions:
+  - name: v1alpha1
+    served: true
+    storage: true
+  subresources:
+    status: {}
+  names:
+    kind: KameletBinding
+    listKind: KameletBindingList
+    plural: kameletbindings
+    singular: kameletbinding
+    shortNames:
+    - klb
+  additionalPrinterColumns:
+  - name: Phase
+    type: string
+    description: The KameletBinding phase
+    JSONPath: .status.phase
diff --git a/pkg/apis/camel/v1alpha1/kamelet_binding_types.go b/pkg/apis/camel/v1alpha1/kamelet_binding_types.go
new file mode 100644
index 0000000..844f5f0
--- /dev/null
+++ b/pkg/apis/camel/v1alpha1/kamelet_binding_types.go
@@ -0,0 +1,115 @@
+/*
+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 v1alpha1
+
+import (
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// KameletBindingSpec --
+type KameletBindingSpec struct {
+	// Integration is an optional integration used to specify custom parameters
+	Integration *v1.IntegrationSpec `json:"integration,omitempty"`
+	// Source is the starting point of the integration defined by this binding
+	Source Endpoint `json:"source,omitempty"`
+	// Sink is the destination of the integration defined by this binding
+	Sink Endpoint `json:"sink,omitempty"`
+}
+
+// Endpoint represents a source/sink external entity
+type Endpoint struct {
+	// Ref can be used to declare a Kubernetes resource as source/sink endpoint
+	Ref *metav1.OwnerReference `json:"ref,omitempty"`
+	// URI can alternatively be used to specify the (Camel) endpoint explicitly
+	URI *string `json:"uri,omitempty"`
+	// Properties are a key value representation of endpoint properties
+	Properties map[string]string `json:"properties,omitempty"`
+}
+
+// KameletBindingStatus --
+type KameletBindingStatus struct {
+	// Phase --
+	Phase KameletBindingPhase `json:"phase,omitempty"`
+	// Conditions --
+	Conditions []KameletBindingCondition `json:"conditions,omitempty"`
+}
+
+// KameletBindingCondition describes the state of a resource at a certain point.
+type KameletBindingCondition struct {
+	// Type of kameletBinding condition.
+	Type KameletBindingConditionType `json:"type"`
+	// Status of the condition, one of True, False, Unknown.
+	Status corev1.ConditionStatus `json:"status"`
+	// The last time this condition was updated.
+	LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
+	// Last time the condition transitioned from one status to another.
+	LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
+	// The reason for the condition's last transition.
+	Reason string `json:"reason,omitempty"`
+	// A human readable message indicating details about the transition.
+	Message string `json:"message,omitempty"`
+}
+
+type KameletBindingConditionType string
+
+const (
+	// KameletBindingConditionReady --
+	KameletBindingConditionReady KameletBindingConditionType = "Ready"
+)
+
+type KameletBindingPhase string
+
+const (
+	// KameletKind --
+	KameletBindingKind string = "KameletBinding"
+
+	// KameletBindingPhaseNone --
+	KameletBindingPhaseNone KameletBindingPhase = ""
+	// KameletBindingPhaseCreating --
+	KameletBindingPhaseCreating KameletBindingPhase = "Creating"
+	// KameletBindingPhaseError --
+	KameletBindingPhaseError KameletBindingPhase = "Error"
+	// KameletBindingPhaseReady --
+	KameletBindingPhaseReady KameletBindingPhase = "Ready"
+)
+
+// KameletBinding is the Schema for the kamelets binding API
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +k8s:openapi-gen=true
+// +genclient
+// +kubebuilder:resource:path=kameletbindings,scope=Namespaced,shortName=klb,categories=kamel;camel
+// +kubebuilder:subresource:status
+// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase`,description="The Kamelet Binding phase"
+type KameletBinding struct {
+	metav1.TypeMeta   `json:",inline"`
+	metav1.ObjectMeta `json:"metadata,omitempty"`
+
+	Spec   KameletBindingSpec   `json:"spec,omitempty"`
+	Status KameletBindingStatus `json:"status,omitempty"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// KameletBindingList contains a list of KameletBinding
+type KameletBindingList struct {
+	metav1.TypeMeta `json:",inline"`
+	metav1.ListMeta `json:"metadata,omitempty"`
+	Items           []KameletBinding `json:"items"`
+}
diff --git a/pkg/apis/camel/v1alpha1/kamelet_binding_types_support.go b/pkg/apis/camel/v1alpha1/kamelet_binding_types_support.go
new file mode 100644
index 0000000..f630013
--- /dev/null
+++ b/pkg/apis/camel/v1alpha1/kamelet_binding_types_support.go
@@ -0,0 +1,162 @@
+/*
+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 v1alpha1
+
+import (
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// GetConditions --
+func (in *KameletBindingStatus) GetConditions() []v1.ResourceCondition {
+	res := make([]v1.ResourceCondition, 0, len(in.Conditions))
+	for _, c := range in.Conditions {
+		res = append(res, c)
+	}
+	return res
+}
+
+// GetType --
+func (c KameletBindingCondition) GetType() string {
+	return string(c.Type)
+}
+
+// GetStatus --
+func (c KameletBindingCondition) GetStatus() corev1.ConditionStatus {
+	return c.Status
+}
+
+// GetLastUpdateTime --
+func (c KameletBindingCondition) GetLastUpdateTime() metav1.Time {
+	return c.LastUpdateTime
+}
+
+// GetLastTransitionTime --
+func (c KameletBindingCondition) GetLastTransitionTime() metav1.Time {
+	return c.LastTransitionTime
+}
+
+// GetReason --
+func (c KameletBindingCondition) GetReason() string {
+	return c.Reason
+}
+
+// GetMessage --
+func (c KameletBindingCondition) GetMessage() string {
+	return c.Message
+}
+
+// GetCondition returns the condition with the provided type.
+func (in *KameletBindingStatus) GetCondition(condType KameletBindingConditionType) *KameletBindingCondition {
+	for i := range in.Conditions {
+		c := in.Conditions[i]
+		if c.Type == condType {
+			return &c
+		}
+	}
+	return nil
+}
+
+// SetCondition --
+func (in *KameletBindingStatus) SetCondition(condType KameletBindingConditionType, status corev1.ConditionStatus, reason string, message string) {
+	in.SetConditions(KameletBindingCondition{
+		Type:               condType,
+		Status:             status,
+		LastUpdateTime:     metav1.Now(),
+		LastTransitionTime: metav1.Now(),
+		Reason:             reason,
+		Message:            message,
+	})
+}
+
+// SetErrorCondition --
+func (in *KameletBindingStatus) SetErrorCondition(condType KameletBindingConditionType, reason string, err error) {
+	in.SetConditions(KameletBindingCondition{
+		Type:               condType,
+		Status:             corev1.ConditionFalse,
+		LastUpdateTime:     metav1.Now(),
+		LastTransitionTime: metav1.Now(),
+		Reason:             reason,
+		Message:            err.Error(),
+	})
+}
+
+// SetConditions updates the resource to include the provided conditions.
+//
+// If a condition that we are about to add already exists and has the same status and
+// reason then we are not going to update.
+func (in *KameletBindingStatus) SetConditions(conditions ...KameletBindingCondition) {
+	for _, condition := range conditions {
+		if condition.LastUpdateTime.IsZero() {
+			condition.LastUpdateTime = metav1.Now()
+		}
+		if condition.LastTransitionTime.IsZero() {
+			condition.LastTransitionTime = metav1.Now()
+		}
+
+		currentCond := in.GetCondition(condition.Type)
+
+		if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason {
+			return
+		}
+		// Do not update lastTransitionTime if the status of the condition doesn't change.
+		if currentCond != nil && currentCond.Status == condition.Status {
+			condition.LastTransitionTime = currentCond.LastTransitionTime
+		}
+
+		in.RemoveCondition(condition.Type)
+		in.Conditions = append(in.Conditions, condition)
+	}
+}
+
+// RemoveCondition removes the resource condition with the provided type.
+func (in *KameletBindingStatus) RemoveCondition(condType KameletBindingConditionType) {
+	newConditions := in.Conditions[:0]
+	for _, c := range in.Conditions {
+		if c.Type != condType {
+			newConditions = append(newConditions, c)
+		}
+	}
+
+	in.Conditions = newConditions
+}
+
+// NewKameletBinding --
+func NewKameletBinding(namespace string, name string) KameletBinding {
+	return KameletBinding{
+		TypeMeta: metav1.TypeMeta{
+			APIVersion: SchemeGroupVersion.String(),
+			Kind:       KameletBindingKind,
+		},
+		ObjectMeta: metav1.ObjectMeta{
+			Namespace: namespace,
+			Name:      name,
+		},
+	}
+}
+
+// NewKameletBindingList --
+func NewKameletBindingList() KameletBindingList {
+	return KameletBindingList{
+		TypeMeta: metav1.TypeMeta{
+			APIVersion: SchemeGroupVersion.String(),
+			Kind:       KameletBindingKind,
+		},
+	}
+}
diff --git a/pkg/apis/camel/v1alpha1/kamelet_types_support.go b/pkg/apis/camel/v1alpha1/kamelet_types_support.go
index b4f25c1..9a9fcfd 100644
--- a/pkg/apis/camel/v1alpha1/kamelet_types_support.go
+++ b/pkg/apis/camel/v1alpha1/kamelet_types_support.go
@@ -61,3 +61,78 @@
 func (c KameletCondition) GetMessage() string {
 	return c.Message
 }
+
+// GetCondition returns the condition with the provided type.
+func (in *KameletStatus) GetCondition(condType KameletConditionType) *KameletCondition {
+	for i := range in.Conditions {
+		c := in.Conditions[i]
+		if c.Type == condType {
+			return &c
+		}
+	}
+	return nil
+}
+
+// SetCondition --
+func (in *KameletStatus) SetCondition(condType KameletConditionType, status corev1.ConditionStatus, reason string, message string) {
+	in.SetConditions(KameletCondition{
+		Type:               condType,
+		Status:             status,
+		LastUpdateTime:     metav1.Now(),
+		LastTransitionTime: metav1.Now(),
+		Reason:             reason,
+		Message:            message,
+	})
+}
+
+// SetErrorCondition --
+func (in *KameletStatus) SetErrorCondition(condType KameletConditionType, reason string, err error) {
+	in.SetConditions(KameletCondition{
+		Type:               condType,
+		Status:             corev1.ConditionFalse,
+		LastUpdateTime:     metav1.Now(),
+		LastTransitionTime: metav1.Now(),
+		Reason:             reason,
+		Message:            err.Error(),
+	})
+}
+
+// SetConditions updates the resource to include the provided conditions.
+//
+// If a condition that we are about to add already exists and has the same status and
+// reason then we are not going to update.
+func (in *KameletStatus) SetConditions(conditions ...KameletCondition) {
+	for _, condition := range conditions {
+		if condition.LastUpdateTime.IsZero() {
+			condition.LastUpdateTime = metav1.Now()
+		}
+		if condition.LastTransitionTime.IsZero() {
+			condition.LastTransitionTime = metav1.Now()
+		}
+
+		currentCond := in.GetCondition(condition.Type)
+
+		if currentCond != nil && currentCond.Status == condition.Status && currentCond.Reason == condition.Reason {
+			return
+		}
+		// Do not update lastTransitionTime if the status of the condition doesn't change.
+		if currentCond != nil && currentCond.Status == condition.Status {
+			condition.LastTransitionTime = currentCond.LastTransitionTime
+		}
+
+		in.RemoveCondition(condition.Type)
+		in.Conditions = append(in.Conditions, condition)
+	}
+}
+
+// RemoveCondition removes the resource condition with the provided type.
+func (in *KameletStatus) RemoveCondition(condType KameletConditionType) {
+	newConditions := in.Conditions[:0]
+	for _, c := range in.Conditions {
+		if c.Type != condType {
+			newConditions = append(newConditions, c)
+		}
+	}
+
+	in.Conditions = newConditions
+}
diff --git a/pkg/apis/camel/v1alpha1/register.go b/pkg/apis/camel/v1alpha1/register.go
index 5bafade..5ae4530 100644
--- a/pkg/apis/camel/v1alpha1/register.go
+++ b/pkg/apis/camel/v1alpha1/register.go
@@ -49,6 +49,8 @@
 	scheme.AddKnownTypes(SchemeGroupVersion,
 		&Kamelet{},
 		&KameletList{},
+		&KameletBinding{},
+		&KameletBindingList{},
 	)
 	metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
 	return nil
diff --git a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
index 2014759..32596ba 100644
--- a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
@@ -7,7 +7,8 @@
 import (
 	json "encoding/json"
 
-	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 )
 
@@ -28,6 +29,39 @@
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Endpoint) DeepCopyInto(out *Endpoint) {
+	*out = *in
+	if in.Ref != nil {
+		in, out := &in.Ref, &out.Ref
+		*out = new(v1.OwnerReference)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.URI != nil {
+		in, out := &in.URI, &out.URI
+		*out = new(string)
+		**out = **in
+	}
+	if in.Properties != nil {
+		in, out := &in.Properties, &out.Properties
+		*out = make(map[string]string, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Endpoint.
+func (in *Endpoint) DeepCopy() *Endpoint {
+	if in == nil {
+		return nil
+	}
+	out := new(Endpoint)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *EventTypeSpec) DeepCopyInto(out *EventTypeSpec) {
 	*out = *in
 	if in.Schema != nil {
@@ -431,6 +465,131 @@
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KameletBinding) DeepCopyInto(out *KameletBinding) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KameletBinding.
+func (in *KameletBinding) DeepCopy() *KameletBinding {
+	if in == nil {
+		return nil
+	}
+	out := new(KameletBinding)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *KameletBinding) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KameletBindingCondition) DeepCopyInto(out *KameletBindingCondition) {
+	*out = *in
+	in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime)
+	in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KameletBindingCondition.
+func (in *KameletBindingCondition) DeepCopy() *KameletBindingCondition {
+	if in == nil {
+		return nil
+	}
+	out := new(KameletBindingCondition)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KameletBindingList) DeepCopyInto(out *KameletBindingList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]KameletBinding, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KameletBindingList.
+func (in *KameletBindingList) DeepCopy() *KameletBindingList {
+	if in == nil {
+		return nil
+	}
+	out := new(KameletBindingList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *KameletBindingList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KameletBindingSpec) DeepCopyInto(out *KameletBindingSpec) {
+	*out = *in
+	if in.Integration != nil {
+		in, out := &in.Integration, &out.Integration
+		*out = new(camelv1.IntegrationSpec)
+		(*in).DeepCopyInto(*out)
+	}
+	in.Source.DeepCopyInto(&out.Source)
+	in.Sink.DeepCopyInto(&out.Sink)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KameletBindingSpec.
+func (in *KameletBindingSpec) DeepCopy() *KameletBindingSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(KameletBindingSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *KameletBindingStatus) DeepCopyInto(out *KameletBindingStatus) {
+	*out = *in
+	if in.Conditions != nil {
+		in, out := &in.Conditions, &out.Conditions
+		*out = make([]KameletBindingCondition, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KameletBindingStatus.
+func (in *KameletBindingStatus) DeepCopy() *KameletBindingStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(KameletBindingStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *KameletCondition) DeepCopyInto(out *KameletCondition) {
 	*out = *in
 	in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime)
@@ -503,14 +662,14 @@
 	in.Definition.DeepCopyInto(&out.Definition)
 	if in.Sources != nil {
 		in, out := &in.Sources, &out.Sources
-		*out = make([]v1.SourceSpec, len(*in))
+		*out = make([]camelv1.SourceSpec, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
 	}
 	if in.Flow != nil {
 		in, out := &in.Flow, &out.Flow
-		*out = new(v1.Flow)
+		*out = new(camelv1.Flow)
 		(*in).DeepCopyInto(*out)
 	}
 	out.Authorization = in.Authorization
diff --git a/pkg/cmd/reset.go b/pkg/cmd/reset.go
index e45f174..f6fa6f6 100644
--- a/pkg/cmd/reset.go
+++ b/pkg/cmd/reset.go
@@ -20,13 +20,12 @@
 import (
 	"fmt"
 
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/apache/camel-k/pkg/client"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
-
 	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
-
-	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
-	"github.com/apache/camel-k/pkg/client"
 )
 
 func newCmdReset(rootCmdOptions *RootCmdOptions) (*cobra.Command, *resetCmdOptions) {
@@ -49,8 +48,9 @@
 
 type resetCmdOptions struct {
 	*RootCmdOptions
-	SkipKits         bool `mapstructure:"skip-kits"`
-	SkipIntegrations bool `mapstructure:"skip-integrations"`
+	SkipKits            bool `mapstructure:"skip-kits"`
+	SkipIntegrations    bool `mapstructure:"skip-integrations"`
+	SkipKameletBindings bool `mapstructure:"skip-kamelet-bindings"`
 }
 
 func (o *resetCmdOptions) reset(_ *cobra.Command, _ []string) {
@@ -74,7 +74,15 @@
 			fmt.Print(err)
 			return
 		}
-		fmt.Printf("%d integration Kits deleted from namespace %s\n", n, o.Namespace)
+		fmt.Printf("%d integration kits deleted from namespace %s\n", n, o.Namespace)
+	}
+
+	if !o.SkipKameletBindings {
+		if n, err = o.deleteAllKameletBindings(c); err != nil {
+			fmt.Print(err)
+			return
+		}
+		fmt.Printf("%d kamelet bindings deleted from namespace %s\n", n, o.Namespace)
 	}
 
 	if err = o.resetIntegrationPlatform(c); err != nil {
@@ -113,6 +121,20 @@
 	return len(list.Items), nil
 }
 
+func (o *resetCmdOptions) deleteAllKameletBindings(c client.Client) (int, error) {
+	list := v1alpha1.NewKameletBindingList()
+	if err := c.List(o.Context, &list, k8sclient.InNamespace(o.Namespace)); err != nil {
+		return 0, errors.Wrap(err, fmt.Sprintf("could not retrieve kamelet bindings from namespace %s", o.Namespace))
+	}
+	for _, i := range list.Items {
+		klb := i
+		if err := c.Delete(o.Context, &klb); err != nil {
+			return 0, errors.Wrap(err, fmt.Sprintf("could not delete kamelet binding %s from namespace %s", klb.Name, klb.Namespace))
+		}
+	}
+	return len(list.Items), nil
+}
+
 func (o *resetCmdOptions) resetIntegrationPlatform(c client.Client) error {
 	list := v1.NewIntegrationPlatformList()
 	if err := c.List(o.Context, &list, k8sclient.InNamespace(o.Namespace)); err != nil {
diff --git a/pkg/controller/add_kameletbinding.go b/pkg/controller/add_kameletbinding.go
new file mode 100644
index 0000000..480c4df
--- /dev/null
+++ b/pkg/controller/add_kameletbinding.go
@@ -0,0 +1,26 @@
+/*
+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 controller
+
+import (
+	"github.com/apache/camel-k/pkg/controller/kameletbinding"
+)
+
+func init() {
+	// AddToManagerFuncs is a list of functions to create controllers and add them to a manager.
+	AddToManagerFuncs = append(AddToManagerFuncs, kameletbinding.Add)
+}
diff --git a/pkg/controller/kamelet/common.go b/pkg/controller/kamelet/common.go
index d95b27a..8b75ffd 100644
--- a/pkg/controller/kamelet/common.go
+++ b/pkg/controller/kamelet/common.go
@@ -7,11 +7,18 @@
 
 	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
 	"github.com/pkg/errors"
+	corev1 "k8s.io/api/core/v1"
 )
 
 func updateStatus(kamelet *v1alpha1.Kamelet) (*v1alpha1.Kamelet, error) {
 	target := kamelet.DeepCopy()
 	target.Status.Phase = v1alpha1.KameletPhaseReady
+	target.Status.SetCondition(
+		v1alpha1.KameletConditionReady,
+		corev1.ConditionTrue,
+		"",
+		"",
+	)
 	if err := recomputeProperties(target); err != nil {
 		return nil, err
 	}
diff --git a/pkg/controller/kameletbinding/action.go b/pkg/controller/kameletbinding/action.go
new file mode 100644
index 0000000..b0688c0
--- /dev/null
+++ b/pkg/controller/kameletbinding/action.go
@@ -0,0 +1,54 @@
+/*
+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 kameletbinding
+
+import (
+	"context"
+
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/apache/camel-k/pkg/client"
+	"github.com/apache/camel-k/pkg/util/log"
+)
+
+// Action --
+type Action interface {
+	client.Injectable
+	log.Injectable
+
+	// a user friendly name for the action
+	Name() string
+
+	// returns true if the action can handle the kameletBinding
+	CanHandle(kamelet *v1alpha1.KameletBinding) bool
+
+	// executes the handling function
+	Handle(ctx context.Context, kamelet *v1alpha1.KameletBinding) (*v1alpha1.KameletBinding, error)
+}
+
+type baseAction struct {
+	client client.Client
+	L      log.Logger
+}
+
+func (action *baseAction) InjectClient(client client.Client) {
+	action.client = client
+}
+
+func (action *baseAction) InjectLogger(log log.Logger) {
+	action.L = log
+}
diff --git a/pkg/controller/kameletbinding/initialize.go b/pkg/controller/kameletbinding/initialize.go
new file mode 100644
index 0000000..dd43839
--- /dev/null
+++ b/pkg/controller/kameletbinding/initialize.go
@@ -0,0 +1,154 @@
+/*
+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 kameletbinding
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"net/url"
+	"strings"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/apache/camel-k/pkg/util/kubernetes"
+	"github.com/apache/camel-k/pkg/util/uri"
+	"github.com/pkg/errors"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// NewInitializeAction returns a action that initializes the kamelet binding configuration when not provided by the user
+func NewInitializeAction() Action {
+	return &initializeAction{}
+}
+
+type initializeAction struct {
+	baseAction
+}
+
+func (action *initializeAction) Name() string {
+	return "initialize"
+}
+
+func (action *initializeAction) CanHandle(kameletbinding *v1alpha1.KameletBinding) bool {
+	return kameletbinding.Status.Phase == v1alpha1.KameletBindingPhaseNone
+}
+
+func (action *initializeAction) Handle(ctx context.Context, kameletbinding *v1alpha1.KameletBinding) (*v1alpha1.KameletBinding, error) {
+	it := v1.Integration{
+		ObjectMeta: metav1.ObjectMeta{
+			Namespace: kameletbinding.Namespace,
+			Name:      kameletbinding.Name,
+		},
+	}
+	// start from the integration spec defined in the binding
+	if kameletbinding.Spec.Integration != nil {
+		it.Spec = *kameletbinding.Spec.Integration.DeepCopy()
+	}
+
+	fromURI, err := getEndpointURI(kameletbinding.Spec.Source)
+	if err != nil {
+		return nil, errors.Wrap(err, "could not determine source URI")
+	}
+	toURI, err := getEndpointURI(kameletbinding.Spec.Sink)
+	if err != nil {
+		return nil, errors.Wrap(err, "could not determine sink URI")
+	}
+
+	// TODO remove this after making sinkbinding the default (https://github.com/apache/camel-k/issues/1654)
+	if strings.HasPrefix(toURI, "knative:") {
+		knativeConfig := map[string]interface{}{
+			"sinkBinding": true,
+		}
+		knativeConfigJSON, err := json.Marshal(knativeConfig)
+		if err != nil {
+			return nil, err
+		}
+		if it.Spec.Traits == nil {
+			it.Spec.Traits = make(map[string]v1.TraitSpec)
+		}
+		it.Spec.Traits["knative"] = v1.TraitSpec{
+			Configuration: v1.TraitConfiguration{
+				RawMessage: knativeConfigJSON,
+			},
+		}
+	}
+
+	flow := map[string]interface{}{
+		"from": map[string]interface{}{
+			"uri": fromURI,
+			"steps": []map[string]interface{}{
+				{
+					"to": toURI,
+				},
+			},
+		},
+	}
+	encodedFlow, err := json.Marshal(flow)
+	if err != nil {
+		return nil, err
+	}
+	it.Spec.Flows = append(it.Spec.Flows, v1.Flow{RawMessage: encodedFlow})
+
+	if err := kubernetes.ReplaceResource(ctx, action.client, &it); err != nil {
+		return nil, errors.Wrap(err, "could not create integration for kamelet binding")
+	}
+
+	target := kameletbinding.DeepCopy()
+	target.Status.Phase = v1alpha1.KameletBindingPhaseCreating
+	return target, nil
+}
+
+func getEndpointURI(e v1alpha1.Endpoint) (string, error) {
+	baseURI, err := getEndpointBaseURI(e)
+	if err != nil {
+		return baseURI, err
+	}
+	return uri.AppendParameters(baseURI, e.Properties), nil
+}
+
+func getEndpointBaseURI(e v1alpha1.Endpoint) (string, error) {
+	if err := validateEndpoint(e); err != nil {
+		return "", err
+	}
+
+	// return the URI if explicitly stated
+	if e.URI != nil {
+		return *e.URI, nil
+	}
+
+	// Kamelets are a known type
+	if e.Ref.Kind == v1alpha1.KameletKind {
+		return fmt.Sprintf("kamelet:%s", url.PathEscape(e.Ref.Name)), nil
+	}
+
+	// assume we're using Knative for the time being (Kafka resources may be added in the future)
+	return uri.AppendParameters(fmt.Sprintf("knative:endpoint/%s", url.PathEscape(e.Ref.Name)), map[string]string{
+		"apiVersion": e.Ref.APIVersion,
+		"kind":       e.Ref.Kind,
+	}), nil
+}
+
+func validateEndpoint(e v1alpha1.Endpoint) error {
+	if e.Ref == nil && e.URI == nil {
+		return errors.New("no ref or URI specified in endpoint")
+	} else if e.Ref != nil && e.URI != nil {
+		return errors.New("cannot use both ref and URI to specify an endpoint: only one of them should be used")
+	}
+	return nil
+}
diff --git a/pkg/controller/kameletbinding/kamelet_binding_controller.go b/pkg/controller/kameletbinding/kamelet_binding_controller.go
new file mode 100644
index 0000000..459c69c
--- /dev/null
+++ b/pkg/controller/kameletbinding/kamelet_binding_controller.go
@@ -0,0 +1,186 @@
+/*
+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 kameletbinding
+
+import (
+	"context"
+	"time"
+
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/apache/camel-k/pkg/client"
+	camelevent "github.com/apache/camel-k/pkg/event"
+	"k8s.io/apimachinery/pkg/api/errors"
+	"k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/client-go/tools/record"
+	k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
+	"sigs.k8s.io/controller-runtime/pkg/controller"
+	"sigs.k8s.io/controller-runtime/pkg/event"
+	"sigs.k8s.io/controller-runtime/pkg/handler"
+	"sigs.k8s.io/controller-runtime/pkg/manager"
+	"sigs.k8s.io/controller-runtime/pkg/predicate"
+	"sigs.k8s.io/controller-runtime/pkg/reconcile"
+	"sigs.k8s.io/controller-runtime/pkg/source"
+)
+
+// Add creates a new KameletBinding Controller and adds it to the Manager. The Manager will set fields on the Controller
+// and Start it when the Manager is Started.
+func Add(mgr manager.Manager) error {
+	c, err := client.FromManager(mgr)
+	if err != nil {
+		return err
+	}
+	return add(mgr, newReconciler(mgr, c))
+}
+
+// newReconciler returns a new reconcile.Reconciler
+func newReconciler(mgr manager.Manager, c client.Client) reconcile.Reconciler {
+	return &ReconcileKameletBinding{
+		client:   c,
+		scheme:   mgr.GetScheme(),
+		recorder: mgr.GetEventRecorderFor("camel-k-kamelet-binding-controller"),
+	}
+}
+
+// add adds a new Controller to mgr with r as the reconcile.Reconciler
+func add(mgr manager.Manager, r reconcile.Reconciler) error {
+	// Create a new controller
+	c, err := controller.New("kamelet-binding-controller", mgr, controller.Options{Reconciler: r})
+	if err != nil {
+		return err
+	}
+
+	// Watch for changes to primary resource KameletBinding
+	err = c.Watch(&source.Kind{Type: &v1alpha1.KameletBinding{}}, &handler.EnqueueRequestForObject{}, predicate.Funcs{
+		UpdateFunc: func(e event.UpdateEvent) bool {
+			oldKameletBinding := e.ObjectOld.(*v1alpha1.KameletBinding)
+			newKameletBinding := e.ObjectNew.(*v1alpha1.KameletBinding)
+			// Ignore updates to the kameletBinding status in which case metadata.Generation
+			// does not change, or except when the kameletBinding phase changes as it's used
+			// to transition from one phase to another
+			return oldKameletBinding.Generation != newKameletBinding.Generation ||
+				oldKameletBinding.Status.Phase != newKameletBinding.Status.Phase
+		},
+		DeleteFunc: func(e event.DeleteEvent) bool {
+			// Evaluates to false if the object has been confirmed deleted
+			return !e.DeleteStateUnknown
+		},
+	})
+	if err != nil {
+		return err
+	}
+
+	return nil
+}
+
+var _ reconcile.Reconciler = &ReconcileKameletBinding{}
+
+// ReconcileKameletBinding reconciles a KameletBinding object
+type ReconcileKameletBinding struct {
+	// This client, initialized using mgr.Client() above, is a split client
+	// that reads objects from the cache and writes to the apiserver
+	client   client.Client
+	scheme   *runtime.Scheme
+	recorder record.EventRecorder
+}
+
+// Reconcile reads that state of the cluster for a KameletBinding object and makes changes based
+// on the state read and what is in the KameletBinding.Spec
+// Note:
+// The Controller will requeue the Request to be processed again if the returned error is non-nil or
+// Result.Requeue is true, otherwise upon completion it will remove the work from the queue.
+func (r *ReconcileKameletBinding) Reconcile(request reconcile.Request) (reconcile.Result, error) {
+	rlog := Log.WithValues("request-namespace", request.Namespace, "request-name", request.Name)
+	rlog.Info("Reconciling KameletBinding")
+
+	ctx := context.TODO()
+
+	// Fetch the KameletBinding instance
+	var instance v1alpha1.KameletBinding
+
+	if err := r.client.Get(ctx, request.NamespacedName, &instance); err != nil {
+		if errors.IsNotFound(err) {
+			// Request object not found, could have been deleted after reconcile request.
+			// Owned objects are automatically garbage collected. For additional cleanup
+			// logic use finalizers.
+
+			// Return and don't requeue
+			return reconcile.Result{}, nil
+		}
+		// Error reading the object - requeue the request.
+		return reconcile.Result{}, err
+	}
+
+	actions := []Action{
+		NewInitializeAction(),
+		NewMonitorAction(),
+	}
+
+	var targetPhase v1alpha1.KameletBindingPhase
+	var err error
+
+	target := instance.DeepCopy()
+	targetLog := rlog.ForKameletBinding(target)
+
+	for _, a := range actions {
+		a.InjectClient(r.client)
+		a.InjectLogger(targetLog)
+
+		if a.CanHandle(target) {
+			targetLog.Infof("Invoking action %s", a.Name())
+
+			phaseFrom := target.Status.Phase
+
+			target, err = a.Handle(ctx, target)
+			if err != nil {
+				camelevent.NotifyKameletBindingError(ctx, r.client, r.recorder, &instance, target, err)
+				return reconcile.Result{}, err
+			}
+
+			if target != nil {
+				if err := r.client.Status().Patch(ctx, target, k8sclient.MergeFrom(&instance)); err != nil {
+					camelevent.NotifyKameletBindingError(ctx, r.client, r.recorder, &instance, target, err)
+					return reconcile.Result{}, err
+				}
+
+				targetPhase = target.Status.Phase
+
+				if targetPhase != phaseFrom {
+					targetLog.Info(
+						"state transition",
+						"phase-from", phaseFrom,
+						"phase-to", target.Status.Phase,
+					)
+				}
+			}
+
+			// handle one action at time so the resource
+			// is always at its latest state
+			camelevent.NotifyKameletBindingUpdated(ctx, r.client, r.recorder, &instance, target)
+			break
+		}
+	}
+
+	if targetPhase == v1alpha1.KameletBindingPhaseReady {
+		return reconcile.Result{}, nil
+	}
+
+	// Requeue
+	return reconcile.Result{
+		RequeueAfter: 5 * time.Second,
+	}, nil
+}
diff --git a/pkg/controller/kameletbinding/log.go b/pkg/controller/kameletbinding/log.go
new file mode 100644
index 0000000..0162b6d
--- /dev/null
+++ b/pkg/controller/kameletbinding/log.go
@@ -0,0 +1,23 @@
+/*
+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 kameletbinding
+
+import "github.com/apache/camel-k/pkg/util/log"
+
+// Log --
+var Log = log.Log.WithName("controller").WithName("kameletbinding")
diff --git a/pkg/controller/kameletbinding/monitor.go b/pkg/controller/kameletbinding/monitor.go
new file mode 100644
index 0000000..9980dc5
--- /dev/null
+++ b/pkg/controller/kameletbinding/monitor.go
@@ -0,0 +1,87 @@
+/*
+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 kameletbinding
+
+import (
+	"context"
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/pkg/errors"
+	corev1 "k8s.io/api/core/v1"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+)
+
+// NewMonitorAction returns an action that monitors the kamelet binding after it's fully initialized
+func NewMonitorAction() Action {
+	return &monitorAction{}
+}
+
+type monitorAction struct {
+	baseAction
+}
+
+func (action *monitorAction) Name() string {
+	return "monitor"
+}
+
+func (action *monitorAction) CanHandle(kameletbinding *v1alpha1.KameletBinding) bool {
+	return kameletbinding.Status.Phase == v1alpha1.KameletBindingPhaseCreating ||
+		kameletbinding.Status.Phase == v1alpha1.KameletBindingPhaseError ||
+		kameletbinding.Status.Phase == v1alpha1.KameletBindingPhaseReady
+}
+
+func (action *monitorAction) Handle(ctx context.Context, kameletbinding *v1alpha1.KameletBinding) (*v1alpha1.KameletBinding, error) {
+	key := client.ObjectKey{
+		Namespace: kameletbinding.Namespace,
+		Name:      kameletbinding.Name,
+	}
+	it := v1.Integration{}
+	if err := action.client.Get(ctx, key, &it); err != nil {
+		return nil, errors.Wrapf(err, "could not load integration for KameletBinding %q", kameletbinding.Name)
+	}
+
+	// Map integration phases to KameletBinding phases
+	target := kameletbinding.DeepCopy()
+	if it.Status.Phase == v1.IntegrationPhaseRunning {
+		target.Status.Phase = v1alpha1.KameletBindingPhaseReady
+		target.Status.SetCondition(
+			v1alpha1.KameletBindingConditionReady,
+			corev1.ConditionTrue,
+			"",
+			"",
+		)
+	} else if it.Status.Phase == v1.IntegrationPhaseError {
+		target.Status.Phase = v1alpha1.KameletBindingPhaseError
+		target.Status.SetCondition(
+			v1alpha1.KameletBindingConditionReady,
+			corev1.ConditionFalse,
+			string(target.Status.Phase),
+			"",
+		)
+	} else {
+		target.Status.Phase = v1alpha1.KameletBindingPhaseCreating
+		target.Status.SetCondition(
+			v1alpha1.KameletBindingConditionReady,
+			corev1.ConditionFalse,
+			string(target.Status.Phase),
+			"",
+		)
+	}
+	return target, nil
+}
diff --git a/pkg/event/manager.go b/pkg/event/manager.go
index a2b2eb8..6278ba8 100644
--- a/pkg/event/manager.go
+++ b/pkg/event/manager.go
@@ -68,6 +68,13 @@
 	// ReasonKameletPhaseUpdated --
 	ReasonKameletPhaseUpdated = "KameletPhaseUpdated"
 
+	// ReasonKameletBindingError --
+	ReasonKameletBindingError = "KameletBindingError"
+	// ReasonKameletBindingConditionChanged --
+	ReasonKameletBindingConditionChanged = "KameletBindingConditionChanged"
+	// ReasonKameletBindingPhaseUpdated --
+	ReasonKameletBindingPhaseUpdated = "KameletBindingPhaseUpdated"
+
 	// ReasonRelatedObjectChanged --
 	ReasonRelatedObjectChanged = "ReasonRelatedObjectChanged"
 )
@@ -188,6 +195,35 @@
 	recorder.Eventf(k, corev1.EventTypeWarning, ReasonKameletError, "Cannot reconcile Kamelet %s: %v", k.Name, err)
 }
 
+// NotifyKameletBindingUpdated automatically generates events when a KameletBinding changes
+func NotifyKameletBindingUpdated(ctx context.Context, c client.Client, recorder record.EventRecorder, old, new *v1alpha1.KameletBinding) {
+	if new == nil {
+		return
+	}
+	oldPhase := ""
+	var oldConditions []v1.ResourceCondition
+	if old != nil {
+		oldPhase = string(old.Status.Phase)
+		oldConditions = old.Status.GetConditions()
+	}
+	if new.Status.Phase != v1alpha1.KameletBindingPhaseNone {
+		notifyIfConditionUpdated(recorder, new, oldConditions, new.Status.GetConditions(), "KameletBinding", new.Name, ReasonKameletBindingConditionChanged)
+	}
+	notifyIfPhaseUpdated(ctx, c, recorder, new, oldPhase, string(new.Status.Phase), "KameletBinding", new.Name, ReasonKameletBindingPhaseUpdated, "")
+}
+
+// NotifyKameletBindingError automatically generates error events when the kameletBinding reconcile cycle phase has an error
+func NotifyKameletBindingError(ctx context.Context, c client.Client, recorder record.EventRecorder, old, new *v1alpha1.KameletBinding, err error) {
+	k := old
+	if new != nil {
+		k = new
+	}
+	if k == nil {
+		return
+	}
+	recorder.Eventf(k, corev1.EventTypeWarning, ReasonKameletError, "Cannot reconcile KameletBinding %s: %v", k.Name, err)
+}
+
 // NotifyBuildUpdated automatically generates events when a build changes
 func NotifyBuildUpdated(ctx context.Context, c client.Client, recorder record.EventRecorder, old, new *v1.Build) {
 	if new == nil {
diff --git a/pkg/install/cluster.go b/pkg/install/cluster.go
index ae55328..8fdc902 100644
--- a/pkg/install/cluster.go
+++ b/pkg/install/cluster.go
@@ -75,6 +75,11 @@
 		return err
 	}
 
+	// Install CRD for KameletBinding (if needed)
+	if err := installCRD(ctx, c, "KameletBinding", "v1alpha1", "crd-kamelet-binding.yaml", collection); err != nil {
+		return err
+	}
+
 	// Installing ClusterRole
 	clusterRoleInstalled, err := IsClusterRoleInstalled(ctx, c)
 	if err != nil {
diff --git a/pkg/util/log/log.go b/pkg/util/log/log.go
index 7d290f0..f3ca598 100644
--- a/pkg/util/log/log.go
+++ b/pkg/util/log/log.go
@@ -129,7 +129,7 @@
 	)
 }
 
-// ForIntegrationPlatform --
+// ForKamelet --
 func (l Logger) ForKamelet(target *v1alpha1.Kamelet) Logger {
 	return l.WithValues(
 		"api-version", target.APIVersion,
@@ -139,6 +139,16 @@
 	)
 }
 
+// ForKameletBinding --
+func (l Logger) ForKameletBinding(target *v1alpha1.KameletBinding) Logger {
+	return l.WithValues(
+		"api-version", target.APIVersion,
+		"kind", target.Kind,
+		"ns", target.Namespace,
+		"name", target.Name,
+	)
+}
+
 // ***********************************
 //
 // Helpers
diff --git a/pkg/util/uri/uri.go b/pkg/util/uri/uri.go
index 6e9122d..1e0cf1e 100644
--- a/pkg/util/uri/uri.go
+++ b/pkg/util/uri/uri.go
@@ -21,6 +21,7 @@
 	"fmt"
 	"net/url"
 	"regexp"
+	"sort"
 	"strings"
 
 	"github.com/apache/camel-k/pkg/util/log"
@@ -56,3 +57,20 @@
 	}
 	return ""
 }
+
+func AppendParameters(uri string, params map[string]string) string {
+	prefix := "&"
+	if !strings.Contains(uri, "?") {
+		prefix = "?"
+	}
+	keys := make([]string, 0, len(params))
+	for k := range params {
+		keys = append(keys, k)
+	}
+	sort.Strings(keys)
+	for _, k := range keys {
+		uri += fmt.Sprintf("%s%s=%s", prefix, url.QueryEscape(k), url.QueryEscape(params[k]))
+		prefix = "&"
+	}
+	return uri
+}
diff --git a/pkg/util/uri/uri_test.go b/pkg/util/uri/uri_test.go
index 8908fec..ae22ff8 100644
--- a/pkg/util/uri/uri_test.go
+++ b/pkg/util/uri/uri_test.go
@@ -18,6 +18,7 @@
 package uri
 
 import (
+	"fmt"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
@@ -89,3 +90,55 @@
 	}
 
 }
+
+func TestAppendParameters(t *testing.T) {
+	tests := []struct {
+		prefix   string
+		params   map[string]string
+		expected string
+	}{
+		{
+			prefix:   "kamelet://mykamelet",
+			params:   nil,
+			expected: "kamelet://mykamelet",
+		},
+		{
+			prefix: "kamelet://mykamelet",
+			params: map[string]string{
+				"a": "b",
+			},
+			expected: "kamelet://mykamelet?a=b",
+		},
+		{
+			prefix: "kamelet://mykamelet",
+			params: map[string]string{
+				"a": "b",
+				"c": "d",
+			},
+			expected: "kamelet://mykamelet?a=b&c=d",
+		},
+		{
+			prefix: "kamelet://mykamelet",
+			params: map[string]string{
+				"z": "y",
+				"c": "d",
+			},
+			expected: "kamelet://mykamelet?c=d&z=y",
+		},
+		{
+			prefix: "kamelet://mykamelet?h=m",
+			params: map[string]string{
+				"z": "y",
+				"c": "d",
+			},
+			expected: "kamelet://mykamelet?h=m&c=d&z=y",
+		},
+	}
+
+	for i, test := range tests {
+		t.Run(fmt.Sprintf("appendParameters-%d-%s", i, test.expected), func(t *testing.T) {
+			uri := AppendParameters(test.prefix, test.params)
+			assert.Equal(t, test.expected, uri)
+		})
+	}
+}
