diff --git a/dios/dios.py b/dios/dios.py
index 28eba26c770207a26be2fc17392b1d628d306daa..2e3701a095561fbf74d6c279781f59b0ab1f2316 100644
--- a/dios/dios.py
+++ b/dios/dios.py
@@ -1,6 +1,7 @@
 from dios.lib import *
 from dios.options import *
 import pandas as pd
+import numpy as np
 import operator as op
 
 from collections import OrderedDict
@@ -56,7 +57,7 @@ class DictOfSeries:
 
     """
 
-    def __init__(self, data=None, itype=None, columns=None, downcast_policy='lossless'):
+    def __init__(self, data=None, columns=None, itype=None, downcast_policy='lossless'):
 
         self._data = OrderedDict()
 
@@ -67,7 +68,8 @@ class DictOfSeries:
         # May data was given, so we firstly set itype to MixedItype, then insert all data,
         # and check/cast the itype afterwards, otherwise __setitem_new() will set the itype,
         # which may prevent inserting series with other (higher) itypes.
-        self._itype = MixedItype
+        with reraise("param itype: "):
+            self._itype = get_itype(itype)
 
         policies = ['force', 'lossless', 'never']
         if downcast_policy not in policies:
@@ -400,18 +402,26 @@ class DictOfSeries:
         pd.set_option('display.max_rows', pd_max_rows)
         return s
 
-    def __bool__(self):
-        raise ValueError("The truth value of a DictionaryOfSeries is ambiguous. Use a.empty, a.any() or a.all().")
+    # def __bool__(self):
+    #     raise ValueError("The truth value of a DictionaryOfSeries is ambiguous. Use a.empty, a.any() or a.all().")
 
     @property
     def empty(self):
         return all(self._data[c].empty for c in self._data)
 
     def all(self):
-        return all(all(self._data[c]) for c in self._data)
+        return pd.Series([all(self._data[c]) for c in self._data])
 
     def any(self):
-        return any(any(self._data[c]) for c in self._data)
+        return pd.Series([any(self._data[c]) for c in self._data])
+
+    def aaall(self):
+        """absolute all all"""
+        return self.all().all()
+
+    def aaany(self):
+        """absolute any any"""
+        return self.any().any()
 
     def __len__(self):
         return len(self._data)
@@ -425,6 +435,9 @@ class DictOfSeries:
     def __iter__(self):
         yield from self._data
 
+    # def __array__(self):
+    #     return [False, True]
+
     def __delitem__(self, key):
         del self._data[key]
 
@@ -466,15 +479,9 @@ class DictOfSeries:
                 new[k] = op(self[k], other)
         return new
 
-    def __neg__(self):
-        return self.__op1__(op.neg)
-
-    def __invert__(self):
-        return self.__op1__(op.inv)
-
-    def __abs__(self):
-        return self.__op1__(op.abs)
-
+    # ----------------------------------
+    # comparators
+    # ----------------------------------
     def __lt__(self, other):
         return self.__op2__(other, op.lt)
 
@@ -493,6 +500,18 @@ class DictOfSeries:
     def __gt__(self, other):
         return self.__op2__(other, op.gt)
 
+    # ----------------------------------
+    # arithmetical
+    # ----------------------------------
+
+    def __neg__(self):
+        # -dios
+        return self.__op1__(op.neg)
+
+    def __abs__(self):
+        # abs(dios)
+        return self.__op1__(op.abs)
+
     def __add__(self, other):
         return self.__op2__(other, op.add)
 
@@ -514,6 +533,14 @@ class DictOfSeries:
     def __pow__(self, other):
         return self.__op2__(other, op.pow)
 
+    # ----------------------------------
+    # bool stuff
+    # ----------------------------------
+
+    def __invert__(self):
+        # ~dios
+        return self.__op1__(op.inv)
+
     def __and__(self, other):
         return self.__op2__(other, op.and_)
 
diff --git a/dios/lib.py b/dios/lib.py
index 38f56620c0fd9fbc0a1390accefc743339c21047..27df4f49e4c2059ee13ae10e45d436f3a84d42c5 100644
--- a/dios/lib.py
+++ b/dios/lib.py
@@ -3,6 +3,15 @@ from dios.options import *
 
 import pandas as pd
 import warnings
+import contextlib
+
+
+@contextlib.contextmanager
+def reraise(prefix="", postfix=""):
+    try:
+        yield
+    except Exception as e:
+        raise type(e)(prefix + str(e) + postfix) from e
 
 
 def _get_storage_class_values(cls):
diff --git a/test/run_dios.py b/test/run_dios.py
index 2ab7f58402fbe2bab938fa36d818072212d33d45..14303e2616cc4735868d9356336d886f48d616fd 100644
--- a/test/run_dios.py
+++ b/test/run_dios.py
@@ -6,6 +6,9 @@ if __name__ == '__main__':
     # dios_options[Options.mixed_itype_policy] = 'error'
 
     dios = DictOfSeries(data=[234.54, 5, 5, 4, np.nan, 5, 4, 5])
+
+    print(all(dios == dios))
+
     dtser = pd.Series([2,4,4123,122,4], index=pd.date_range(freq='1d', periods=5, start='2000-01-01'))
     dios['b'] = dtser
     dios2 = dios.copy()
diff --git a/test/test_dios.py b/test/test_dios.py
index 0bc7ef09c12ec864b779b7c2e7d460554ad821c3..b8c0b9f14e9bf84062a019a43166d617017fde9b 100644
--- a/test/test_dios.py
+++ b/test/test_dios.py
@@ -56,3 +56,28 @@ def test_copy_copy_empty__copy__(dictofseries):
         dios[i][0] = 999999
         assert dios[i][0] == shallow[i][0]
         assert dios[i][0] != deep[i][0]
+
+
+def test__mul__(dictofseries):
+    a = dictofseries.copy()
+    for i in [1,2,50, 33.3, 0.1, 0]:
+        b = a * i
+        for c in b:
+            exp = a[c] * i
+            assert np.all(b[c] == exp)
+            assert b[c] is not exp
+
+
+def test__eq__(dictofseries):
+    a = dictofseries.copy()
+    b = dictofseries.copy()
+
+    assert a is not b
+    assert (a == b).aaall()
+    x = b['c0']
+    x.iloc[5] = 5
+    b['c0'] = x
+    assert (a != b).aaany()
+    # assert False
+
+