diff --git a/icd/intel/CMakeLists.txt b/icd/intel/CMakeLists.txt
index ec8d4c0..0334b99 100644
--- a/icd/intel/CMakeLists.txt
+++ b/icd/intel/CMakeLists.txt
@@ -18,6 +18,7 @@
     init_driver.c
     gpu.c
     gpuinfo.c
+    obj.c
     )
 
 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/GitSHA1.c.in"
diff --git a/icd/intel/obj.c b/icd/intel/obj.c
new file mode 100644
index 0000000..996543d
--- /dev/null
+++ b/icd/intel/obj.c
@@ -0,0 +1,99 @@
+/*
+ * XGL
+ *
+ * Copyright (C) 2014 LunarG, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "dispatch_tables.h"
+#include "gpu.h"
+#include "obj.h"
+
+/**
+ * Return true if an (not so) arbitrary pointer casted to intel_base points to
+ * a valid intel_base.  This assumes at least the first sizeof(void*) bytes of
+ * the address are accessible, and they does not happen to be our magic
+ * values.
+ */
+bool intel_base_is_valid(const struct intel_base *base)
+{
+    if (base->dispatch != &intel_normal_dispatch_table &&
+        base->dispatch != &intel_debug_dispatch_table)
+        return false;
+
+    return !intel_gpu_is_valid((const struct intel_gpu *) base);
+}
+
+/**
+ * Initialize intel_base_dbg.  It is assumed that the struct has already been
+ * zero initialized.
+ */
+bool intel_base_dbg_init(struct intel_base_dbg *dbg,
+                         XGL_DBG_OBJECT_TYPE type,
+                         const void *create_info,
+                         XGL_SIZE create_info_size)
+{
+    dbg->alloc_id = icd_get_allocator_id();
+    dbg->type = type;
+
+    if (create_info_size) {
+        dbg->create_info =
+            icd_alloc(create_info_size, 0, XGL_SYSTEM_ALLOC_DEBUG);
+        if (!dbg->create_info)
+            return false;
+
+        memcpy(dbg->create_info, create_info, create_info_size);
+    }
+
+    return true;
+}
+
+void intel_base_dbg_cleanup(struct intel_base_dbg *dbg)
+{
+    if (dbg->tag)
+        icd_free(dbg->tag);
+
+    if (dbg->create_info)
+        icd_free(dbg->create_info);
+}
+
+struct intel_base_dbg *intel_base_dbg_create(XGL_DBG_OBJECT_TYPE type,
+                                             const void *create_info,
+                                             XGL_SIZE create_info_size)
+{
+    struct intel_base_dbg *dbg;
+
+    dbg = icd_alloc(sizeof(*dbg), 0, XGL_SYSTEM_ALLOC_DEBUG);
+    if (!dbg)
+        return NULL;
+
+    if (!intel_base_dbg_init(dbg, type, create_info, create_info_size)) {
+        icd_free(dbg);
+        return NULL;
+    }
+
+    return dbg;
+}
+
+void intel_base_dbg_destroy(struct intel_base_dbg *dbg)
+{
+    intel_base_dbg_cleanup(dbg);
+    icd_free(dbg);
+}
diff --git a/icd/intel/obj.h b/icd/intel/obj.h
new file mode 100644
index 0000000..2d9c502
--- /dev/null
+++ b/icd/intel/obj.h
@@ -0,0 +1,91 @@
+/*
+ * XGL
+ *
+ * Copyright (C) 2014 LunarG, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef OBJ_H
+#define OBJ_H
+
+#include "intel.h"
+
+struct intel_mem;
+
+struct intel_base_dbg {
+    int alloc_id;
+    XGL_DBG_OBJECT_TYPE type;
+
+    void *create_info;
+    XGL_SIZE create_info_size;
+
+    void *tag;
+    XGL_SIZE tag_size;
+};
+
+struct intel_base {
+    const struct icd_dispatch_table *dispatch;
+    struct intel_base_dbg *dbg;
+
+    XGL_MEMORY_REQUIREMENTS mem_requirements;
+};
+
+struct intel_obj {
+    struct intel_base base;
+
+    void (*destroy)(struct intel_obj *obj);
+
+    struct intel_mem *mem;
+    XGL_SIZE offset;
+};
+
+struct intel_state {
+    struct intel_obj obj;
+};
+
+static inline struct intel_base *intel_base(XGL_BASE_OBJECT base)
+{
+    return (struct intel_base *) base;
+}
+
+static inline struct intel_obj *intel_obj(XGL_OBJECT obj)
+{
+    return (struct intel_obj *) obj;
+}
+
+static inline struct intel_state *intel_state(XGL_STATE_OBJECT state)
+{
+    return (struct intel_state *) state;
+}
+
+bool intel_base_is_valid(const struct intel_base *base);
+
+struct intel_base_dbg *intel_base_dbg_create(XGL_DBG_OBJECT_TYPE type,
+                                             const void *create_info,
+                                             XGL_SIZE create_info_size);
+void intel_base_dbg_destroy(struct intel_base_dbg *dbg);
+
+bool intel_base_dbg_init(struct intel_base_dbg *dbg,
+                         XGL_DBG_OBJECT_TYPE type,
+                         const void *create_info,
+                         XGL_SIZE create_info_size);
+void intel_base_dbg_cleanup(struct intel_base_dbg *dbg);
+
+#endif /* OBJ_H */
