diff --git a/dios/include/rst/domains.h b/dios/include/rst/domains.h
index 5d1c4bb96195f6834cf7e2d2007f62c4322a3eb4..8ff5d9f6046c370ebfc20947603971a698d37d14 100644
--- a/dios/include/rst/domains.h
+++ b/dios/include/rst/domains.h
@@ -39,6 +39,8 @@ extern "C" {
     float __unit_lift_float32( float );
     double __unit_lift_float64( double );
 
+    void * __unit_aggregate();
+
     char * __mstring_val( char * buff, unsigned buff_len );
 
     uint8_t __constant_lift_i8( uint8_t c );
diff --git a/dios/include/rst/unit.hpp b/dios/include/rst/unit.hpp
index 91c24255f3fba59794ad20bfbfa8fd98e9c72dfe..88348a45014ad8e28c8fd7375dd83940a2db809e 100644
--- a/dios/include/rst/unit.hpp
+++ b/dios/include/rst/unit.hpp
@@ -124,4 +124,28 @@ namespace __dios::rst::abstract {
         #undef __bin
     };
 
+
+    struct UnitAggregate : Base
+    {
+        using Ptr = void *;
+
+        template< typename T >
+        _LART_INTERFACE static Ptr lift_any( Abstracted< T > ) noexcept
+        {
+            return __new< UnitAggregate >();
+        }
+
+        _LART_INTERFACE
+        static Ptr op_load( Ptr /* address */ ) noexcept
+        {
+            return __new< Unit< PointerBase > >();
+        }
+
+        _LART_INTERFACE
+        static void op_store( Ptr /* value */, Ptr /* address */ ) noexcept { }
+
+        _LART_INTERFACE
+        static Ptr op_gep( Ptr address, Ptr /* offset */ ) noexcept { return address; }
+    };
+
 } // namespace __dios::rst::abstract
diff --git a/dios/rst/unit.cpp b/dios/rst/unit.cpp
index 324438ba4962087ac42f776e92f0dc8832573947..0e9879dd57543cc84a4a75b0e8bbaf5550518270 100644
--- a/dios/rst/unit.cpp
+++ b/dios/rst/unit.cpp
@@ -9,11 +9,14 @@ namespace __dios::rst::abstract {
 
     template struct Unit< PointerBase >;
 
+    using Ptr = void *;
+
     template< typename C >
     _LART_INLINE C make_unit() noexcept
     {
         return make_abstract< C, Unit< PointerBase > >();
     }
+
     template< typename C >
     _LART_INLINE C make_unit( C c ) noexcept
     {
@@ -25,6 +28,9 @@ namespace __dios::rst::abstract {
         _LART_SCALAR uint16_t __unit_val_i16() { return make_unit< uint16_t >(); }
         _LART_SCALAR uint32_t __unit_val_i32() { return make_unit< uint32_t >(); }
         _LART_SCALAR uint64_t __unit_val_i64() { return make_unit< uint64_t >(); }
+
+        _LART_AGGREGATE Ptr __unit_aggregate() { return make_abstract< Ptr, UnitAggregate >(); }
+
         _LART_SCALAR float __unit_val_float32() { return make_unit< float >(); }
         _LART_SCALAR double __unit_val_float64() { return make_unit< double >(); }