diff --git a/Demo/classes/Complex.py b/Demo/classes/Complex.py
index a9f5c2e..03c93fd 100755
--- a/Demo/classes/Complex.py
+++ b/Demo/classes/Complex.py
@@ -62,8 +62,8 @@
 # Complex for +,-,cmp
 # Polar   for *,/,pow
 
-
 import types, math
+import sys
 
 twopi = math.pi*2.0
 halfpi = math.pi/2.0
@@ -98,14 +98,22 @@
 class Complex:
 
     def __init__(self, re=0, im=0):
+        _re = 0
+        _im = 0
         if IsComplex(re):
-            im = i + Complex(0, re.im)
-            re = re.re
+            _re = re.re
+            _im = re.im
+        else:
+            _re = re
         if IsComplex(im):
-            re = re - im.im
-            im = im.re
-        self.__dict__['re'] = re
-        self.__dict__['im'] = im
+            _re = _re - im.im
+            _im = _im + im.re
+        else:
+            _im = _im + im
+        # this class is immutable, so setting self.re directly is
+        # not possible.
+        self.__dict__['re'] = _re
+        self.__dict__['im'] = _im
 
     def __setattr__(self, name, value):
         raise TypeError, 'Complex numbers are immutable'
@@ -224,7 +232,6 @@
 
 
 def checkop(expr, a, b, value, fuzz = 1e-6):
-    import sys
     print '       ', a, 'and', b,
     try:
         result = eval(expr)
@@ -238,8 +245,28 @@
     if not ok:
         print '!!\t!!\t!! should be', value, 'diff', abs(result - value)
 
-
 def test():
+    print 'test constructors'
+    constructor_test = (
+        # "expect" is an array [re,im] "got" the Complex.
+            ( (0,0), Complex() ),
+            ( (0,0), Complex() ),
+            ( (1,0), Complex(1) ),
+            ( (0,1), Complex(0,1) ),
+            ( (1,2), Complex(Complex(1,2)) ),
+            ( (1,3), Complex(Complex(1,2),1) ),
+            ( (0,0), Complex(0,Complex(0,0)) ),
+            ( (3,4), Complex(3,Complex(4)) ),
+            ( (-1,3), Complex(1,Complex(3,2)) ),
+            ( (-7,6), Complex(Complex(1,2),Complex(4,8)) ) )
+    cnt = [0,0]
+    for t in constructor_test:
+        cnt[0] += 1
+        if ((t[0][0]!=t[1].re)or(t[0][1]!=t[1].im)):
+            print "        expected", t[0], "got", t[1]
+            cnt[1] += 1
+    print "  ", cnt[1], "of", cnt[0], "tests failed"
+    # test operators
     testsuite = {
             'a+b': [
                     (1, 10, 11),
