diff --git a/AST/DeclSerialization.cpp b/AST/DeclSerialization.cpp
index 9b2278a..3a326f0 100644
--- a/AST/DeclSerialization.cpp
+++ b/AST/DeclSerialization.cpp
@@ -16,47 +16,13 @@
 #include "llvm/Bitcode/Serialize.h"
 #include "llvm/Bitcode/Deserialize.h"
 
-using llvm::SerializeTrait;
-using llvm::Deserializer;
-using llvm::Serializer;
 using namespace clang;
 
-
-static void EmitEnumConstantDecl(Serializer& S, EnumConstantDecl& decl) {
-  S.Emit(decl.getLocation());
-  S.EmitPtr(decl.getIdentifier());
-//  S.Emit(decl.getType());  FIXME
-  S.EmitOwnedPtr<Stmt>(decl.getInitExpr());
-    // S.Emit(decl.getInitVal()); FIXME
-  S.EmitOwnedPtr<Decl>(decl.getNextDeclarator());
+void Decl::Emit(llvm::Serializer& S) const {
+  assert ("FIXME: not implemented.");
 }
 
-static void EmitFunctionDecl(Serializer& S, FunctionDecl& decl) {
-  S.Emit(decl.getLocation());
-  S.EmitPtr(decl.getIdentifier());
-//  S.Emit(decl.getType()); FIXME
-//  S.Emit(decl.getStorageClass()); FIXME
-  S.EmitBool(decl.isInline());
-  S.EmitOwnedPtr<Decl>(decl.getNextDeclarator());
-}
-
-
-void SerializeTrait<Decl>::Emit(Serializer& S, Decl& decl) {
-  assert (!decl.isInvalidDecl() && "Can only serialize valid decls.");
-
-  S.EmitInt((unsigned) decl.getKind());
-
-  switch (decl.getKind()) {
-    default:
-      assert (false && "Serialization not implemented for decl type.");
-      return;
-      
-    case Decl::EnumConstant:
-      EmitEnumConstantDecl(S,cast<EnumConstantDecl>(decl));
-      return;
-      
-    case Decl::Function:
-      EmitFunctionDecl(S,cast<FunctionDecl>(decl));
-      return;      
-  }  
+Decl* Decl::Materialize(llvm::Deserializer& D) {
+  assert ("FIXME: not implemented.");
+  return NULL;
 }
