diff --git a/pkg/custom.go b/pkg/custom.go
new file mode 100644
index 0000000..9ed2bca
--- /dev/null
+++ b/pkg/custom.go
@@ -0,0 +1,56 @@
+package gonf
+
+var customPromises []*CustomPromise
+
+func init() {
+	customPromises = make([]*CustomPromise, 0)
+}
+
+type CustomPromiseInterface interface {
+	Promise
+	Status() Status
+}
+
+type CustomPromise struct {
+	promise CustomPromiseInterface
+}
+
+func MakeCustomPromise(p CustomPromiseInterface) *CustomPromise {
+	return &CustomPromise{
+		promise: p,
+	}
+}
+
+func (c *CustomPromise) IfRepaired(p ...Promise) Promise {
+	c.promise.IfRepaired(p...)
+	return c
+}
+
+func (c *CustomPromise) Promise() Promise {
+	customPromises = append(customPromises, c)
+	return c
+}
+
+func (c *CustomPromise) Resolve() {
+	c.promise.Resolve()
+}
+
+func (c CustomPromise) Status() Status {
+	return c.Status()
+}
+
+func resolveCustomPromises() (status Status) {
+	status = KEPT
+	for _, c := range customPromises {
+		if c.promise.Status() == PROMISED {
+			c.Resolve()
+			switch c.promise.Status() {
+			case BROKEN:
+				return BROKEN
+			case REPAIRED:
+				status = REPAIRED
+			}
+		}
+	}
+	return
+}
diff --git a/pkg/gonf.go b/pkg/gonf.go
index 363a227..7a18c91 100644
--- a/pkg/gonf.go
+++ b/pkg/gonf.go
@@ -47,6 +47,14 @@ func Resolve() (status Status) {
 		case REPAIRED:
 			continue
 		}
+		// ----- CustomPromises ----------------------------------------
+		status = resolveCustomPromises()
+		switch status {
+		case BROKEN:
+			return BROKEN
+		case REPAIRED:
+			continue
+		}
 		return
 	}
 }