diff --git a/src/Backends/Audio/SoftwareMixer/Solaris.cpp b/src/Backends/Audio/SoftwareMixer/Solaris.cpp
index d9a9592f..18e90149 100644
--- a/src/Backends/Audio/SoftwareMixer/Solaris.cpp
+++ b/src/Backends/Audio/SoftwareMixer/Solaris.cpp
@@ -17,7 +17,7 @@
 #include <sys/audioio.h>
 #include <pthread.h>
 
-static const int samplesPerGo = 0x200;
+static const int samplesPerGo = 1600;
 static const int parkSignal = SIGUSR1;
 static pthread_t mainThread;
 static int sndfp;
@@ -25,50 +25,52 @@ static FILE* sndfile;
 static void (*parent_callback)(long *stream, size_t frames_total);
 static bool audioDone = false;
 
-static void soundSetup() {
+static inline void setUpSoundFrame(long *mix) {
+    memset(mix, 0, samplesPerGo * 2 * sizeof(long));
+    parent_callback(mix, samplesPerGo);
+}
+
+static inline void soundWait() {
+    audio_info_t audioInfo;
+    ioctl(sndfp, AUDIO_GETINFO, &audioInfo);
+    int playedBefore = audioInfo.play.samples;
+    int playedNow = audioInfo.play.samples;
+    while(playedNow - playedBefore < samplesPerGo) {
+        Backend_Delay(10);
+        ioctl(sndfp, AUDIO_GETINFO, &audioInfo);
+        playedNow = audioInfo.play.samples;
+    }
+}
+
+static inline void feedOutSound(long* mix) {
+    for(int i = 0; i < samplesPerGo * 2; i++) {
+        short sample = mix[i];
+        if(mix[i] > 0x7FFF) {
+            sample = 0x7FFF;
+        }
+        if(mix[i] < -0x7FFF) {
+            sample = -0x7FFF;
+        }
+        fputc((sample >> 8) & 0xFF, sndfile);
+        fputc(sample & 0xFF, sndfile);
+    }
 }
 
 static void* soundcheckthread(void*) {
     printf("Entered sound thread.\n");
-    unsigned long for_as_long_as_it_seems_we_should = 0;
-    bool firstTime = true;
-    int counter = 0;
+    long mix[samplesPerGo * 2];
+    setUpSoundFrame(mix);
+    feedOutSound(mix);
+    setUpSoundFrame(mix);
+    feedOutSound(mix);
     while(1) {
-        long mix[samplesPerGo * 2];
-        memset(mix, 0, samplesPerGo * 2 * sizeof(long));
+        
+        setUpSoundFrame(mix);
 
-        parent_callback(mix, samplesPerGo);
+        // Waiting for more to be needed
+        soundWait();
 
-        for_as_long_as_it_seems_we_should = ((float)(samplesPerGo) / (float)8000) * 1000000;
-
-        audio_info_t audioInfo;
-        ioctl(sndfp, AUDIO_GETINFO, &audioInfo);
-        //printf("%d\n", audioInfo.play.error);
-
-        if(counter > 4 && audioInfo.play.error == 0) {
-            usleep(for_as_long_as_it_seems_we_should);
-        } else {
-            printf("ae\n");
-            audioInfo.play.error = 0;
-            ioctl(sndfp, AUDIO_SETINFO, &audioInfo);
-        }
-
-        for(int i = 0; i < samplesPerGo * 2; i++) {
-            //if(i % 2 == 0) {
-                short sample = mix[i];
-                if(mix[i] > 0x7FFF) {
-                    sample = 0x7FFF;
-                }
-                if(mix[i] < -0x7FFF) {
-                    sample = -0x7FFF;
-                }
-                fputc((sample >> 8) & 0xFF, sndfile);
-                fputc(sample & 0xFF, sndfile);
-            //}
-        }
-
-        counter += 1;
-        firstTime = false;
+        feedOutSound(mix);
     }
 }