diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
index 4728c95..d39b5e1 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.cpp
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
@@ -39,18 +39,17 @@
     return 0;  // error materializing the module.
   }
   
-  if (M->getEndianness() == Module::AnyEndianness) {
-    int Test = 0;
-    *(char*)&Test = 1;    // Return true if the host is little endian
-    bool isLittleEndian = (Test == 1);
-    M->setEndianness(isLittleEndian ? Module::LittleEndian : Module::BigEndian);
-  }
+  // FIXME: This should probably compute the entire data layout
+  std::string DataLayout;
+  int Test = 0;
+  *(char*)&Test = 1;    // Return true if the host is little endian
+  bool isLittleEndian = (Test == 1);
+  DataLayout.append(isLittleEndian ? "e" : "E");
 
-  if (M->getPointerSize() == Module::AnyPointerSize) {
-    // Follow host.
-    bool Ptr64 = sizeof(void*) == 8;
-    M->setPointerSize(Ptr64 ? Module::Pointer64 : Module::Pointer32);
-  }
+	bool Ptr64 = sizeof(void*) == 8;
+	DataLayout.append(Ptr64 ? "-p:64:64" : "-p:32:32");
+	
+  M->setDataLayout(DataLayout);
 
   return new Interpreter(M);
 }
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index 753ebcc..6283b05 100644
--- a/lib/Linker/LinkModules.cpp
+++ b/lib/Linker/LinkModules.cpp
@@ -849,19 +849,25 @@
   assert(Dest != 0 && "Invalid Destination module");
   assert(Src  != 0 && "Invalid Source Module");
 
+  std::string DataLayout;
+
   if (Dest->getEndianness() == Module::AnyEndianness)
-    Dest->setEndianness(Src->getEndianness());
+    if (Src->getEndianness() == Module::BigEndian)
+      DataLayout.append("E");
+    else if (Src->getEndianness() == Module::LittleEndian)
+      DataLayout.append("e");
   if (Dest->getPointerSize() == Module::AnyPointerSize)
-    Dest->setPointerSize(Src->getPointerSize());
+    if (Src->getPointerSize() == Module::Pointer64)
+      DataLayout.append(DataLayout.length() == 0 ? "p:64:64" : "-p:64:64");
+    else if (Src->getPointerSize() == Module::Pointer32)
+      DataLayout.append(DataLayout.length() == 0 ? "p:32:32" : "-p:32:32");
   if (Dest->getTargetTriple().empty())
     Dest->setTargetTriple(Src->getTargetTriple());
+  Dest->setDataLayout(DataLayout);
 
-  if (Src->getEndianness() != Module::AnyEndianness &&
-      Dest->getEndianness() != Src->getEndianness())
-    cerr << "WARNING: Linking two modules of different endianness!\n";
-  if (Src->getPointerSize() != Module::AnyPointerSize &&
-      Dest->getPointerSize() != Src->getPointerSize())
-    cerr << "WARNING: Linking two modules of different pointer size!\n";
+  if (Src->getDataLayout().length() > 0 && Dest->getDataLayout().length() > 0 &&
+      Src->getDataLayout().compare(Dest->getDataLayout()) != 0)
+    cerr << "WARNING: Linking two modules of different data layouts!\n";
   if (!Src->getTargetTriple().empty() &&
       Dest->getTargetTriple() != Src->getTargetTriple())
     cerr << "WARNING: Linking two modules of different target triples!\n";
diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp
index e950e56..77bb01e 100644
--- a/lib/Target/TargetData.cpp
+++ b/lib/Target/TargetData.cpp
@@ -189,8 +189,8 @@
     }
   }
 
-  // Unless explicitly specified, the alignments for longs and doubles is capped by 
-  // pointer size.
+  // Unless explicitly specified, the alignments for longs and doubles is 
+  // capped by pointer size.
   if (LongABIAlignment == 0)
 	  LongABIAlignment = LongPrefAlignment = PointerMemSize;
   if (DoubleABIAlignment == 0)
@@ -198,25 +198,7 @@
 }
 
 TargetData::TargetData(const Module *M) {
-  LittleEndian       = M->getEndianness() != Module::BigEndian;
-  PointerMemSize     = M->getPointerSize() != Module::Pointer64 ? 4 : 8;
-  PointerABIAlignment = PointerMemSize;
-  DoubleABIAlignment  = PointerMemSize;
-  FloatABIAlignment   = 4;
-  LongABIAlignment    = PointerMemSize;
-  IntABIAlignment     = 4;
-  ShortABIAlignment   = 2;
-  ByteABIAlignment    = 1;
-  BoolABIAlignment    = 1;
-  BoolPrefAlignment = BoolABIAlignment;
-  BytePrefAlignment = ByteABIAlignment;
-  ShortPrefAlignment = ShortABIAlignment;
-  IntPrefAlignment = IntABIAlignment;
-  LongPrefAlignment = LongABIAlignment;
-  FloatPrefAlignment = FloatABIAlignment;
-  DoublePrefAlignment = DoubleABIAlignment;
-  PointerPrefAlignment = PointerABIAlignment;
-  AggMinPrefAlignment = 0;
+  init(M->getDataLayout());
 }
 
 /// Layouts - The lazy cache of structure layout information maintained by
diff --git a/lib/Transforms/Utils/CloneModule.cpp b/lib/Transforms/Utils/CloneModule.cpp
index 696d9d1..70669a8 100644
--- a/lib/Transforms/Utils/CloneModule.cpp
+++ b/lib/Transforms/Utils/CloneModule.cpp
@@ -37,8 +37,7 @@
 Module *llvm::CloneModule(const Module *M, std::map<const Value*, Value*> &ValueMap) {
   // First off, we need to create the new module...
   Module *New = new Module(M->getModuleIdentifier());
-  New->setEndianness(M->getEndianness());
-  New->setPointerSize(M->getPointerSize());
+  New->setDataLayout(M->getDataLayout());
   New->setTargetTriple(M->getTargetTriple());
   New->setModuleInlineAsm(M->getModuleInlineAsm());
 
