diff -r ee8357c42b99 sympy/core/basic.py
--- a/sympy/core/basic.py	Sun Feb 08 23:58:08 2009 -0800
+++ b/sympy/core/basic.py	Thu Feb 12 21:09:24 2009 -0600
@@ -1940,9 +1940,11 @@
         from sympy.integrals import integrate
         return integrate(self, *args, **kwargs)
 
-    #XXX fix the removeme
-    def __call__(self, *args, **removeme):
-        return Function(self[0])(*args)
+    def __call__(self, subsdict):
+        """Use call as a shortcut for subs, but only support the dictionary version"""
+        if not isinstance(subsdict, dict):
+            raise TypeError("argument must be a dictionary")
+        return self.subs(subsdict)
 
     def __float__(self):
         result = self.evalf()
diff -r ee8357c42b99 sympy/core/tests/test_basic.py
--- a/sympy/core/tests/test_basic.py	Sun Feb 08 23:58:08 2009 -0800
+++ b/sympy/core/tests/test_basic.py	Thu Feb 12 21:09:24 2009 -0600
@@ -401,6 +401,15 @@
     assert (x+y)._subs_list([(x, 3), (y, x**2)]) == 3 + x**2
     assert (x+y)._subs_list([(y, x**2), (x, 3)]) == 12
 
+def test_call():
+    a,b,c,d,e = symbols('abcde')
+
+    assert sin(x)({ x : 1, sin(x) : 2}) == 2
+
+    expr = sqrt(sin(2*x))*sin(exp(x)*x)*cos(2*x) + sin(2*x)
+
+    assert expr({ sqrt(sin(2*x)) : a, cos(2*x) : b, sin(2*x) : c, x : d, exp(x) : e}) == c + a*b*sin(d*e)
+
 def test_has():
     x, y = symbols("xy")
     f = Function("f")
