diff --git a/luennot/live12/Kutsuminen/Kutsuminen.cs b/luennot/live12/Kutsuminen/Kutsuminen.cs
index 3112bdcf57420e80d6f646b1615f74dae5010810..bdd4b47e2b289cf9e3b2a5bbe9a987269690cff8 100644
--- a/luennot/live12/Kutsuminen/Kutsuminen.cs
+++ b/luennot/live12/Kutsuminen/Kutsuminen.cs
@@ -14,15 +14,14 @@ public class Kutsuminen
     public static void Main(string[] args)
     {
         int a = 4, b = 5;
-        int iso;
 
-        iso = Suurempi(a, b);
+        var iso = Suurempi(a, b);
         Console.WriteLine(iso);
 
         iso = Suurempi(iso + 1, 7 / 3 + 5 / 2);
         Console.WriteLine(iso);
 
-        int[] luvut = new int[4];
+        int[] luvut = { 0, 6, 4, 9 };
         int[] m = luvut;
 
         luvut[2] = 4;
@@ -83,6 +82,29 @@ public class Kutsuminen
     /// </pre>
     /// </example>
     public static void VaihdaSuurin(int[] t, int korvaavaArvo)
+    {
+        int paikka = SuurimmanPaikka(t);
+        if (paikka < 0) return;
+        t[paikka] = korvaavaArvo;
+    }
+
+    
+    /// <summary>
+    /// Etsii taulukon suurimman luvun paikan.  Mikäli monta
+    /// yhtäsuurta, palautetaan ensimmäisen paikka.  Mikäli
+    /// suurinta ei löydy (tyhjä taulukko), palautetaan -1
+    /// </summary>
+    /// <param name="t">tutkittava taulukko</param>
+    /// <returns>suurimman alkion paikan indeksi tai -1</returns>
+    /// <example>
+    /// <pre name="test">
+    ///    SuurimmanPaikka(new int[]{1,2,5,3}) === 2;
+    ///    SuurimmanPaikka(new int[]{7,2,5,3}) === 0;
+    ///    SuurimmanPaikka(new int[]{1,2,5,8}) === 3;
+    ///    SuurimmanPaikka(new int[]{}) === -1;
+    /// </pre>
+    /// </example>
+    public static int SuurimmanPaikka(int[] t)
     {
         int paikka = -1;
         int suurin = int.MinValue;
@@ -96,8 +118,7 @@ public class Kutsuminen
             }
         }
 
-        if (paikka < 0) return;
-        t[paikka] = korvaavaArvo;
+        return paikka;
     }
 
 }
\ No newline at end of file
diff --git a/luennot/live12/KutsuminenTest/KutsuminenTest.cs b/luennot/live12/KutsuminenTest/KutsuminenTest.cs
index 3b8d1e810cb6dadeb0ab79386c3234ca165e6338..f457c709d04d0203960bf45ff29253142b0dc843 100644
--- a/luennot/live12/KutsuminenTest/KutsuminenTest.cs
+++ b/luennot/live12/KutsuminenTest/KutsuminenTest.cs
@@ -8,33 +8,41 @@ using static Kutsuminen;
 	public  class TestKutsuminen
 	{
 		[Test]
-		public  void TestSuurempi45()
+		public  void TestSuurempi44()
 		{
-			Assert.AreEqual( 4, Suurempi(3,4) , "in method Suurempi, line 46");
-			Assert.AreEqual( 4, Suurempi(-3,4) , "in method Suurempi, line 47");
-			Assert.AreEqual( -3, Suurempi(-3,-4) , "in method Suurempi, line 48");
-			Assert.AreEqual( 2, Suurempi(2,2) , "in method Suurempi, line 49");
+			Assert.AreEqual( 4, Suurempi(3,4) , "in method Suurempi, line 45");
+			Assert.AreEqual( 4, Suurempi(-3,4) , "in method Suurempi, line 46");
+			Assert.AreEqual( -3, Suurempi(-3,-4) , "in method Suurempi, line 47");
+			Assert.AreEqual( 2, Suurempi(2,2) , "in method Suurempi, line 48");
 		}
 		[Test]
-		public  void TestVaihdaSuurin65()
+		public  void TestVaihdaSuurin64()
 		{
 			int[] luvut = {2,5,4,3};
 			VaihdaSuurin(luvut,1);
-			Assert.AreEqual( "2 1 4 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 68");
+			Assert.AreEqual( "2 1 4 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 67");
 			VaihdaSuurin(luvut,1);
-			Assert.AreEqual( "2 1 1 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 70");
+			Assert.AreEqual( "2 1 1 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 69");
 			VaihdaSuurin(luvut,9);
-			Assert.AreEqual( "2 1 1 9", String.Join(" ",luvut) , "in method VaihdaSuurin, line 72");
+			Assert.AreEqual( "2 1 1 9", String.Join(" ",luvut) , "in method VaihdaSuurin, line 71");
 			VaihdaSuurin(luvut,1);
-			Assert.AreEqual( "2 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 74");
+			Assert.AreEqual( "2 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 73");
 			VaihdaSuurin(luvut,-1);
-			Assert.AreEqual( "-1 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 76");
+			Assert.AreEqual( "-1 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 75");
 			luvut = new int[]{5};
 			VaihdaSuurin(luvut,2);
-			Assert.AreEqual( "2", String.Join(" ",luvut) , "in method VaihdaSuurin, line 79");
+			Assert.AreEqual( "2", String.Join(" ",luvut) , "in method VaihdaSuurin, line 78");
 			luvut = new int[0];
 			VaihdaSuurin(luvut,2);
-			Assert.AreEqual( "", String.Join(" ",luvut) , "in method VaihdaSuurin, line 82");
+			Assert.AreEqual( "", String.Join(" ",luvut) , "in method VaihdaSuurin, line 81");
+		}
+		[Test]
+		public  void TestSuurimmanPaikka100()
+		{
+			Assert.AreEqual( 2, SuurimmanPaikka(new int[]{1,2,5,3}) , "in method SuurimmanPaikka, line 101");
+			Assert.AreEqual( 0, SuurimmanPaikka(new int[]{7,2,5,3}) , "in method SuurimmanPaikka, line 102");
+			Assert.AreEqual( 3, SuurimmanPaikka(new int[]{1,2,5,8}) , "in method SuurimmanPaikka, line 103");
+			Assert.AreEqual( -1, SuurimmanPaikka(new int[]{}) , "in method SuurimmanPaikka, line 104");
 		}
 	}
 
diff --git a/luennot/live12/Matriisit/Matriisit.cs b/luennot/live12/Matriisit/Matriisit.cs
new file mode 100644
index 0000000000000000000000000000000000000000..72d2e15f34ae8d83e14b8aab44d4ecc416681841
--- /dev/null
+++ b/luennot/live12/Matriisit/Matriisit.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections.Generic;
+
+/// @author Omanimi
+/// @version 10.10.2023
+/// <summary>
+/// 
+/// </summary>
+public class Matriisit
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public static void Main()
+    {
+        int[,] mat = {
+            { 5, 6, 2, 7, 9},
+            {11,34,23, 0,42},
+            {99, 6, 4,23,23},
+            {19,11, 5,11,47},
+            {47, 9, 5,18,19},
+            {33,24,54,67,88}
+        };        
+        
+        int lkm = MonellakoRivilla(mat, 11);
+        Console.WriteLine(lkm);
+    }
+
+
+    /// <summary>
+    /// Lasketaan monellako rivillä taulukossa esiintyy etsittävä luku.
+    /// Jos luku on useasti samalla rivillä, rivi lasketaan yhden kerran.
+    /// </summary>
+    /// <param name="mat">matriisi, josta lukua etsitään</param>
+    /// <param name="etsittava">luku jota etsitään</param>
+    /// <returns>monellako rivillä etsittävä oli</returns>
+    /// <example>
+    /// <pre name="test">
+    ///  int[,] t = {{2, 1, 2}, {3, 4, 2}, {1, 0, 1}, {1, 8, 9}};
+    /// MonellakoRivilla(t, 2) === 2;
+    /// MonellakoRivilla(t, 5) === 0;
+    /// MonellakoRivilla(t, 0) === 1;
+    /// MonellakoRivilla(t, 1) === 3;
+    /// MonellakoRivilla(new int[0, 0], 1) === 0;
+    /// </pre>
+    /// </example>
+    public static int MonellakoRivilla(int[,] mat, int etsittava)
+    {
+        int riveja = mat.GetLength(0);
+        int sarakkeita = mat.GetLength(1);
+        int lkm = 0;
+
+        for (int iy = 0; iy < riveja; iy++)
+        {
+            for (int ix = 0; ix < sarakkeita; ix++)
+            {
+                int luku = mat[iy, ix];
+                if (luku == etsittava)
+                {
+                    lkm++;
+                    break;
+                }
+            }
+        }
+
+        return lkm;
+
+        return 0;
+    }
+    
+    
+    
+}
\ No newline at end of file
diff --git a/luennot/live12/Matriisit/Matriisit.csproj b/luennot/live12/Matriisit/Matriisit.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..df22a1ba07d539b07cf0adbaa6457daadeb433db
--- /dev/null
+++ b/luennot/live12/Matriisit/Matriisit.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net7.0</TargetFramework>
+        <ExternalConsole>true</ExternalConsole>
+    </PropertyGroup>
+
+</Project>
diff --git a/luennot/live12/MatriisitTest/MatriisitTest.cs b/luennot/live12/MatriisitTest/MatriisitTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5906afccac4093ad1af7d3e20e839aa0ea924ad3
--- /dev/null
+++ b/luennot/live12/MatriisitTest/MatriisitTest.cs
@@ -0,0 +1,24 @@
+// ReSharper disable all
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections.Generic;
+using NUnit.Framework;
+using static Matriisit;
+
+	[TestFixture]
+	[DefaultFloatingPointTolerance(0.000001)]
+	public  class TestMatriisit
+	{
+		[Test]
+		public  void TestMonellakoRivilla40()
+		{
+			int[,] t = {{2, 1, 2}, {3, 4, 2}, {1, 0, 1}, {1, 8, 9}};
+			Assert.AreEqual( 2, MonellakoRivilla(t, 2) , "in method MonellakoRivilla, line 42");
+			Assert.AreEqual( 0, MonellakoRivilla(t, 5) , "in method MonellakoRivilla, line 43");
+			Assert.AreEqual( 1, MonellakoRivilla(t, 0) , "in method MonellakoRivilla, line 44");
+			Assert.AreEqual( 3, MonellakoRivilla(t, 1) , "in method MonellakoRivilla, line 45");
+			Assert.AreEqual( 0, MonellakoRivilla(new int[0, 0], 1) , "in method MonellakoRivilla, line 46");
+		}
+	}
+
diff --git a/luennot/live12/MatriisitTest/MatriisitTest.csproj b/luennot/live12/MatriisitTest/MatriisitTest.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..0d3889eeb679199074a5fafd8634cc35696f4a56
--- /dev/null
+++ b/luennot/live12/MatriisitTest/MatriisitTest.csproj
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Project Sdk="Microsoft.NET.Sdk">
+    <PropertyGroup>
+        <TargetFramework>net7.0</TargetFramework>
+        <IsPackable>false</IsPackable>
+    </PropertyGroup>
+    <ItemGroup>
+        <PackageReference Include="NUnit" Version="3.13.1"/>
+        <PackageReference Include="NUnit3TestAdapter" Version="3.17.0"/>
+        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3"/>
+    </ItemGroup>
+    <ItemGroup>
+        <ProjectReference Include="..\Matriisit\Matriisit.csproj"/>
+    </ItemGroup>
+</Project>
diff --git a/luennot/live12/live12.sln b/luennot/live12/live12.sln
index c9df61568c63b122bf49ab91ab5c6f34c16833e1..100ea0397a68727dde70733e927056e4d20263ba 100644
--- a/luennot/live12/live12.sln
+++ b/luennot/live12/live12.sln
@@ -5,6 +5,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kutsuminen", "Kutsuminen\Ku
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KutsuminenTest", "KutsuminenTest\KutsuminenTest.csproj", "{721E3A06-DA2D-4572-A815-BC11B5CBC6B1}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Matriisit", "Matriisit\Matriisit.csproj", "{135140AB-BD3A-45F9-A901-E348DC387772}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MatriisitTest", "MatriisitTest\MatriisitTest.csproj", "{3A72F04C-1638-4AA8-9829-5CE45127ABAD}"
+EndProject
 Global
   GlobalSection(SolutionConfigurationPlatforms) = preSolution
     Debug|Any CPU = Debug|Any CPU
@@ -19,5 +23,13 @@ Global
     {721E3A06-DA2D-4572-A815-BC11B5CBC6B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
     {721E3A06-DA2D-4572-A815-BC11B5CBC6B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
     {721E3A06-DA2D-4572-A815-BC11B5CBC6B1}.Release|Any CPU.Build.0 = Release|Any CPU
+    {135140AB-BD3A-45F9-A901-E348DC387772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {135140AB-BD3A-45F9-A901-E348DC387772}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {135140AB-BD3A-45F9-A901-E348DC387772}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {135140AB-BD3A-45F9-A901-E348DC387772}.Release|Any CPU.Build.0 = Release|Any CPU
+    {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Release|Any CPU.Build.0 = Release|Any CPU
   EndGlobalSection
 EndGlobal