diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp
index c80cecc..a3155c4 100644
--- a/lib/CodeGen/CGDecl.cpp
+++ b/lib/CodeGen/CGDecl.cpp
@@ -83,8 +83,8 @@
   assert(Init && "Unable to create initialiser for static decl");
   
   std::string ContextName;
-  if (CurFuncDecl)
-    ContextName = CurFuncDecl->getName();
+  if (const FunctionDecl * FD = dyn_cast<FunctionDecl>(CurFuncDecl))
+    ContextName = FD->getName();
   else
     assert(0 && "Unknown context for block var decl"); // FIXME Handle objc.
   
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 66aeea3..c80b6a7 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -386,7 +386,13 @@
 }
 
 LValue CodeGenFunction::EmitPreDefinedLValue(const PreDefinedExpr *E) {
-  std::string FunctionName(CurFuncDecl->getName());
+  std::string FunctionName;
+  if(const FunctionDecl *FD = dyn_cast<FunctionDecl>(CurFuncDecl)) {
+    FunctionName = FD->getName();
+  }
+  else {
+    assert(0 && "Attempting to load predefined constant for invalid decl type");
+  }
   std::string GlobalVarName;
   
   switch (E->getIdentType()) {
@@ -404,7 +410,7 @@
       break;
   }
   
-  GlobalVarName += CurFuncDecl->getName();
+  GlobalVarName += FunctionName;
   
   // FIXME: Can cache/reuse these within the module.
   llvm::Constant *C=llvm::ConstantArray::get(FunctionName);
@@ -581,8 +587,10 @@
     
   // Get object pointer and coerce object pointer to correct type.
   llvm::Value *Object = EmitLValue(E->getBase()).getAddress();
+  Object = Builder.CreateLoad(Object, E->getDecl()->getName());
   if (Object->getType() != ObjectType)
     Object = Builder.CreateBitCast(Object, ObjectType);
+
   
   // Return a pointer to the right element.
   return LValue::MakeAddr(Builder.CreateStructGEP(Object, Index,
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index cc7d8e9..a50e666 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -484,8 +484,7 @@
 
   llvm::Value *SelPtr = Builder.CreateStructGEP(Selector, 0);
   return Runtime->generateMessageSend(Builder, ConvertType(E->getType()),
-                                      // FIXME: Self can be assigned to!
-                                      CGF.CurFn->arg_begin(),
+                                      CGF.LoadObjCSelf(),
                                       Receiver, SelPtr,
                                       &Args[0], Args.size());
 }
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp
index c804098..a07eaff 100644
--- a/lib/CodeGen/CodeGenFunction.cpp
+++ b/lib/CodeGen/CodeGenFunction.cpp
@@ -97,7 +97,13 @@
   // TODO: Add something to AST to let the runtime specify the names and types
   // of these.
   llvm::Value *&DMEntry = LocalDeclMap[&(*OMD->getSelfDecl())];
-  DMEntry = AI;
+  const llvm::Type *SelfTy = AI->getType();
+  llvm::Value *DeclPtr = new llvm::AllocaInst(SelfTy, 0, "self.addr",
+                                   AllocaInsertPt);
+
+  // Store the initial value into the alloca.
+  Builder.CreateStore(AI, DeclPtr);
+  DMEntry = DeclPtr;
   ++AI; ++AI;
 
 
@@ -130,13 +136,22 @@
   assert(!verifyFunction(*CurFn) && "Generated method is not well formed.");
 }
 
+llvm::Value *CodeGenFunction::LoadObjCSelf(void)
+{
+  if(const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(CurFuncDecl)) {
+    llvm::Value *SelfPtr = LocalDeclMap[&(*OMD->getSelfDecl())];
+    return Builder.CreateLoad(SelfPtr, "self");
+  }
+  return NULL;
+}
+
 void CodeGenFunction::GenerateCode(const FunctionDecl *FD) {
   LLVMIntTy = ConvertType(getContext().IntTy);
   LLVMPointerWidth = static_cast<unsigned>(
     getContext().getTypeSize(getContext().getPointerType(getContext().VoidTy)));
   
   CurFuncDecl = FD;
-  FnRetTy = CurFuncDecl->getType()->getAsFunctionType()->getResultType();
+  FnRetTy = FD->getType()->getAsFunctionType()->getResultType();
 
 
   CurFn = cast<llvm::Function>(CGM.GetAddrOfFunctionDecl(FD, true));
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 121b795..61a0d74 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -246,7 +246,8 @@
   typedef std::pair<llvm::Value *, llvm::Value *> ComplexPairTy;
   llvm::LLVMFoldingBuilder Builder;
   
-  const FunctionDecl *CurFuncDecl;
+  // Holds the Decl for the current function or method
+  const Decl *CurFuncDecl;
   QualType FnRetTy;
   llvm::Function *CurFn;
 
@@ -293,6 +294,8 @@
   void GenerateCode(const FunctionDecl *FD);
   
   const llvm::Type *ConvertType(QualType T);
+
+  llvm::Value *LoadObjCSelf();
   
   /// hasAggregateLLVMType - Return true if the specified AST type will map into
   /// an aggregate LLVM type or is void.
