diff --git a/.gitlab-ci-checkcommit.sh b/.gitlab-ci-checkcommit.sh
index fc8963a..d76baf7 100755
--- a/.gitlab-ci-checkcommit.sh
+++ b/.gitlab-ci-checkcommit.sh
@@ -4,6 +4,29 @@
 	printf "ERROR: %s\n" "$*" >&2
 }
 
+findtag() {
+	local commit_body tag person
+	commit_body=$1
+	tag=$2
+	person=$3
+
+	# trim duplicate spaces from commit body and person
+	match="$tag: $(echo $person | tr -s ' ')"
+
+	if [ -z "$(echo "$commit_body" | tr -s ' ' | grep -i "$match")" ]; then
+		echoerr "Tag is missing from commit body"
+		echoerr ""
+		echoerr "Looking for '"$match"' in: "
+		echoerr "-----------------------------------------------------"
+		echoerr "$commit_body"
+		echoerr "-----------------------------------------------------"
+		echoerr ""
+		return 0
+	fi
+
+	return 1
+}
+
 git fetch https://gitlab.freedesktop.org/drm-hwcomposer/drm-hwcomposer.git
 
 git log --pretty='%h' FETCH_HEAD..HEAD | while read h; do
@@ -16,15 +39,13 @@
 	commit_body=$(git show -s --pretty=%b "$h")
 
 	author=$(git show -s --format='%an <%ae>')
-	sob=$(echo "$commit_body" | grep "Signed-off-by: $author")
-	if [ -z "$sob" ] ; then
+	if findtag "$commit_body" "Signed-off-by" "$author"; then
 		echoerr "Author SoB tag is missing from commit $h"
 		exit 1
 	fi
 
 	committer=$(git show -s --format='%cn <%ce>')
-	sob=$(echo "$commit_body" | grep "Signed-off-by: $committer")
-	if [ -z "$sob" ] ; then
+	if findtag "$commit_body" "Signed-off-by" "$committer"; then
 		echoerr "Committer SoB tag is missing from commit $h"
 		exit 1
 	fi
diff --git a/drmhwctwo.h b/drmhwctwo.h
index fd14b1f..d9ced9b 100644
--- a/drmhwctwo.h
+++ b/drmhwctwo.h
@@ -111,7 +111,7 @@
     HWC2::Composition validated_type_ = HWC2::Composition::Invalid;
 
     HWC2::BlendMode blending_ = HWC2::BlendMode::None;
-    buffer_handle_t buffer_;
+    buffer_handle_t buffer_ = NULL;
     UniqueFd acquire_fence_;
     int release_fence_raw_ = -1;
     UniqueFd release_fence_;
diff --git a/platformhisi.cpp b/platformhisi.cpp
index 76fe1e7..d4002f1 100644
--- a/platformhisi.cpp
+++ b/platformhisi.cpp
@@ -70,7 +70,59 @@
   return 0;
 }
 
+#ifdef MALI_GRALLOC_INTFMT_AFBC_BASIC
+uint64_t HisiImporter::ConvertGrallocFormatToDrmModifiers(uint64_t flags,
+                                                          bool is_rgb) {
+  uint64_t features = 0UL;
+
+  if (flags & MALI_GRALLOC_INTFMT_AFBC_BASIC)
+    features |= AFBC_FORMAT_MOD_BLOCK_SIZE_16x16;
+
+  if (flags & MALI_GRALLOC_INTFMT_AFBC_SPLITBLK)
+    features |= (AFBC_FORMAT_MOD_SPLIT | AFBC_FORMAT_MOD_SPARSE);
+
+  if (flags & MALI_GRALLOC_INTFMT_AFBC_WIDEBLK)
+    features |= AFBC_FORMAT_MOD_BLOCK_SIZE_32x8;
+
+  if (flags & MALI_GRALLOC_INTFMT_AFBC_TILED_HEADERS)
+    features |= AFBC_FORMAT_MOD_TILED;
+
+  if (features) {
+    if (is_rgb)
+      features |= AFBC_FORMAT_MOD_YTR;
+
+    return DRM_FORMAT_MOD_ARM_AFBC(features);
+  }
+
+  return 0;
+}
+#else
+uint64_t HisiImporter::ConvertGrallocFormatToDrmModifiers(uint64_t /* flags */,
+                                                          bool /* is_rgb */) {
+  return 0;
+}
+#endif
+
+bool HisiImporter::IsDrmFormatRgb(uint32_t drm_format) {
+  switch (drm_format) {
+    case DRM_FORMAT_ARGB8888:
+    case DRM_FORMAT_XBGR8888:
+    case DRM_FORMAT_ABGR8888:
+    case DRM_FORMAT_BGR888:
+    case DRM_FORMAT_BGR565:
+      return true;
+    case DRM_FORMAT_YVU420:
+      return false;
+    default:
+      ALOGE("Unsupported format %u assuming rgb?", drm_format);
+      return true;
+  }
+}
+
 int HisiImporter::ImportBuffer(buffer_handle_t handle, hwc_drm_bo_t *bo) {
+  bool is_rgb;
+  uint64_t modifiers[4] = {0};
+
   memset(bo, 0, sizeof(hwc_drm_bo_t));
 
   private_handle_t const *hnd = reinterpret_cast<private_handle_t const *>(
@@ -94,6 +146,10 @@
   if (fmt < 0)
     return fmt;
 
+  is_rgb = IsDrmFormatRgb(fmt);
+  modifiers[0] = ConvertGrallocFormatToDrmModifiers(hnd->internal_format,
+                                                    is_rgb);
+
   bo->width = hnd->width;
   bo->height = hnd->height;
   bo->hal_format = hnd->req_format;
@@ -129,8 +185,11 @@
       break;
   }
 
-  ret = drmModeAddFB2(drm_->fd(), bo->width, bo->height, bo->format,
-                      bo->gem_handles, bo->pitches, bo->offsets, &bo->fb_id, 0);
+  ret = drmModeAddFB2WithModifiers(drm_->fd(), bo->width, bo->height,
+                                   bo->format, bo->gem_handles, bo->pitches,
+                                   bo->offsets, modifiers, &bo->fb_id,
+                                   modifiers[0] ? DRM_MODE_FB_MODIFIERS : 0);
+
   if (ret) {
     ALOGE("could not create drm fb %d", ret);
     return ret;
diff --git a/platformhisi.h b/platformhisi.h
index 927da17..14a58b9 100644
--- a/platformhisi.h
+++ b/platformhisi.h
@@ -39,6 +39,10 @@
   bool CanImportBuffer(buffer_handle_t handle) override;
 
  private:
+  uint64_t ConvertGrallocFormatToDrmModifiers(uint64_t flags, bool is_rgb);
+
+  bool IsDrmFormatRgb(uint32_t drm_format);
+
   DrmDevice *drm_;
 
   const gralloc_module_t *gralloc_;
