diff --git a/chaincode/controller/operations.go b/chaincode/controller/operations.go
index 3a956b8666a91b9f0bb93a7594f715f059be944b..f983790ac9cc4db1d6f98cfb5da1a35a5a0b0344 100644
--- a/chaincode/controller/operations.go
+++ b/chaincode/controller/operations.go
@@ -71,12 +71,13 @@ func ContextOperations(m shared.AbstractChaincodeOperationManager) error {
 				"asset-register",
 				shared.WRITE_OP,
 				[]shared.MiddlewareInterface{
+					m2.ValidateUnits,
+					m2.ValidateStatus,
+					m2.ValidateType,
 					middleware.InjectAssetIdIfNone,
 					middleware.RejectIfAssetExists,
 					middleware.MarkAssetAsCreated,
 					middleware.InjectAssetOwnerData,
-					m2.ValidateStatus,
-					m2.ValidateType,
 				},
 				nil,
 				assetController.SaveAbstractAsset,
@@ -99,11 +100,12 @@ func ContextOperations(m shared.AbstractChaincodeOperationManager) error {
 				"asset-update",
 				shared.WRITE_OP,
 				[]shared.MiddlewareInterface{
+					m2.ValidateUnits,
+					m2.ValidateOptionalStatus,
+					m2.ValidateOptionalType,
 					middleware.RejectIfNoId,
 					middleware.RejectIfAssetNotExist,
 					middleware.MarkAssetAsModified,
-					m2.ValidateOptionalStatus,
-					m2.ValidateOptionalType,
 				},
 				nil,
 				assetController.OnlySameOrgAndRole(assetController.UpdateAsset),
diff --git a/chaincode/middleware/units.go b/chaincode/middleware/units.go
new file mode 100644
index 0000000000000000000000000000000000000000..1c19d750a6499a363dc33beec0fa4fe37a0e23ea
--- /dev/null
+++ b/chaincode/middleware/units.go
@@ -0,0 +1,35 @@
+/**
+ * type.go
+ *
+ * COPYRIGHT: FUNDACIÓN TECNALIA RESEARCH & INNOVATION, 2022.
+ */
+
+package middleware
+
+import (
+	"errors"
+	"strings"
+
+	"git.code.tecnalia.com/ledgerbuilder/sdk/shared"
+	"git.code.tecnalia.com/traceblock/sdk/middleware"
+)
+
+var (
+	ValidateUnits = shared.NewMiddlewareFunction("validate-units", _rejectIfInvalidUnits)
+	errInvalidUnits = errors.New("invalid units provided")
+)
+
+
+func _rejectIfInvalidUnits(stub shared.LedgerBuildrStubInterface, ctl shared.ControllerInterface, req shared.TXRequestInterface, requestAsset shared.LedgerBuildrAsset) (shared.LedgerBuildrAsset, error) {
+	asst, err := middleware.ConvertToTraceableAsset(requestAsset)
+	if err != nil {
+		return nil, err
+	}
+
+	asst.Units = strings.ToLower(asst.Units)
+	if (asst.Units != "kg" && asst.Units != "t") {
+		return nil, errInvalidUnits
+	}
+
+	return asst, nil
+}
\ No newline at end of file