diff --git a/tests/bar/1.0/IBar.hal b/tests/bar/1.0/IBar.hal
index 82c6fc1..21c3473 100644
--- a/tests/bar/1.0/IBar.hal
+++ b/tests/bar/1.0/IBar.hal
@@ -31,4 +31,6 @@
 
     thisIsNew();
     expectNullHandle(handle h, Abc xyz) generates (bool hIsNull, bool xyzHasNull);
+    takeAMask(BitField bf, bitfield<BitField> first, MyMask second, Mask third)
+            generates (BitField bf, uint8_t first, uint8_t second, uint8_t third);
 };
diff --git a/tests/bar/1.0/default/Bar.cpp b/tests/bar/1.0/default/Bar.cpp
index cac0845..a9b6c25 100644
--- a/tests/bar/1.0/default/Bar.cpp
+++ b/tests/bar/1.0/default/Bar.cpp
@@ -185,6 +185,12 @@
     return Void();
 }
 
+Return<void> Bar::takeAMask(BitField bf, uint8_t first, const MyMask& second, uint8_t third,
+            takeAMask_cb _hidl_cb) {
+    _hidl_cb(bf, bf | first, second.value & bf, (bf | bf) & third);
+    return Void();
+}
+
 IBar* HIDL_FETCH_IBar(const char* /* name */) {
     return new Bar();
 }
diff --git a/tests/bar/1.0/default/Bar.h b/tests/bar/1.0/default/Bar.h
index 0400b98..71737fe 100644
--- a/tests/bar/1.0/default/Bar.h
+++ b/tests/bar/1.0/default/Bar.h
@@ -23,6 +23,9 @@
 using ::android::hardware::hidl_string;
 using ::android::sp;
 
+using BitField = ::android::hardware::tests::foo::V1_0::IFoo::BitField;
+using MyMask = ::android::hardware::tests::foo::V1_0::IFoo::MyMask;
+
 struct Bar : public IBar {
 
     Bar();
@@ -66,6 +69,9 @@
     Return<void> thisIsNew()  override;
     Return<void> expectNullHandle(const hidl_handle& h, const Abc& xyz, expectNullHandle_cb _hidl_cb)  override;
 
+    Return<void> takeAMask(BitField bf, uint8_t first, const MyMask& second, uint8_t third,
+            takeAMask_cb _hidl_cb) override;
+
 private:
     sp<IFoo> mFoo;
 };
diff --git a/tests/baz/1.0/IBase.hal b/tests/baz/1.0/IBase.hal
index 7f90f16..d5e3565 100644
--- a/tests/baz/1.0/IBase.hal
+++ b/tests/baz/1.0/IBase.hal
@@ -64,6 +64,19 @@
         vec<MacAddress> addresses;
     };
 
+    enum BitField : uint8_t {
+        V0 = 1 << 0,
+        V1 = 1 << 1,
+        V2 = 1 << 2,
+        V3 = 1 << 3,
+    };
+
+    struct MyMask {
+        bitfield<BitField> value;
+    };
+
+    typedef bitfield<BitField> Mask;
+
     someBaseMethod();
 
     someBoolMethod(bool x) generates (bool y);
@@ -81,4 +94,7 @@
 
     transpose(StringMatrix5x3 in) generates (StringMatrix3x5 out);
     transpose2(ThreeStrings[5] in) generates (FiveStrings[3] out);
+
+    takeAMask(BitField bf, bitfield<BitField> first, MyMask second, Mask third)
+            generates (BitField out, uint8_t f, uint8_t s, uint8_t t);
 };
diff --git a/tests/foo/1.0/IFoo.hal b/tests/foo/1.0/IFoo.hal
index ea69e1e..fc76c1c 100644
--- a/tests/foo/1.0/IFoo.hal
+++ b/tests/foo/1.0/IFoo.hal
@@ -33,6 +33,13 @@
         blah = goober
     };
 
+    enum BitField : uint8_t {
+        V0 = 1 << 0,
+        V1 = 1 << 1,
+        V2 = 1 << 2,
+        V3 = 1 << 3,
+    };
+
     struct Fumble {
         Outer.Inner data;
     };
@@ -85,6 +92,12 @@
         int32_t guard;
     };
 
+    struct MyMask {
+        bitfield<BitField> value;
+    };
+
+    typedef bitfield<BitField> Mask;
+
     doThis(float param);
     doThatAndReturnSomething(int64_t param) generates (int32_t result);
     doQuiteABit(int32_t a, int64_t b, float c, double d) generates (double something);
