diff -r 2b672817103a sage/combinat/crystals/letters.py
--- a/sage/combinat/crystals/letters.py	Sun Apr 06 21:41:09 2008 -0700
+++ b/sage/combinat/crystals/letters.py	Tue Apr 08 16:08:14 2008 -0700
@@ -142,7 +142,6 @@ class ClassicalCrystalOfLetters(Classica
         """
         return self._digraph
     
-
     def __contains__(self, x):
         """
         EXAMPLES:
@@ -287,7 +286,19 @@ class Crystal_of_letters_type_A_element(
 
         sage: C.check()
         True
-    """
+
+    """
+    
+    def weight(self):
+        """
+        Returns the weight of self.
+
+        EXAMPLES:
+            sage: [v.weight() for v in CrystalOfLetters(['A',3])]
+            [(1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)]
+        """
+        return self._parent.weight_lattice_realization()._term(self.value-1)
+
     def e(self, i):
         r"""
         Returns the action of $e_i$ on self.
@@ -331,6 +342,28 @@ class Crystal_of_letters_type_B_element(
         sage: C.check()
         True
     """
+    
+    def weight(self):
+        """
+        Returns the weight of self.
+
+        EXAMPLES:
+            sage: [v.weight() for v in CrystalOfLetters(['B',3])]
+            [(1, 0, 0),
+             (0, 1, 0),
+             (0, 0, 1),
+             (0, 0, 0),
+             (0, 0, -1),
+             (0, -1, 0),
+             (-1, 0, 0)]
+        """
+        if self.value > 0:
+            return self._parent.weight_lattice_realization()._term(self.value-1)
+        elif self.value < 0:
+            return -self._parent.weight_lattice_realization()._term(-self.value-1)
+        else:
+            return self._parent.weight_lattice_realization()._free_module(0)
+
     def e(self, i):
         r"""
         Returns the action of $e_i$ on self.
@@ -410,8 +443,24 @@ class Crystal_of_letters_type_C_element(
          [False, False, False, False, False, False]]
         sage: C.check()
         True
-   
-    """
+    """
+    
+    def weight(self):
+        """
+        Returns the weight of self.
+
+        EXAMPLES:
+            sage: [v.weight() for v in CrystalOfLetters(['C',3])]
+            [(1, 0, 0), (0, 1, 0), (0, 0, 1), (0, 0, -1), (0, -1, 0), (-1, 0, 0)]
+        
+        """
+        if self.value > 0:
+            return self._parent.weight_lattice_realization()._term(self.value-1)
+        elif self.value < 0:
+            return -self._parent.weight_lattice_realization()._term(-self.value-1)
+        else:
+            return self._parent.weight_lattice_realization()._free_module(0)
+
     def e(self, i):
         r"""
         Returns the action of $e_i$ on self.
@@ -472,7 +521,31 @@ class Crystal_of_letters_type_D_element(
         [1, 2, 3, 4, -4, -3, -2, -1]
         sage: C.check()
         True
-    """
+        
+    """
+
+    def weight(self):
+        """
+        Returns the weight of self.
+
+        EXAMPLES:
+            sage: [v.weight() for v in CrystalOfLetters(['D',4])]
+            [(1, 0, 0, 0),
+             (0, 1, 0, 0),
+             (0, 0, 1, 0),
+             (0, 0, 0, 1),
+             (0, 0, 0, -1),
+             (0, 0, -1, 0),
+             (0, -1, 0, 0),
+             (-1, 0, 0, 0)]
+        """
+        if self.value > 0:
+            return self._parent.weight_lattice_realization()._term(self.value-1)
+        elif self.value < 0:
+            return -self._parent.weight_lattice_realization()._term(-self.value-1)
+        else:
+            return self._parent.weight_lattice_realization()._free_module(0)
+
     def e(self, i):
         r"""
         Returns the action of $e_i$ on self.
@@ -552,6 +625,32 @@ class Crystal_of_letters_type_G_element(
         sage: C.check()
         True
     """
+    
+    def weight(self):
+        """
+        Returns the weight of self.
+
+        EXAMPLES:
+            sage: [v.weight() for v in CrystalOfLetters(['G',2])]
+            [(1, 0, -1), (1, -1, 0), (0, 1, -1), (0, 0, 0), (0, -1, 1), (-1, 1, 0), (-1, 0, 1)]
+        """
+        if self.value == 1:
+            return self._parent.weight_lattice_realization()._free_module((1, 0, -1))
+        elif self.value == 2:
+            return self._parent.weight_lattice_realization()._free_module((1, -1, 0))
+        elif self.value == 3:
+            return self._parent.weight_lattice_realization()._free_module((0, 1, -1))
+        elif self.value == 0:
+            return self._parent.weight_lattice_realization()._free_module((0, 0, 0))
+        elif self.value == -3:
+            return self._parent.weight_lattice_realization()._free_module((0, -1, 1))
+        elif self.value == -2:
+            return self._parent.weight_lattice_realization()._free_module((-1, 1, 0))
+        elif self.value == -1:
+            return self._parent.weight_lattice_realization()._free_module((-1, 0, 1))
+        else:
+            raise RuntimeError, "G2 crystal of letters element %d not valid"%self.value
+
     def e(self, i):
         r"""
         Returns the action of $e_i$ on self.
diff -r 2b672817103a sage/combinat/crystals/tensor_product.py
--- a/sage/combinat/crystals/tensor_product.py	Sun Apr 06 21:41:09 2008 -0700
+++ b/sage/combinat/crystals/tensor_product.py	Tue Apr 08 16:08:14 2008 -0700
@@ -235,7 +235,6 @@ class TensorProductOfCrystals(ClassicalC
             else:
                 self.module_generators = [ self(*x) for x in options['generators']]
 
-
     def __call__(self, *args):
         """
         EXAMPLES:
@@ -272,6 +271,18 @@ class TensorProductOfCrystalsElement(Imm
         k = position[0]
         return self.set_index(k, self[k].e(i))
     
+    def weight(self):
+        """
+        Returns the weight of self.
+
+        EXAMPLES:
+            sage: C = CrystalOfLetters(['A',3])
+            sage: T = TensorProductOfCrystals(C,C)
+            sage: T(C(1),C(2)).weight()
+            (1, 1, 0, 0)
+        """
+        return sum(self[j].weight() for j in range(len(self)))
+
     def f(self, i):
         """
         Returns the action of $f_i$ on self.
