diff --git a/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py b/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py
index 290a26a..5dc0bcd 100644
--- a/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py
+++ b/TestON/tests/FUNC/FUNCgroup/dependencies/group-bucket.py
@@ -1,31 +1,31 @@
-def addBucket( main , egressPort = "" ):
-       """
-       Description:
-            Create a single bucket which can be added to a Group.
-       Optional:
-            * egressPort: port of egress device
-       Returns:
-            * Returns a Bucket
-            * Returns None in case of error
-       Note:
-            The ip and port option are for the requests input's ip and port
-            of the ONOS node.
-       """
-       try:
+def addBucket( main, egressPort="" ):
+    """
+    Description:
+         Create a single bucket which can be added to a Group.
+    Optional:
+         * egressPort: port of egress device
+    Returns:
+         * Returns a Bucket
+         * Returns None in case of error
+    Note:
+         The ip and port option are for the requests input's ip and port
+         of the ONOS node.
+    """
+    try:
 
-           bucket = {
-                        "treatment":{ "instructions":[] }
-                    }
-           if egressPort:
-               bucket[ 'treatment' ][ 'instructions' ].append( {
-                                                        "type":"OUTPUT",
-                                                        "port":egressPort } )
-           return bucket
+        bucket = {
+                     "treatment": { "instructions": [] }
+                 }
+        if egressPort:
+            bucket[ 'treatment' ][ 'instructions' ].append( {
+                                                     "type": "OUTPUT",
+                                                     "port": egressPort } )
+        return bucket
 
-       except ( AttributeError, TypeError ):
-           main.log.exception( self.name + ": Object not as expected" )
-           return None
-       except Exception:
-           main.log.exception( self.name + ": Uncaught exception!" )
-           main.cleanup()
-           main.exit()
+    except ( AttributeError, TypeError ):
+        main.log.exception( self.name + ": Object not as expected" )
+        return None
+    except Exception:
+        main.log.exception( self.name + ": Uncaught exception!" )
+        main.cleanup()
+        main.exit()
