diff --git a/DanubeRiver/__init__.py b/DanubeRiver/__init__.py
index 666cfac42ea6f73daf65672fd3fc01adfb47689a..c0e9c6ca59362cba9846ab27ffbc1f97303deb83 100644
--- a/DanubeRiver/__init__.py
+++ b/DanubeRiver/__init__.py
@@ -135,6 +135,10 @@ def make_wafers(args_config, no_doc, no_csv):
 		ar = DanubeRiver.fet.generate(config)
 		if ar is not None:
 			structures+=ar
+	if config.have_fingered_mosfets():
+		ar = DanubeRiver.fet.generate(config, fingered=True)
+		if ar is not None:
+			structures+=ar
 	def sortStructure(val):
 		return val.xsize*val.ysize
 	structures.sort(key=sortStructure,reverse=True)
@@ -152,16 +156,16 @@ def make_wafers(args_config, no_doc, no_csv):
 	r = []
 	spacing = lph.to_nm(config, config.get_structure_spacing())
 	for i, st in enumerate(structures):
-		if w+st.xsize+spacing>maxw or i==len(rows)-1:
+		r.append(st)
+		w += st.xsize+spacing
+		h = st.ysize if st.ysize>h else h
+		next_w = structures[i+1].xsize if i+1<len(structures) else structures[i].xsize
+		if i+1==len(structures) or w+next_w+spacing>maxw:
 			h += spacing
 			rows.append({'r':r, 'w':w, 'h':h})
 			r = []
 			h = w = 0
-		r.append(st)
-		w += st.xsize+spacing
-		h = st.ysize if st.ysize>h else h
-
-	have_index = sum(r['h'] for r in rows)>maxh
+	have_index = sum(r['h'] for r in rows) > maxh
 
 	# organize
 	ret=[]
@@ -169,13 +173,13 @@ def make_wafers(args_config, no_doc, no_csv):
 	h = 0
 	cnt = 0
 	for i, r in enumerate(rows):
-		if h+r['h']>=maxh or i+1==len(rows):
+		structures.append(r)
+		h += r['h']
+		next_h = rows[i+1]['h'] if i+1 < len(rows) else rows[i]['h']
+		if h+next_h>=maxh or i+1==len(rows):
 			cnt = cnt+1 if have_index else None
 			ret.append(DanubeTestWafer(config, structures, no_doc, no_csv, index=cnt)) # create wafer
 			# reset
 			structures.clear()
 			h = 0
-		h += r['h']
-		structures.append(r)
-
 	return ret
diff --git a/DanubeRiver/config.py b/DanubeRiver/config.py
index e69924ce7780d6240fdd19ccfc989fff3b841152..7bbf8b30d796eb6b82696f32065947e93d9bd796 100644
--- a/DanubeRiver/config.py
+++ b/DanubeRiver/config.py
@@ -172,14 +172,28 @@ class DanubeConfig(Config):
 		dimensions = self.get_section_value('mosfet', 'dimensions')
 		if dimensions is None:
 			return ret
-
 		dimensions = dimensions.strip().split(',')
 		for i in dimensions:
 			i = i.split(':')
 			w = float(i[0])
 			h = float(i[1])
-			ret.append((w,h))
+			ret.append((1,w,h))
+		return ret
 
+	def get_finger_fet_dimensions(self):
+		ret=[]
+		dimensions = self.get_section_value('mosfet', 'fingerdimensions')
+		if dimensions is None:
+			return ret
+		dimensions = dimensions.strip().split(',')
+		for i in dimensions:
+			i = i.split('x')
+			n = int(i[0])
+			if len(i) > 1:
+				i = i[1].split(':')
+				w = float(i[0])
+				h = float(i[1])
+				ret.append((n,w,h))
 		return ret
 
 	def get_resistor_max_current(self):
@@ -204,6 +218,12 @@ class DanubeConfig(Config):
 			res = res.strip()
 		return (res == 'true')
 
+	def have_fingered_mosfets(self):
+		res = self.get_section_value('flags', 'fingeredmosfet')
+		if res is not None:
+			res = res.strip()
+		return (res == 'true')
+
 	def have_power_mosfets(self):
 		res = self.get_section_value('flags', 'powermosfet')
 		if res is not None:
diff --git a/DanubeRiver/fet.py b/DanubeRiver/fet.py
index 80ebf0aae707b89df245fc5ba9b1ed4a7c56e479..6d7e9d0ee3d56671bcc9c683ccf80e9783d0e90c 100644
--- a/DanubeRiver/fet.py
+++ b/DanubeRiver/fet.py
@@ -36,10 +36,12 @@ class DanubeTestMOSFET(AbstractDanubeStructure):
 		elif mtype == ChannelType.NMOS:
 			ret += "N_"
 
-		ret += "W"
 		ret += str(int(dims[0]))
-		ret += "/L"
+		ret += "x"
+		ret += "W"
 		ret += str(int(dims[1]))
+		ret += "/L"
+		ret += str(int(dims[2]))
 
 		return ret
 
@@ -60,9 +62,11 @@ class DanubeTestMOSFET(AbstractDanubeStructure):
 		self.connect_rect(self.pads[0].ports["e4"], fet.ports["e1_3"], self.conlayer_name) # connect drain
 		self.connect_rect(self.pads[2].ports["e2"], fet.ports["e3_4"], self.conlayer_name) # connect bulk
 
-def generate(config):
+def generate(config, fingered=False):
 	ret = []
-	dimensions = config.get_fet_dimensions()
+	dimensions = config.get_finger_fet_dimensions() if fingered else config.get_fet_dimensions()
+	if dimensions is None:
+		return ret
 	for dims in dimensions:
 		s = DanubeTestMOSFET(config, ChannelType.PMOS, dims)
 		ret.append(s)
diff --git a/configs/kacst-ls1u.cfg b/configs/kacst-ls1u.cfg
index 41495692ba25e9bca99b7eda78f5cb8a77b00339..a01937753b94cf877c2e67f7dd2b6b7957519a85 100644
--- a/configs/kacst-ls1u.cfg
+++ b/configs/kacst-ls1u.cfg
@@ -26,6 +26,7 @@ Lambda = 500nm
 Resistance = true
 Capacitance = true
 MOSFET = true
+#FingeredMOSFET = true
 
 [Resistor]
 Layers =  nwell, pwell, ndiffusion, pdiffusion, poly, metal1, metal2
@@ -38,4 +39,4 @@ LayerPairs= poly:nwell, poly:pwell, metal1:nwell, metal1:pwell, metal2:metal1
 
 [MOSFET]
 Dimensions = 3:2, 4:2, 5:2, 5:3, 5:4, 5:5, 10:3, 10:4, 10:5, 10:10, 20:10, 20:20, 40:10, 40:20
-
+FingerDimensions = 5x5:5, 5x5:10